容器是Docker 的三大核心概念之一,使应用程序运行的基础环境,下面我们就来具体讲解一下Docker容器。
一、什么是容器
所谓容器就是镜像的一个运行实例,并且带有运行时需要的可写的文件层,其中的应用程序也处于运行状态。很多人会把容器和虚拟机相混淆,虚拟机是模拟运行一整套操作系统,虚拟机模拟的东西不管应用是否使用都会存在。容器是里运行的N个应用和应用所必需的环境,也就是说应用不需要的东西,容器是不会加入的。
二、创建容器
- 新建容器
新建容器一般使用 create 命令,具体语法如下:
docker [container] create
例如我们要创建ubuntu 16.04的容器,docker 命令如下:
docker create ubuntu:16.04
使用 create 命令创建的容器是出于停止状态的,可以使用 start 命令来启动,start 命令将在下一小节讲解。 create 命令参数很多,包含如下3大类:
- 与容器运行模式相关;
- 与容器环境配置相关;
- 与容器资源限制和安全保护相关。
因为命令参数很多,因此这里只讲解常用的几个:
- -i:保持标准输入打开,默认值为 false;
- -t:是否分配一个伪终端,默认值 false;
- -d:是否在后台运行容器,默认值 false;
- –expose=[]:指定容器暴露出来的端口或端口范围;
- –net="":指定容器网络模式;
- –add-host=[]:在容器内添加一个主机名到IP地址的映射关系;
- –device=[]:映射物理机上的设备到容器内;
- -e:指定容器内的变量环境;
- –ip="": 指定容器的ip v4 地址;
- –ip6="":指定容器的ip v6 地址;
- –link:连接到其他容器;
- –name:容器的别名;
2.启动容器
启动容器使用 start 命令,语法如下:
docker [container] start
例如启动刚才我们创建的ubuntu容器,容器ID为 b58a44432c7b
docker start b58a44432c7b
输出结果如图:
3. 新建同时启动容器
新建容器需要用到 run 命令,语法格式如下:
docker [container] run
例如我们运行一个新ubuntu16.04 容器,并将名称命名为 new_ubuntu :
docker run --name new_ubuntu ubuntu /bin/echo '你好'
执行结果如下图:
执行 run 命令会在后台执行如下操作:
- 检查本地是否存在指定镜像,不存在就从镜像仓库下载;
- 利用镜像创建一个容器,并启动容器;
- 分配一个文件系统给容器,并在只读镜像层外面挂载一层可读写层;
- 从宿主机配置的网桥接口中桥接一个虚拟机接口到容器中;
- 从网桥地址池配置一个IP地址给容器;
- 执行用户指定的应用程序;
- 执行完毕后容器终止。
注1:可以使用 docker container wait container
命令来等待容器退出和查看退出的返回结果
注2:某些情况下,执行 run 命令是无法正常运行,导致容器直接退出,这个时候我们可以查看推出的错误代码,下面列出常见的几种错误代码:
4. 进入守护状态
在实际开发中需要容器一直运行着,这时我们可以在 run 命令后面加上 -d 参数来实现容器的后台运行,也就是进入守护状态。例如我们创建并运行ubuntu16.04容器,并将容器一直运行,可以这么做:
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done;"
运行命令后结果如下
5. 查看容器输出
有时我们需要查看容器内部输出的信息,这时我们就可以使用 logs 命令查看,语法如下:
docker [container] logs
这个命令常用的参数如下:
- -details:打印详细信息;
- -f, -follow:持续输出;
- -since:输出从指定时间点开始的日志;
- -tail:输出最近的日志;
- -t, -timestamps:显示信息时间戳;
- -until:输出指定事件之前的日志。
例如查看刚才创建的ubuntu16.04的容器的日志:
6. 重启容器
当一个容器处于运行状态,如果要重启容器需要用到 restart 命令 ,语法格式如下:
docker [container] restart
例如重启刚才创建的ubuntu16.04 容器,可以这么做:
docker restart b58a44432c7b
执行结果如下: