有了镜像后,就可以以这个镜像为基础创建一个容器来运行。以上一篇文章Docker获取镜像中的benben-activities:test为例,docker run命令提供了Docker容器的创建到启动的功能,可以使用该命令来创建新容器。格式docker run [OPTIONS] IMAGE [COMMAND] [ARG...],其中IMAGE可以用镜像名称,也可以使用镜像ID。例如:docker run benben-activities:test或者docker run 4cb8110f4da3
执行这条命令后,首先Docker会检查本地是否存在此镜像,如果本地还没有该镜像的话,那么Docker会连接你下载的仓库,查看其中是否有该镜像。Docker一旦找到该镜像,就会下载该镜像并将其保存到本地宿主机中。随后,Docker在文件系统内部用这个镜像创建了一个新容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。
当你输入exit或者Ctrl+C,就可以返回到宿主机的命令行提示符了。那么此时这个容器的状态是什么样呢?
我们可以通过命令docker ps查看当前运行的容器,从打印的内容来看,找不到我们刚才运行的容器。所以容器已经停止运行了,但容器仍然是存在的,我们可以用docker ps -a命令查看当前系统中容器的列表。

CONTAINER ID      IMAGE             COMMAND                  CREATED              STATUS         PORTS             NAMES
5c6593c190bb      4cb8110f4da3      "/bin/sh -c ./projectB…"   23 minutes ago       Exited (2) 22

docker ps -l会列出最后一次运行的容器,包括正在运行和已经停止的。
上面红色内容中的CONTAINER ID,5c6593c190bb(短UUID)指代唯一容器。还有另外两种方式:长UUID(5c6593c190bby3rih8cy3iifh8y3iihyd8hsdjffeuf929323rds23)和名称(benben_test)
容器的名称,可以自己设置。它可以帮助我们分辨容器,在默认情况下,Docker会自动生成一个随机的名称。如果想指定一个名称,那么在启动容器时,通过参数--name就可以实现。例如docker run --name benben_test 4cb8110f4da3
容器命名规则,必须是下面内容:小写字母a~z,大写字母A~Z,数字0~9,下划线,圆点,横线。而且容器的名称必须是唯一的。如果试图创建两个名称相同的容器,则命令将会失败。如果要使用的容器名称已经存在,可以先用docker rm命令删除已有的同名容器后,再来创建新的容器。再删除之前必须先停止容器,否则会报如下错误。

Error response from daemon: You cannot remove a running container 5c6593c190bb72723789832c4d088363546be410e64254439f1e920e96dede6d. Stop the container before attempting removal or force remove

使用命令docker stop [容器名称/容器ID]来停止正在运行的容器。例如停止上面的容器docker stop 5c6593c190bb
上面方式创建的容器是交互式运行的,如果我们要创建长期运行的容器,就需要创建守护式容器。继续以上面的镜像为例,如果要创建守护式容器,可以在docker run命令上添加参数-d,例如:docker run --name benben_test -d 4cb8110f4da3。这时从控制台可以看到,docker run命令并没有像之前容器一样,将主机的控制台附着到新的shell会话上,而是仅仅返回一个容器ID(9c3277c6a272753326437971a4ef8889dd477ac91901821529b7ae1adfb22cb9)而已,Docker会将容器放到后台运行。这时你可以通过命令docker ps查看正在运行的容器,其中第一条应该就是你的容器。

CONTAINER ID     IMAGE               COMMAND                  CREATED             STATUS         PORTS           NAMES
9c3277c6a272     4cb8110f4da3        "/bin/sh -c ./projectB…"   58 seconds ago      Up 56 seconds
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