AUTHOR: Locez
VERSION: 1
1 Docker 是什么?
Docker 是一个开源的容器引擎,而一个容器其实是一个虚拟化的独立的环境,因此开发者可以将应用打包到这样的一个 docker 容器中,然后发布到任何可以运行 docker 容器的机器中,实现一次打包多处部署,解决了因为环境问题而导致的部署难题。
1.1 容器是什么?
与 容器 对应的一个概念就是 镜像,镜像可以看做我们平时装系统的镜像,里面就是一个运行环境。当然我比较喜欢将镜像比作一个我们面向对象编程中的 类,而一个容器就是一个类的 实例,因此可以根据一个镜像,创建出很多个容器,每一个容器都是具体的,我们可以在容器上面做出更改,然后再把这个容器打包成一个新的镜像,从而以后可以根据改动后的镜像创建出新的容器。而容器本身可以简单理解为是一个虚拟独立的运行环境,我们要做的是中这个环境中打包我们的应用,以便于再次部署。
2 安装 Docker
Gentoo
1 | # emerge --ask docker |
CentOS
1 | # yum install docker-ce |
Ubuntu
1 | # apt-get install docker-ce |
Arch
1 | # pacman -S docker |
2.1 启动 docker 守护进程
1 | # systemctl start docker |
3 docker 命令介绍
1 | # docker --help |
在子命令中还有更多丰富的选项,可以使用 docker COMMAND --help
查看。例如:
1 |
|
4 docker 使用实战
接下来,我将利用 docker 部署一个 Nginx 服务器,作为讲解的例子。
要创建一个容器,那么我们必须先要有一个用于创建容器的镜像。
在 docker hub 中查找 nginx 相关镜像。
1 | # docker search nginx |
拉取官方镜像,其中上面的非官方镜像是用户们根据自己的需要制作的镜像,方便大家的使用。
1 | # docker pull nginx |
在这里顺便说一下,docker 镜像是分层存储的,所以上面的 nginx 镜像有 3 层,另外每根据新的容器制作一个新的镜像以后会给这个镜像加上一层。
接下来直接利用这个镜像启动一个新的容器
1 | # docker run --name my-nginx -d -p 8080:80 nginx |
此时中浏览器中输入:http://localhost:8080/ 即可访问 nginx。
参数解释:
--name
为容器取一个名字-p
参数语法为-p host port:container port
;-p 8080:80
将主机上的8080端口绑定到容器上的80端口,因此在主机中访问8080端口时其实就是访问 nginx 容器的80端口-d
后台运行容器
然后我们来看一个更复杂的例子
1 | # docker run --name my-nginx \ |
这个例子多了一个参数 -v
,这个参数的作用是把本地的文件或者文件夹挂载到容器中,其中最后面的 ro
或者 rw
控制这个挂载是否可写。
-v
参数语法为-v host dir:container dir[:ro|rw]
上面的命令将本地文件中的 nginx.conf
配置文件挂载到容器,并且将要展示的静态页面也挂载到容器。
注意:在容器执行一条命令以后,当这个命令结束运行,容器也会结束运行。
接下来让我们看看 docker 别的命令。
查看所有运行中的容器
1 | # docker ps |
查看容器运行日志
1 | # docker logs my-nginx |
重启容器
1 | # docker restart my-nginx |
停止运行一个容器
1 | # docker stop my-nginx |
启动一个已经存在的容器
1 | # docker start my-nginx |
直接杀死一个运行中的容器
1 | # docker kill my-nginx |
为容器重命名
1 | # docker rename my-nginx new-nginx |
删除容器
1 | # docker rm new-nginx |
查看本机所有镜像
1 | # docker imags |
使用已经存在的容器创建一个镜像
1 | # docker commit -m "nothing changed" my-nginx my-nginx-image |
使用我们自己创建的镜像创建容器
1 | # docker run --name test -d -p 8081:80 my-nginx-image |
如果我们使用的容器的启动命令是一个 shell ,那么我们可以使用 attach
命令来介入这个容器,就跟我们使用 ssh
连接一台服务器差不多。
1 | # docker attach some-container |
在创建一个容器时直接启动一个可交互式的 shell, 并且退出后自动删除容器
1 | # docker run -it --rm centos |
总结
本文介绍了 docker 的简单用法,同时也给出了一个实际的例子用来展示 docker 命令的各种操作。作为一个快速入门的文章,本文写的相对有点简单,很多概念上的东西还需要求查看别的资料理解,但是看完本文应该就具备使用 docker 的基本能力了。此外,后续的文章应该会写一点 Dockerfile
与 docker-compose
相关的内容。