操作Docker容器(1)创建容器
操作Docker容器(1)创建容器从现在开始,你会一点一点的慢慢忘掉臃肿的虚拟机,对容器的操作就像直接操作应用一样简单和快速。本节主要讲解Docker容器的create,start,run,wait,和logs子命令。1.新建容器可以使用docker create 命令新建一个容器,例如:[h@h-81r7 ~]$ docker create -it ubuntu:latest2d0ea8ca
操作Docker容器(1)
创建容器
从现在开始,你会一点一点的慢慢忘掉臃肿的虚拟机,对容器的操作就像直接操作应用一样简单和快速。
本节主要讲解Docker容器的create,start,run,wait,和logs子命令。
1.新建容器
可以使用docker create 命令新建一个容器,例如:
[h@h-81r7 ~]$ docker create -it ubuntu:latest
2d0ea8ca7f5d07647bb336d1ad25ddc73816ab15e8c4551d7c9a82df14943074
[h@h-81r7 ~]$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d0ea8ca7f5d ubuntu:latest "bash" 9 seconds ago Created infallible_swanson
使用docker create命令新建的容器处于停止状态,可以使用docker start 命令来启动。
由于容器是整个Docker技术栈的核心,create命令和后续的run命令支持的选项十分复杂,需要在实践中不断体会。
选项主要包括:
1.容器运行模式相关
2.容器环境配置相关
3.与容器资源限制和安全保护相关
2.启动容器
使用docker start 命令来启动一个创建的容器。例如,启动刚创建的ubuntu容器:
[h@h-81r7 ~]$ docker start 2d0ea8ca7f5d
2d0ea8ca7f5d
此时,通过docker ps 命令, 可以查看到一个运行中的容器:
[h@h-81r7 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2d0ea8ca7f5d ubuntu:latest "bash" 11 minutes ago Up About a minute infallible_swanson
3.新建并启动容器
除了创建容器后通过start命令来启动,也可以直接新建并启动容器。
所需要的命令主要为docker run , 等价于先执行docker create命令,在执行docker start命令。
例如,下面命令输出一个“hello world”,之后容器自动终止:
[h@h-81r7 ~]$ docker run ubuntu /bin/echo 'hello world'
hello world
当利用docker run来创建启动容器时,Docker 在后台运行的标准操作包括:
1.检查本地是否存在指定的镜像,不存在就从公有仓库下载;
2.利用镜像创建一个容器,并启动该容器;
3.分配一个文件系统给容器,并在只读的镜像层外挂载一层可读写层;
4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
5.从网桥的地址池配置一个IP地址给容器;
6.执行用户指定的应用程序;
7.执行完毕后容器被自动终止。
下面的命令启动一个bash终端,允许用户交互:
[h@h-81r7 ~]$ docker run -it ubuntu:18.04 /bin/bash
root@12ae72b3c3a6:/#
其中, -t 选项让docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。更多的命令选项可以通过man docker-run命令来查看。
在交互模式下,用户可以通过所创建的终端来输入命令,例如:
[h@h-81r7 ~]$ docker run -it ubuntu:18.04 /bin/bash
root@12ae72b3c3a6:/# ll
total 72
drwxr-xr-x 1 root root 4096 Sep 24 13:11 ./
drwxr-xr-x 1 root root 4096 Sep 24 13:11 ../
-rwxr-xr-x 1 root root 0 Sep 24 13:11 .dockerenv*
drwxr-xr-x 2 root root 4096 Aug 27 07:18 bin/
drwxr-xr-x 2 root root 4096 Apr 24 2018 boot/
drwxr-xr-x 5 root root 360 Sep 24 13:11 dev/
drwxr-xr-x 1 root root 4096 Sep 24 13:11 etc/
drwxr-xr-x 2 root root 4096 Apr 24 2018 home/
drwxr-xr-x 8 root root 4096 May 23 2017 lib/
drwxr-xr-x 2 root root 4096 Aug 27 07:18 lib64/
drwxr-xr-x 2 root root 4096 Aug 27 07:16 media/
drwxr-xr-x 2 root root 4096 Aug 27 07:16 mnt/
drwxr-xr-x 2 root root 4096 Aug 27 07:16 opt/
dr-xr-xr-x 279 root root 0 Sep 24 13:11 proc/
drwx------ 2 root root 4096 Aug 27 07:18 root/
drwxr-xr-x 5 root root 4096 Aug 27 07:18 run/
drwxr-xr-x 2 root root 4096 Aug 27 07:18 sbin/
drwxr-xr-x 2 root root 4096 Aug 27 07:16 srv/
dr-xr-xr-x 13 root root 0 Sep 24 13:11 sys/
drwxrwxrwt 2 root root 4096 Aug 27 07:18 tmp/
drwxr-xr-x 10 root root 4096 Aug 27 07:16 usr/
drwxr-xr-x 11 root root 4096 Aug 27 07:18 var/
root@12ae72b3c3a6:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@12ae72b3c3a6:/# pwd
/
root@12ae72b3c3a6:/# whoami
root
root@12ae72b3c3a6:/# ps
PID TTY TIME CMD
1 pts/0 00:00:00 bash
15 pts/0 00:00:00 ps
在容器内用ps命令查看进程,可以看到,只运行了bash应用,并没有其他无关的进程。用户可以按Crtl+D或输入exit命令来退出容器:
root@12ae72b3c3a6:/# exit
exit
对于所创建的bash容器,当用户使用exit命令退出bash进程之后,容器也会自动退出。这是因为对于容器来说,当其中的应用退出后,容器的使命完成,也就没有继续运行的必要了。
可以使用docker wait来等待容器退出,并打印出返回结果。
docker wait教程
docker wait 命令可以用于阻塞一个或多个 Docker容器 直到容器停止,然后打印退出代码。
docker wait命令后面的 CONTAINER 可以是容器Id,或者是容器名。
docker wait语法
haicoder(www.haicoder.net)# docker wait [OPTIONS] CONTAINER [CONTAINER...]
案例
等待容器退出
使用 docker run -it -d 命令,启动一个 dokcer容器。
haicoder# docker run --name haicoder -it -d centos
15327bf7fac71599bb0fd885099f097ca91ff0a781c26fd98f5599554c2d8888
使用 docker wait containerName 命令,等待正在运行的 docker容器,直到其退出。
haicoder# docker wait haicoder
运行后,终端被阻塞,终端显示信息如下图所示:
我们使用 docker stop 命令停止正在运行的 docker 容器,
haicoder# docker stop haicoder
此时终端显示如下:
在 docker stop 命令执行的同时,刚才被 dokcer wait 命令阻塞的终端,输出了 docker容器的退出码,显示如下图所示:
使用 docker kill 和 docker rm 命令,删除所有容器。
haicoder# docker kill `docker ps -qa` ; docker rm `docker ps -aq`
等待未运行容器
使用 docker create -it 命令,创建一个 docker容器,并不运行该容器。
haicoder# docker create -it --name haicoder centos
3a48dfd88bfeeba4d690d53488eaba8aaf9475e2b35ed59d7a24a8dce145afa3
使用 docker ps 命令,查看当前正在运行的 docker容器,终端显示如下:
即,此时没有任何正在运行的 docker 容器。
使用 docker wait命令,等待并未运行的 docker容器,此时直接输出 0,终端并未阻塞。
haicoder# docker wait haicoder
#输出
0
使用 docker kill 和 docker rm 命令,删除所有容器。
haicoder# docker kill `docker ps -qa` ; docker rm `docker ps -aq`
docker wait命令总结
docker wait 命令可以用于阻塞一个或多个 Docker容器直到容器停止,然后打印退出代码。
docker wait命令等待一个正在运行的容器时,docker wait命令会一直阻塞,该容器退出时, docker wait命令会输出对应的退出码。
docker wait 命令等待一个未运行的容器时,docker wait 命令不会阻塞,而是直接输出 0。
某些时候,执行docker run 时候因为命令无法正常执行容器会出现错误直接退出,此时可以查看退出的错误代码。
错误代码
默认情况下,常见错误代码包括:
125: Docker daemon执行出错,例如指定了不支持的docker命令参数;
126: 所指命令无法执行,例如权限出错;
127: 容器内命令无法找到。
命令执行后出错,会默认返回命令的退出错误代码。
4.守护状态运行
更多的时候,需要让docker 容器在后台以守护态形式运行。此时,通过添加-d参数来实现。
例如,下面命令会在后台运行容器:
[h@h-81r7 ~]$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
80ee74bab5ba6b488b80c85cc2e07dd35f207a99c41f9b3f08fab0ddb8a5ed2d
容器启动后会返回一个唯一的ID,也可以通过docker ps 或docker container ls命令来查看容器信息:
[h@h-81r7 ~]$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
80ee74bab5ba ubuntu "/bin/sh -c 'while t…" 2 minutes ago Up 2 minutes brave_robinson
5.查看容器输出
要获取容器的输出信息,可以通过docker [container] logs 命令。
该命令支持的选项包括:
-details:打印详细信息;
-f, -follow:持续保持输出;
-since string: 输出从某个时间开始的日志;
-tail string:输出最近的若干日志;
-t, -timestamps:显示时间戳信息;
-until string:输出某个时间之前的日志。
例如,查看某容器的输出可以使用如下命令:
[h@h-81r7 ~]$ docker logs 80ee74bab5ba
hello world
...
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)