容器是Docker 的三大核心概念之一,使应用程序运行的基础环境,下面我们就来具体讲解一下Docker容器。
所谓容器就是镜像的一个运行实例,并且带有运行时需要的可写的文件层,其中的应用程序也处于运行状态。很多人会把容器和虚拟机相混淆,虚拟机是模拟运行一整套操作系统,虚拟机模拟的东西不管应用是否使用都会存在。容器是里运行的N个应用和应用所必需的环境,也就是说应用不需要的东西,容器是不会加入的。
docker [container] create
例如我们要创建ubuntu 16.04的容器,docker 命令如下:
docker create ubuntu:16.04
使用 create 命令创建的容器是出于停止状态的,可以使用 start 命令来启动,start 命令将在下一小节讲解。 create 命令参数很多,包含如下3大类:
因为命令参数很多,因此这里只讲解常用的几个:
docker [container] start
例如启动刚才我们创建的ubuntu容器,容器ID为 b58a44432c7b
docker start b58a44432c7b
输出结果如图:
docker [container] run
例如我们运行一个新ubuntu16.04 容器,并将名称命名为 new_ubuntu :
docker run --name new_ubuntu ubuntu /bin/echo '你好'
执行结果如下图:
执行 run 命令会在后台执行如下操作:
注1:可以使用
docker container wait container
命令来等待容器退出和查看退出的返回结果注2:某些情况下,执行 run 命令是无法正常运行,导致容器直接退出,这个时候我们可以查看推出的错误代码,下面列出常见的几种错误代码:
代码 | 说明 |
---|---|
125 | docker daemon 执行错误 |
126 | 所指定的命令无法执行 |
127 | 无法找到容器内的命令 |
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1;done;"
运行命令后结果如下
docker [container] logs
这个命令常用的参数如下:
例如查看刚才创建的ubuntu16.04的容器的日志:
docker logs b58a44432c7b
docker [container] restart
例如重启刚才创建的ubuntu16.04 容器,可以这么做:
docker restart b58a44432c7b
执行结果如下:
docker [container] pause
例如暂停刚才创建的ubuntu16.04 这个容器,可以这么做:
docker pause b58a44432c7b
docker [container] stop [-t=10]
我们将刚才创建的ubuntu16.04 容器在20秒后彻底终止掉,可以这么做:
docker stop -t=20 b58a44432c7b
执行结果如下:
进入容器docker 官方推荐使用 attach 和 exec 命令
docker [container] attach
常用参数有如下几个:
我们进入ubuntu16.04容器:
docker attach --no-stdin b58a44432c7b
运行结果如下:
docker [container] exce
该命令参数有如下几个:
我们进入刚才创建的ubuntu16.04:
docker exec -it b58a44432c7b /bin/bash
运行结果如下:
删除命令比较简单,可以使用 rm 命令,命令语法如下:
docker [container] rm
rm 命令主要参数如下:
我们这里删除正在运行的ubuntu16.04 容器:
docker rm -f b58a44432c7b
执行结果如下:
注:强行删除一个正在运行中的容器,docker 会先发送SIGKILL给容器,终止容器运行,然后强行删除。
当我们将一个容器从一个地方迁移到另一个地方往往需要导入导出。
docker [container] -o export
-o 表示要到将容器导出的位置
例如将ubuntu16.04 容器导出到 /etc/test/ub.tar
docker export -o /etc/test/test.tar 0daa01b513c6
执行结果如图:
docker [container] import -c
-c 代表容器tar文件的位置
下面我们导入刚才导出的容器:
docker import /etc/test/test.tar
运行结果如下:
docker [container] ps [-a]
-a 代表查看所有容器,如果不加该参数,则代表之查看运行中的容器。
我们来查看一下所有的容器的命令:
docker ps -a
运行结果如下:
docker container inspect
现在查看ubuntu16.04 容器的详情:
docker container inspect 0daa01b513c6
执行结果如下:
docker [container] top
例如我们查看容器 ubuntu16.04 中的进程信息:
docker top 08a3ebe39b2e
docker [container] stats
该命令常用参数如下:
统计ubuntu16.04 的资源统计信息:
docker stats 08a3ebe39b2e
执行结果如下:
3764046492)]
docker [container] stats
该命令常用参数如下:
统计ubuntu16.04 的资源统计信息:
docker stats 08a3ebe39b2e
执行结果如下: [外链图片转存中…(img-37m1XXMn-1563764046493)]