docker容器(Container)

容器就是独立运行起来的程序,一个容器就好比你在虚拟机里装好的一个系统。

我们可以创建、启动、停止、删除它。同时也可以将容器需要的数据放在容器之外。比如有一个数据库容器,里面有mysql服务,但数据不能放在容器里。我们可以把数据放在主机里,通过映射的方式让容器访问。

启动容器

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

新建并启动容器使用docker run命令

1
docker run ubuntu:18.04 /bin/echo 'Hello world'

启动后会看到Hello world,本本地使用echo 'hello world' 没什么两样。但这个hello world是容器输出的。不是主机输出的。容器启动后自己就终止了,所以会误认为主机输出的。

docker run命令会检查本地是否存在镜像,如果不存在,会自动到官方仓库下载。比如上面的ubuntu:18.04

在执行docker run命令时,可以添加-t -i参数,让容器不退出,保持交互。

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上,
-i 则让容器的标准输入保持打开

1
docker run -t -i ubuntu:18.04 /bin/bash

这样容器就不会退出了,你会发现shell中出现出现了root@af8bae53bdd3:/这样的提示,这说明你进入了容器,你所执行的命令都是在容器内运行。

root 是容器的用户
af8bae53bdd3 是容器的id,每个容器启动后后有一个容器id。我们反复启动一个容器,就靠它。

如果在交互模式下,退出容器可以输入exit就退出来了。

启动已终止容器

就好比,咱们不能每次都在virtualBox里新装一个系统,我们只要运行安装过得系统。
当容器退出后,想再次启动已经创建过的容器。这时候可以采用docker container start命令

1
docker container start af8bae53bdd3

这样就启动了上次生成的容器

小结

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

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