docker容器重新启动
在拉取到一个镜像之后,也就为容器准备了运行环境。下面我们将介绍如何使用镜像启动一个容器。启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
在拉取到一个镜像之后,也就为容器准备了运行环境。下面我们将介绍如何使用镜像启动一个容器。
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped
)的容器重新启动。
第一种方式:新建并启动。
docker run
命令会基于指定的镜像创建一个容器并且启动它。docker run
的基本语法如下:
docker run [OPTIONS] 镜像名 [COMMAND] [ARG]
其中,
docker run
:Docker
创建并启动容器的命令关键词;OPTIIONS
: 命令选项,最常用的包括-d
后台运行容器并返回容器ID
,-i
以交互模式运行容器,-t
为容器分配一个伪输入终端,--name
指定启动容器的名称。更多选项请参考Docker
帮助文档;镜像名
: 以<仓库名>:<标签>
的方式来指定;COMMAND
: 设置启动命令,该命令在容器启动后执行;ARG
: 其他一些参数。
docker run背后的工作
Docker
在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载启动;
- 利用镜像创建并启动一个容器;
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层;
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;
- 从地址池配置一个
ip
地址给容器; - 执行用户指定的启动命令;
- 执行完毕后容器被终止。
第三条到第五条看不懂没有什么关系,后面我们会介绍相关的知识,相信到时你一定能够明白,但是现在我们要知道这个过程,了解这个过程能够帮助我们更好的使用命令。好,接下来我们介绍几个实例。
docker run实例一
创建并启动一个容器,容器中具有ubuntu
的运行环境,输出hello docker
。
只需要一条命令:docker run ubuntu:14.04 echo 'hello docker'
,问题就解决了,是不是很简单啊!!是的,现在我们来讲一下它里面的操作,用来之前学过的知识点。
首先由于本地不存在ubuntu:14.04
镜像,所以先到Docker Hub
中下载镜像;(其实也就是先执行docker pull ubuntu:14.04
)
然后在下载完镜像之后,使用镜像创建。由于一个ubuntu
镜像包含了一个ubuntu
系统的所有内容,使用镜像启动后,容器中就具备了ubuntu
的运行环境了。
启动容器后,执行echo 'hello docker'
启动命令,执行完启动命令之后终止容器。
docker run实例二
创建并启动一个容器,容器中具有ubuntu
的运行环境,容器名为firstContainer
,为容器分配一个终端,与用户进行交互。
其中,-i
选项告诉Docker
保持标准输入输出流对容器开放,-t
选项让Docker
分配一个伪终端(pseudo-tty
)并绑定到容器的标准输入上。--name
为容器设置容器名。
注意docker run
是创建一个新容器并启动,所以这条命令创建的容器与上个实例的创建的容器不是同一个容器。而且由于本地已经存在ubuntu:latest
镜像了,所以并不需要再次从Docker Hub
中下载,而是直接使用本地的ubuntu:latest
镜像构建容器。
启动容器之后,我们进入容器内部并在终端进行与容器交互。我们可以根据左侧的命令提示符判断自己是否在容器内部。例如上面的例子,当左侧的命令提示符为root@localhost
时,表示我们在容器外部,而命令提示符为:root@fe263c9359dd/
时,表示我们在容器内部,且容器的ID
是fe263c9359dd
。我们可以通过exit
退出当前的容器。
第二种方式:启动一个已经终止的容器
虽然Docker
容器是非常轻量的,这意味着一般情况下,我们在启动完容器并完成操作之后都会将容器删除掉。但是有些时候我们会进入之前创建的容器,而docker run
每次都会创建一个新容器,显然不符合我们的需求。这种时候,可以使用docker start
命令,使用容器名或者容器id
启动一个已经终止的容器。
docker start [OPTIONS] 容器 [容器2...]
其中:
docker start
:Docker
启动容器的命令关键词;OPTIIONS
: 命令选项;容器
: 需要启动的容器,该容器用“容器ID
”或“容器名”表示,如果指定了多个容器,那么就将这些容器都启动。
假设一个名为firstContainer
的容器处于终止状态,现在需要将它启动,可以这么做:执行docker start firstContainer
,命令执行后,尝试启动firstContainer
容器,并执行该容器的启动命令。
但是如果想启动第一个实例创建的容器,既不知道容器的名字(因为我没有指定)而且也不知道它的id
。该怎么办呢?
查看容器信息
Docker
中有这样一条命令docker ps
,可以查看容器的信息,包括容器ID
,基础镜像,启动命令,创建时间,当前状态,端口号,容器名字。
如果不加任何参数,只执行docker ps
,将会显示所有运行中的容器。例如执行docker ps
,如下图所示,在当前的Docker
环境中,只有一个正在运行的容器,它的容器Id
是fe263c9359dd
,基于ubuntu:latest
镜像,启动命令为“/bin/bash
”,创建时间为2
分钟之前,当前状态为“Up 2 minutes
”,也就是已经运行了2
分钟了,容器名为:firstContainer
。
而如果docker ps –a
命令,可以查看Docker
环境中所有的容器,包括已经停止的容器。执行docker ps –a
后,如下图所示:除了名为firstContainer
的容器外,还可以看到一个id
为ee826f1d58ff
的容器容器(容器id
随机生成)。但是这个容器的当前状态为Exited (0) 3 minutes ago
,这表示它是处于终止状态的,而且是在3
分钟前退出的。
对于这个处于终止状态的容器,可以通过docker start ee826f1d58ff
或者docker start g\fracious_lewin
启动该容器了。
实际情况中,使用docker start ee826f1d58ff
去启动第一个实例的容器,然后使用docker ps
查看,会看不到该容器。这也就是说明了在执行docker ps
时,容器Id
为ee826f1d58ff
的容器并不是处于运行状态,而是处于终止状态。
docker ps
的执行结果如下所示:容器Id
为ee826f1d58ff
的容器的当前状态为Exited (0) 2 seconds ago
!!!这表示ee826f1d58ff
容器确实处于终止状态,但是它是2
秒之前退出的,注意是2
秒前!这表明2
秒前启动过容器,但是由于某种原因,容器终止了!!
实际情况下,执行docker start ee826f1d58ff
启动容器id
为ee826f1d58ff
的容器了!!但是在执行完启动命令之后,该容器就立即结束了,至于为什么会结束,下一关我们将为您揭晓答案!!
任务要求
本关的编程任务是补全step3/startcontainer.sh
文件中的内容,要求创建并启动一个容器。具体要求如下:
- 创建并启动一个容器,容器名为
firstContainer
,具备busybox
的运行环境。并输出hello world
。
本关涉及的代码文件step3/startcontainer.sh
的代码框架如下:
-
#注意如果想在右侧使用命令行模拟操作,请先输入
#service docker start
#否则将不能执行docker命令
#创建并启动一个容器,容器名为firstContainer,具备busybox的运行环境。并输出hello world
#拉取busybox最新镜像
docker pull busybox
#********** Begin *********#
docker pull busybox:latest
docker run --name firstContainer busybox:latest echo "hello world"
更多推荐
所有评论(0)