初识java《Docker》

594 阅读10分钟

在介绍Docker之前,推荐大家一本我刚接触java的时候读过的书《java编程思想》,这是一本零几年出版的书,在这本书上对java未来做出的推断,里面就提到了微服务,容器和镜像的思想。而今天说的Docker就是运用的容器➕镜像实现的。

Docker的简介

Docker是我们开发人员和系统管理员使用容器开发部署和运行应用程序的平台,使用Linux容器来部署应用程序称为集装箱化,这得使用docker可轻松部署应用程序。有了他之后,我们把应用或者代码部署到一个系统上,只需要把几行命令迁移即可,而不用像以前一样,再重新去搭建和部署。他可以给我们提供一次性的环境,也可以随开随关,扩容和缩容,还可以通过多个容器,使一台机器可以跑多个服务,模拟出微服务架构,特别适合微服务的架构。而想要基本使用他,要从他的安装、启动、镜像、容器操作入手。

1.Docker安装前的环境准备

在这里我使用的环境是CentOS,因此我们要将Docker安装到CentOS上,这里建议安装在CentOS7.x以上的版本。我使用VMware的虚拟机中安装了Centos7。直接打开提供好的虚拟机文件挂载,挂载后,先设置内存大小,但不能超过宿主机的内存大小。接下来启动虚拟机,启动成功后,需要用户名和密码登陆。在cmd里使用ip addr或ifconfig命令查看虚拟机系统的IP,使用客户端SecureCRT软件,连接该IP的主机。

2.Docker的安装

在安装前我们要进行依赖性检查,需要一个64位系统的红帽系统,内核的版本必须大于3.10,可以通过下面的命令来查看linux内核版本。

有多种方法可以安装docker,我采用yum在线安装。首先查看是否安装过,命令如下:
如果已经安装,删除旧的docker,命令如下:
若有2017年之前的旧版本,需要如下删除:
清除默认的docker目录,其中包含了之前的镜像和容器文件、配置等。
安装一些必要的系统工具(否则没有下面的yum-config-manager命令):
添加软件源信息:
更新 yum 缓存:
手工查找并删除用户创建的配置文件。
验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

方式一:查看已经安装后的软件。

有client和service两部分表示docker安装启动都成功了:
方式二:查看docker的版本号
虽然安装好了Docker但并没有启动,需要通过系统服务命令的方式来启动。首先我们要运行查看Docker的概要信息
然后查看docker服务的启动状态:
接下来就可以启动docker服务:
最后就是停止docker服务:
重启docker服务:
也可以加入到开机启动(生产环境下一般要系统启动时自动运行Docker服务):

操作前的准备

在操作Docker之前我们要了解他的四个基本对象的概念,第一个镜像:镜像是构建 Docker 容器的基石,类似虚拟机镜像,Docker镜像是由文件系统叠加而成(是一种文件的存储形式);第二个容器:容器是镜像的一个运行实例,是一个运行环境,类似linux系统环境;第三个注册中心:注册中心来保存用户构建的镜像,注册服务器是存放仓库的地方。根据存储的镜像公开分享与否,Docker仓库分为公开仓库(Public)和私有仓库(Private)两种形式。Docker 公司运营公共的Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像。我这里先使用默认的Docker Hub;第四个仓库:注册中心服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag 标记,类似于版本号)来进行区分。

3.注册中心的国内加速镜像(Mirror)的配置

因为官方的docker服务器在国外,比较慢。一般要配置使用国内注册中心加速镜像。常见的加速镜像地址,第一个中科大镜像: 中科大Docker加速镜像地址:docker.mirrors.ustc.edu.cn 中科大Docker加速镜像官网说明:lug.ustc.edu.cn/wiki/mirror… 中科大Linux加速镜像官网说明:mirrors.ustc.edu.cn/ 第二个Docker中国区官方镜像:Docker中国官方镜像加速-地址:registry.docker-cn.com Docker中国官方镜像加速-官网说明:www.docker-cn.com/registry-mi… 第三个阿里的docker镜像,因为需要注册所以详情可以上网查找。

我这里使用中科大的加速镜像,配置如下,首先编辑daemon.json文件(没有该文件的话,请先建一个)

然后在该配置文件中加入:
配置完成后,一定要重启docker服务才能生效:
最后通过我们上面说的info命令就可以查看是否配置成功。

4.镜像的操作

第一步先查询一下Docker Hub上有没有需要的镜像

或者直接使用docker hub提供的一个网站来搜索需要的镜像:hub.docker.com如下图实例展示
第二步从注册中心上拉取下载需要的镜像
如果是拉取centos仓库中的镜像
如果要下载指定版本的镜像,可以执行命令:
第三步就是查看镜像
如果是列出本地所有的镜像
下图是根据仓库名字和标记来列出本地镜像
第四步就是本地镜像的删除
如果是删除centos的镜像
如果是删除所有的镜像

5.容器的操作

第一步列出容器

