docker容器的启动

Docker提供的docker run命令用于创建并启动一个容器实例。

例如:docker run ubuntu

ubuntu为镜像名。

实际上一个容器实例就是宿主机器上的一个独立的进程。这一点我们在前面讲解的时候或多或少已经提过了。每次执行docker run,就创建一个Docker容器进程,拥有独立的文件系统、网络和进程树。使用docker ps或者docker container ls可以查询运行的容器。

那么有人会问,我怎么查询不到呢? ps也查不到相应的进程呢?这是因为容器启动后又退出了。使用docker ps -a或者docker container ls -a查询

确实容器退出了。那我们怎么让容器保持运行呢,exited可不是用户希望的状态。

查看docker run --help

我们看到run的时候,用户可以指定容器启动后需要执行的命令,比如执行一个shell命令一直循环。当然run还提供了其他的丰富可选项,最常用的-i -t -d可选项,

-i, --interactive Keep STDIN open even if not attached

-t, --tty Allocate a pseudo-TTY

-d, --detach Run container in background and printcontainer ID

使用-i选项,容器没退出,但终端界面一直卡主。

主机名变了,docker ps查询这个一连串的数字加字母的主机名是容器ID。实际上-t使得启动容器的同时进入容器了。而run的时候用户也可以使用-h指定容器的主机名

使用-d打印了容器ID,但容器退出了。

同时使用效果是最好的,终端不会卡主,容器处于后台运行状态,还打印了容器ID。实际上,当run一个容器的时候,我一般都会使用这三个可选项。

解释:

relaxed_heyrovsky 容器名字,用户可以使用-h指定,未指定的话,docker自动生成

那为什么run的时候没有加要执行的命令,容器也没有退出呢?这其实是因为Dockerfile里的CMD命令起作用了,不知道大家还记不记得。

当利用 docker run 来启动容器时,Docker在后台运行的标准操作包括:

1、检查本地是否存在指定的镜像,不存在就从公有仓库下载

2、利用镜像创建一个容器

3、分配一个文件系统,并在只读的镜像层外面挂载一层可读写的容器层

4、从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去,从地址池配置一个ip地址给容器

5、启动容器并执行用户指定的应用程序

6、执行完毕后容器被终止

关于第三点第四点需要说明下:

由于容器内未安装相关网络命令,我们使用docker inspect ContainerID

你也可以在宿主机ifconfig查询,应该多了几个网卡。这些我们都会在docker 网络部分讲解。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180126G02GSV00?refer=cp_1026

扫码关注云+社区