
Docker容器
首先我们可以直接通过 help 或者使用 man 手册的方式查看相关命令的详细说明
$ docker --help
在 Docker1.12CLI 中大约有四十个左右的顶级命令,这些命令没有经过任何组织,十分混乱,学习他们对于一个新手来说很不容易。值得庆幸的是在 Docker1.13 中将命令进行了 分组,于是有了如下的 ManagementCommands
Management Commands:
builder Manage builds
config Manage Docker configs
container Manage containers
context Manage contexts
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
docker run
docker run 对应于 ManagementCommands 的命令为
docker container run [OPTIONS] IMAGE [COMMAND]
docker run 命令会在指定的镜像 IMAGE 上创建一个可写的容器(因为镜像是只读的),然后运行指定的命令 [COMMAND]。
一些常用的配置项为:
-i或--interactive, 交互模式-t或--tty, 分配一个pseudo-TTY,即伪终端--rm在容器退出后自动移除-p将容器的端口映射到主机-v或--volume, 指定数据卷
我们指定 busybox 镜像,然后运行命令 echo"hello docker" 命令,如下所示:
[root@VM_0_17_centos ~]# docker container run busybox echo "hello docker"
hello docker
[root@VM_0_17_centos ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
在执行命令之后,容器就会退出,如果我们需要一个保持运行的容器,最简单的方法就是给这个容器一个可以保持运行的命令或者应用,比如 bash,例如我们在 ubunutu 容器中运行 /bin/bash 命令:
对于交互式的进程而言(例如这里的 bash),必须将 -i 和 -t 参数一起使用,才能为容器进程分配一个伪终端,通常我们会直接使用 -it。
[root@VM_0_17_centos ~]# docker container run -i -t ubuntu /bin/bash
root@0c32418e9673:/#
如上所示,我们已经进入到分配的终端中了,这时如果我们需要退出 bash,可以使用以下两种方式,它们的效果完全不同:
直接使用
exit命令,这时候bash程序终止,容器进入到停止状态使用组合键退出,容器仍然保持运行的状态,可以再次连接到这个
bash中,组合键是ctrl+p和ctrl+q。即先同时按下ctrl和p键,再同时按ctrl和q键。就可以退出
这里我们使用第二种方式,然后使用 docker container ls 命令,可以看到该容器仍然处于运行中。
root@0c32418e9673:/# [root@VM_0_17_centos ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c32418e9673 ubuntu "/bin/bash" 5 minutes ago Up 5 minutes laughing_brahmagupta
docker container create
严格意义上来讲, docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。而用于创建一个新容器的命令为
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]
该命令会在指定的镜像 IMAGE 上创建一个可写容器层,并 准备运行指定的命令。需要着重强调的是,这里是准备运行,并不是立即运行。即该命令只创建容器,并不会运行容器。
一些常见的配置项如下所示:
--name指定一个容器名称,未指定时,会随机产生一个名字。--hostname设置容器的主机名--mac-address设置MAC地址--ulimit设置 Ulimit 选项。
除此之外,关于创建容器,还可以设置有关存储和网络的详细内容,我们会在下篇文章中介绍。
如下示例,我们指定容器的名字为 hellodocker,主机名为 hellodocker,设置相应的 MAC 地址,并通过 ulimit 设置最大进程数( 1024:2048 分别代表软硬资源限制),使用 ubuntu 的镜像,并运行 bash:
[root@VM_0_17_centos ~]# docker container create --name hellodocker --hostname hellodocker --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash
ca243c07dcd877537a69433a261ddefd34f4a5d276e527766214cba829559ba9
此时,容器创建成功后,会打印该容器的 ID,这里需要简单说明一下,在 docker 中,容器的标识有三种比较常见的标识方式:
UUID长标识符,例如 ca243c07dcd877537a69433a261ddefd34f4a5d276e527766214cba829559ba9UUID短标识符,从长标识符开始,只要不与其它标识符冲突,可以从头开始,任意选用位数,例如针对上面的长标识符,可以使用ca,ca24等等Name最后一种方式即是使用容器的名字
在容器创建成功后,我们可以查看其运行状态,使用如下命令:
# 此时该容器并未运行,需要使用 -a 参数
$ docker container ls -a
新创建的容器的状态 ( STATUS) 为 Created,并且其容器名被设置为对应的值。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca243c07dcd8 ubuntu "/bin/bash" 4 minutes ago Created
查看容器详细信息
查看容器的详细信息可以使用如下命令:
docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
例如我们查看刚刚创建的容器的详细信息就可以使用以下命令:
$ docker container inspect helodocker
例如,我们查看刚刚创建的名为 hellodocker 的容器的 MAC 地址,就可以使用如下命令:
[root@VM_0_17_centos ~]# docker container inspect hellodocker | grep "00:01"
"MacAddress": "00:01:02:03:04:05",
容器的启动和暂停
容器的启动命令为:
docker container start [OPTIONS] CONTAINER [CONTAINER..
对于上面我们创建的容器而言,此时处于 Created 状态,需要使用如下命令启动它:
[root@VM_0_17_centos ~]# docker container start hellodocker
hellodocker
此时,运行一个容器我们分成了两个步骤,即创建和启动,使用的命令如下:
# 创建
$ docker container create --name hellodocker --hostname hellodocker --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash
# 启动
$ docker container start hellodocker
上述的两个命令使用 docker container run 只需要一步即可,即 run 命令同时完成了 create 及 start 操作:
$ docker container run --name hellodocker --hostname hellodocker --mac-address 00:01:02:03:04:05 --ulimit nproc=1024:2048 -it ubuntu /bin/bash
除此之外,上面的
run命令还完成一些其它的操作,例如没有镜像时会pull镜像,使用-it参数时完成了attach操作(后面会学习该操作),使用--rm参数在容器退出后还会完成container rm操作。
run命令是一个综合性的命令,如果能够熟练的使用它可以简化很多步骤,但是其使用方式较为复杂
启动之后,暂停容器可以使用如下命令:
# 暂停一个或多个容器
docker container stop [OPTIONS] CONTAINER [CONTAINER...]
# 暂停一个或多个容器中的所有进程
docker container pause CONTAINER [CONTAINER...]
上述两个命令的区别在于一个是暂停容器中的进程,而另外一个是暂停容器,例如,我们使用 stop 停止刚刚启动的容器就可以使用如下命令:
[root@VM_0_17_centos ~]# docker container stop hellodocker
hellodocker
[root@VM_0_17_centos ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ca243c07dcd8 ubuntu "/bin/bash" 35 minutes ago Exited (0) 11 seconds ago hellodocker
如上图所示,容器被暂停后,此时处于 Exited 状态。
连接到容器
上述操作我们启动的容器运行于后台,所以,我们需要使用 attach 操作将本地标准输入输出流连接到一个运行中的容器,命令格式为:
docker container attach [OPTIONS] CONTAINER
如下示例,我们启动容器,并使用连接命令:
[root@VM_0_17_centos ~]# docker container start hellodocker
hellodocker
[root@VM_0_17_centos ~]# docker container attach hellodocker
root@hellodocker:/# ifconfig
其他命令
获取日志
获取容器的输出信息可以使用如下命令:
docker container logs [OPTIONS] CONTAINER
常用的配置选项有:
-t或--timestamps显示时间戳-f实时输出,类似于tail-f
如下所示,我们查看刚刚创建的容器的日志,使用如下命令:
显示进程
除了获取日志之外,还可以显示运行中的容器的进程信息,例如查看刚刚创建的容器的进程信息:
[root@VM_0_17_centos ~]# docker container top hellodocker
UID PID PPID C STIME TTY TIME CMD
root 27655 27639 1 00:27 ? 00:00:00
查看修改
查看相对于镜像的文件系统来说,容器中做了哪些改变,例如我们在 hellodocker 容器中创建一个文件,就可以使用 diff 命令查看到相应的修改:
[root@VM_0_17_centos ~]# docker attach hellodocker
root@hellodocker:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@hellodocker:/# touch test1
[root@VM_0_17_centos ~]# docker container diff hellodocker
C /root
A /root/.bash_history
A /test1
重启
重启容器可以使用如下命令:
docker container restart hellodocker
执行命令
除了使用 docker container run 来创建容器并在容器里执行命令之外,我们还可以在一个已经处于运行中的容器中执行命令,使用如下格式:
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]
例如,我们在刚刚创建的容器中执行 echo"test_exec" 命令,就可以使用如下命令:
[root@VM_0_17_centos ~]# docker container exec hellodocker echo "test_exec"
test_exec
删除容器
删除容器的命令:
docker container rm [OPTIONS] CONTAINER [CONTAINER...]
需要注意的是,在删除容器后,在容器中进行的操作并不会持久化到镜像中

