A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 不二晨 金牌黑马   /  2019-4-8 13:12  /  2104 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这一part主要来记录一下我们对docker容器的操作。容器是 Docker 又一核心概念。
简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。

新建并启动容器
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

我们的命令主要为 docker run。例如,下面的命令输出一个 “Hello World”,之后终止容器。这跟在本地直接执行 /bin/echo ‘hello world’ 几乎感觉不出任何区别。

$ docker run ubuntu:16.04 /bin/echo 'Hello world'
Hello world
1
2
下面的命令则启动一个 bash 终端,允许用户进行交互:

$ docker run -it ubuntu:16.04 /bin/bash
root@af8bae53bdd3:/#
1
2
其中,-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上, -i 则让容器的标准输入保持打开。当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:

1.检查本地是否存在指定的镜像,不存在就从公有仓库下载
2.利用镜像创建并启动一个容器
3.分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
5.从地址池配置一个 ip 地址给容器
6.执行用户指定的应用程序
7.执行完毕后容器被终止

启动已终止容器

可以利用 docker container start [container ID or NAMES] 命令,直接将一个已经终止的容器启动运行。容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。

在守护态下运行
更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现。

如果不使用 -d 参数运行容器:

$ docker run ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
hello world
hello world
hello world
hello world
1
2
3
4
5
容器会把输出的结果 (STDOUT) 打印到宿主机上面,如果使用了 -d 参数运行容器:

$ docker run -d ubuntu:16.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
77b2dc01fe0f3f1265df143181e7b9af5e05279a884f4776ee75350ea9d8017a
1
2
此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs 查看)。使用 -d 参数启动后会返回一个唯一的 id,也可以通过 docker container ls 命令来查看容器信息。

$ docker container ls
CONTAINER ID  IMAGE         COMMAND               CREATED        STATUS       PORTS NAMES
77b2dc01fe0f  ubuntu:16.04  /bin/sh -c 'while tr  2 minutes ago  Up 1 minute        agitated_wright
1
2
3
要获取容器的输出信息,可以通过 docker container logs 命令。

$ docker container logs [container ID or NAMES]
hello world
hello world
hello world
. . .
1
2
3
4
5
终止容器
可以使用 docker container stop [container ID or NAMES] 来终止一个运行中的容器。

终止状态的容器可以用 docker container ls -a 命令看到。例如:

docker container ls -a
CONTAINER ID        IMAGE                    COMMAND                CREATED             STATUS                          PORTS               NAMES
ba267838cc1b        ubuntu:14.04             "/bin/bash"            30 minutes ago      Exited (0) About a minute ago                       trusting_newton
98e5efa7d997        training/webapp:latest   "python app.py"        About an hour ago   Exited (0) 34 minutes ago                           backstabbing_pike
1
2
3
4
docker container restart [container ID or NAMES] ,这个命令会将一个运行态的容器终止,然后再重新启动它。

进入容器
在使用 -d 参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,包括使用 docker attach 命令或 docker exec 命令。但是我们一般推荐使用docker exec命令,因为docker attach 从 stdin 中 exit之后,会导致容器停止。
所以我们一般使用docker exec命令,如果从这个 stdin 中 exit,不会导致容器的停止。

docker exec -it 69d1fd bash
1
删除容器

$ docker container rm trusting_newton
trusting_newton
1
2
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。
---------------------
【转载,仅作分享,侵删】
作者:zyhmz
原文:https://blog.csdn.net/zyhmz/article/details/80707689
版权声明:本文为博主原创文章,转载请附上博文链接!

1 个回复

倒序浏览
奈斯,感谢分享!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马