如果是列出所有正在运行的容器
如果是显示出所有容器,包括正在运行的和停止的
如果是查看停止的容器列表
第二步容器的创建运行
因为命令很多,我们按照我们平时使用方式,分别以我们分别以交互式容器和守护式容器的创建来说明。首先是交互式容器,创建运行一个centos的容器。

  • -i:保持标准输入(STDIN)打开,可实现交互式输入输出。该参数也可以写成--interactive=true。
  • -t:分配一个伪终端(pseudo-TTY:伪终端、虚拟控制台),用于交互式的输入输出,必须有-i参数。该参数也可以写成--tty =true。
  • bash:分配伪终端时要在容器上执行的执行,这里使用的linux的bash脚本命令,该命令完整写法为/bin/bash。
  • 因为run和镜像名字之间的选项没有顺序,但命令必须放到镜像名字之后。

最后是守护式容器的创建,创建一个需要长期运行的容器并打印容器ID。

  • -d:在后台运行容器并打印容器ID。该参数也可以写成--detach或--detach=true。

登陆守护式容器方式:

第三步容器的停止

如果停止正在运行的mycentos2容器:
第四步容器的启动
如果是启动mycentos2容器
第五步重启容器
如果是重启mycentos2容器
第六步暂停容器
如果是暂停挂起mycentos2容器
第七步取消暂停容器
如果是取消暂停挂起mycentos2容器
第八步在容器和文件系统之间复制文件/文件夹
如果是我们需要将文件拷贝到容器内
如果是将宿主机的文件拷贝到mycentos2中
第九步将宿主机的目录的挂载映射到容器中

  • -v:将当前工作目录装载到容器中。绑定装载卷的宿主机目录不存在时,Docker会自动在宿主机上为您创建这个目录。
  • --read-only:将容器的根文件系统安装为只读。卷的挂载可以与只读标志选项 --read-only 结合使用,用于控制容器对文件是否能写入。只读标志将容器的根文件系统挂载为只读,禁止向容器指定卷以外的位置写入。容器中只有挂载的目录是可写的,其他的目录无法写入,从而保护容器。

如果将宿主机上的/root/myvolume目录挂载到mycentos3中的/myvolume目录中:

如果遇到你共享的是多级的目录,挂载宿主机已存在目录后,在容器内对其进行操作,报“Permission denied”。可能会出现权限不足的提示。 第一种解决方案,指定--privileged参数,以特权方式启动容器
第二种解决方案,关闭CentOS7中的安全模块selinux,如果是临时关闭,
如果是永久关闭,要修改/etc/selinux/config或/etc/sysconfig/selinux文件,将SELINUX的值设置为disabled。(不推荐)
最后就是容器的删除
如果是先停止运行的mycentos3的容器,再删除他。
如果是直接强制删除正在运行的mycentos2容器
如果是强制删除所有的容器
如果是想删除容器时,将其关联的卷也删掉

6.案例-Redis部署

目标:使用Docker部署一个Redis,并通过客户端连接访问。

第一步:拉取Redis镜像

第二步:创建Redis容器
第三步cmd远程测试连接

案例-MySQL部署

目标:使用Docker部署一个MySQL,并通过客户端连接访问。

第一步:拉取MySQL镜像

第二步:创建MySQL容器并映射端口和改密码

  • -e:代表添加环境变量 MYSQL_ROOT_PASSWORD是root用户的登陆密码

第三步cmd远程测试连接,首先进入mysql容器

最后登陆mysql
或者是使用图形化界面MySQL去链接。

案例-Tomcat部署

目标:使用Docker部署一个Tomcat,并部署应用来访问。

第一步:拉取tomcat镜像

第二步:创建tomcat容器
第三步部署web应用去测试,首先将程序拷贝到宿主机的~/myvolume下面,然后建立目录myapp,里面编辑一个index.html页面作为测试主页,最后在虚拟机的宿主机上的浏览器地址栏中输入:http://192.168.40.141:9001/myapp

数据的备份和迁移

第一步将容器提交为新镜像,根据容器的更改创建新镜像,即基于原始镜像,将其运行的容器中更改的内容,来生成新的镜像。

如果将my_redis容器提交为一个新的镜像myredis:1.0.1。
因为镜像名字有如下命名规则:
所以提交为新镜像后建议执行如下命令
使用新生成的镜像来创建启动容器测试
第二步镜像的保存,将一个或多个镜像保存到tar存档(默认流到标准输出-STDOUT)
如果创建一个镜像的备份到磁盘文件
如果镜像打包时使用gzip压缩,可以让备份的文件更小(建议)
如果将某个仓库的所有镜像打包
如果对多个镜像打包备份到一个磁盘文件
第三步镜像的加载,从tar归档文件或标准输入(stdin)加载镜像,归档文件即使是使用gzip、bzip2或xz压缩后的,也能自动识别和处理。
如果是先删除已有的镜像,然后通过备份的归档文件加载还原镜像到docker中

总结

Docker我们先从他的镜像、容器、注册中心、仓库四个概念入手,然后从他的安装、启动、镜像、容器这四个熟练操作,最后就是他里面数据的备份和迁移的了解,就可以基本使用Docker,下面展示一张Docker的基础学习示意图。