前面讲过,容器是镜像的一个运行示例,带有额外的可写文件层。镜像是只有可读层的。
创建容器
使用create命令创建容器。
1 | docker create -it ubuntu:ttag |
然后可以通过如下命令查看容器的创建情况:
1 | docker ps -a |
显示如下:
1 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
创建的容器是处于停止状态的。
新建并启动容器
1 | docker run ubuntu:ttag /bin/echo 'Hello Docker' |
显示如下:
1 | Hello Docker |
现在详细介绍以下docker run后台进行的动作:
- 检查本地是否存在对应的镜像,如果不存在,则从仓库下载;
- 利用镜像创建并启动一个容器;
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
- 从地址池中配置一个IP地址给容器;
- 执行用户制定的程序;
- 执行完毕后终止容器;
启动一个可交互的容器:解释一下上面1
docker run -it ubuntu:latest /bin/bash
it参数的含义:
t参数:分配一个伪终端并绑定到容器的标准输入上;i参数:让容器的标准输入打开;
对于创建的容器,退出后,容器即终止。守护态运行容器
添加-d参数即可:这样容器就运行起来了,通过1
docker run -d ubuntu:latest /bin/bash -c 'while true;do echo hello wolrd;sleep 2;done'
docker ps -a查看:但控制台是看不到输出的,要看到容器的输出信息,执行以下命令:1
2CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63eb0ed6ab1d ubuntu:latest "/bin/bash -c 'while…" 17 seconds ago Up 16 seconds nostalgic_edison1
docker logs 63e
63e是容器ID。终止容器
通过命令:此外还有1
docker stop 63e
docker start和docker restart命令,后者操作的是运行中的容器,即将容器终止然后重新start。进入容器
1
docke exec -it 63e /bin/bash
删除容器
该命令带有几个参数:1
docker rm 63e
-f:删除一个运行终端容器时,需要该参数,否则会出错。-l:删除容器的连接,但保留容器。(这里尚有疑问,未完待续…)-v:删除容器挂载的数据卷。容器的导入和导出
跟镜像一样,可以导入导出。
使用import和export。这样就把容器导出到本地文件1
2容器导出
docker export 63e>test_for_run.tartest_for_run.tar。通过上面这条命令,就可以在本地镜像库看到多了一个镜像。即容器导入,导入会成为镜像。1
2容器导入
cat test_for_run.tar |docker import - test/ubuntu:v1.0
和导入镜像相比,导入容器生成的镜像体积要小,因为丢弃了所有的历史记录和元数据信息(tag等等),镜像导入产生的镜像则要大一些。