容器就是独立运行起来的程序,一个容器就好比你在虚拟机里装好的一个系统。
我们可以创建、启动、停止、删除它。同时也可以将容器需要的数据放在容器之外。比如有一个数据库容器,里面有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 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止