一. 什么是Docker
Docker是在linux服务器上运行的轻量级容器引擎。相较于传统的虚拟机,docker最大的特点就是容器本身耗费的额外资源极少。
二. 什么场景适合使用Docker
- 快速安装中间件
作为工程师,开发部署的时候经常需要安装一些中间件,如redis、nginx、jenkins等。传统方式下安装这些中间件往往还需要安装一些其他的依赖程序,有时候依赖程序的版本还容易出冲突,总之是个很繁琐的事情。
不过,现在各大中间件厂商,基本都会推出docker版的镜像。使用docker启动这些容器就非常简单粗暴无脑。 - 解决测试环境和线上环境不一致的问题
很多工程师的老司机应该都有这样的体验,一个项目测试环境经过了缜密的测试基本应该没多少bug了,但一上线就各自奇葩问题层不出穷。虽然很多公司都要求测试环境要和正式环境一致,但实际情况很难做到完全一致,这些不一致的地方就会导致上述的事情。
使用docker就可以很好的解决这个问题,工程师使用docker发布工程,发布的是一整套环境,而不仅仅是一套代码。
三. docker的安装。
docker是在linux服务器上运行的容器引擎,虽然windows机器上也可以通过安装linux虚拟器来安装使用,但性能和稳定性就不好讲了。正式环境使用docker建议只考虑linux机器。
这里将以阿里云centos7.3 64位操作系统,来演示如何安装。
- 更新yum安装的docker版本。
yum -y update docker
- yum安装docker。输入命令,耐心等待安装完成。
yum -y install docker
- 启动docker。
service docker start
非常简单,docker就安装完成并启动了。
四. 设置docker加速器。
刚才虽然成功安装并启动了docker,但是你会发现下载镜像的速度奇慢无比。因为docker默认从dockerhub网站去下载镜像,国内连接国外的网站下载,速度你懂的。好在docker也想到了这一点,提供了镜像加速的功能。
-
要使用镜像加速,首先你得有一个加速器地址。这里推荐使用阿里云的docker镜像仓库加速地址。进入阿里云的镜像仓库。在Docker Hub镜像站点获取你的专属加速器地址。
在服务器上输入以下命令,设置你的docker加速器并重启docker。注意把
https://xxxxxxx.aliyuncs.com
替换成你的专属加速器地址。
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xxxxxxx.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
至此,docker加速器设置完成。
五. 登录Docker Hub。
Docker Hub是docker镜像的国际通用仓库,相当于开源代码和github的关系。你可以在Docker Hub上下载到全球各大厂商提供的自己产品的官方docker镜像,还可以下载到其他工程师上传的镜像。你自己也可以上传镜像到Docker Hub进行保存和分享。
要在服务器登录Docker Hub,先得在Docker Hub的网站申请账号。这里就不啰嗦了,看官请自行申请。
-
在服务器输入命令
docker login
开始登录,并根据提示输入用户名密码。
六. 下载镜像。
打一个比方来稍微科普下,镜像和容器的关系就相当于java语言里,类和对象的关系。
下面通过一个简单的java镜像的例子来讲解。
- 首先,我们需要先获取官方的java镜像。你可以在Docker Hub的网站进行搜索。
如上图,选择第一个java,official
表示这是一个官方的镜像。点击进入详细页面。
在详细页面的右上角,可以找到下载该镜像的命令。
- 现在找到了下载镜像的命令,让我们回到linux服务器,输入该命令。
docker pull java
耐心等待镜像下载完成。此处你应该会发现,配置了加速器以后,下载镜像的速度简直飞快。
输入docker images
命令来查看该服务器里所有镜像。此处可以看见刚才下载的java镜像。
七. 启动容器。
现在镜像已经下载完成,该通过镜像来启动容器了。
容器启动主要通过docker run + 可选参数 + 容器编号/容器名 + 启动命令
。可选的参数很多,本文就不一一赘述了,感兴趣的朋友可自行查阅Docker官方文档。这里提几个最常用的来完成本示例的讲解。
-
-d
后台启动容器,默认情况下启动容器是非后台启动,启动以后会自动进入容器内部,而且一旦退出容器,容器也会自动关闭。加上该命令后,使用后台启动的方式启动容器,启动以后不会自动进入容器内部,只会返回容器编号。容器在后台自动运行。 -
-p port:port
将指定容器的端口号映射为机器的端口号,前一个port为主机的端口号,后一个port为容器的端口号。 -
-v path:path
将主机的一个硬盘目录或文件挂载到容器的指定位置。前一个path为主机的目录路径或文件,可以为绝对路径,也可以是一个自定义名称,如果是自定义名称,你可以在/var/lib/docker/volumes
目录下找到;后一个path为容器内的路径,一般是绝对路径。 -
--name
给容器起一个别名
介绍了启动容器的基本命令,我们试着来直接启动一个java容器。
docker run -d -it -p 8080:8080 -v /data/test.jar:/data/test.jar --name java docker.io/java java -jar /data/test.jar
八. 其他常用命令。
- 开启docker服务
service docker start
- 查看所有已启动容器
docker ps -a
- 删除一个容器
docker rm 容器ID/容器别名
- 删除一个镜像
docker rmi 镜像ID
- 关闭一个已启动容器
docker stop 容器ID/容器别名
- 启动一个关闭的容器
docker start 容器ID/容器别名
- 查看一个容器的详情
docker inspect 容器ID/容器别名
- 进入容器内部
docker exec -it 容器ID/容器别名 /bin/bash