头歌—Docker企业级实训-第三关启动⼀个容器
任务详情
如果将Docker⽐作⼀艘轮船,那容器就是轮船上⼀个⼀个的集装箱,⽽镜像就是组成集装箱的基本材料。docker容器是Docker中⾄关重要的⼀部分,⽽这⼀节我们介绍如何启动⼀个容器。
本关任务是学习启动⼀个容器,要求学习者参照⽰例完成“创建并启动⼀个名为firstContainer的容器,该容器具备busybox的运⾏环境,并在启动时输出⼀个“hello world”。
相关知识
在拉取到⼀个镜像之后,也就为容器准备了运⾏环境。下⾯我们将介绍如何使⽤镜像启动⼀个容器。
启动容器有两种⽅式,⼀种是基于镜像新建⼀个容器并启动,另外⼀个是将在终⽌状态(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在后台运⾏的标准操作包括:
1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载启动;
2. 利⽤镜像创建并启动⼀个容器;
3. 分配⼀个⽂件系统,并在只读的镜像层外⾯挂载⼀层可读写层;
4. 从宿主主机配置的⽹桥接⼝中桥接⼀个虚拟接⼝到容器中去;
5. 从地址池配置⼀个ip地址给容器;
6. 执⾏⽤户指定的启动命令;
7. 执⾏完毕后容器被终⽌。
第三条到第五条看不懂没有什么关系,后⾯我们会介绍相关的知识,相信到时你⼀定能够明⽩,但是现在我们要知道这个过程,了解这个过程能够帮助我们更好的使⽤命令。好,接下来我们介绍⼏个实例。
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中有这样⼀条命令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的容器了!!但是在执⾏完启动命令之后,该容器就⽴即结束了,⾄于为什么会结束,下⼀关我们将为您揭晓答案!!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论