在学习了 docker 镜像的内容后,我们在来看 docker 的另一个核心点:容器。
注:环境为 CentOS7,docker 19.03
docker 的容器是镜像的一个运行实例。docker 镜像是只读文件,而容器则带有运行时的可读写层,而且容器中的应用进程处于运行状态。接下来我们就来学习 docker 容器的具体操作。
创建容器
创建容器相关的命令有 create、start、run、wait 和 logs。
新建容器
使用命令 docker [container] create
新建一个容器:
# docker create -it ubuntu:latest
63197c11dc16e893dc8bb032ebf92419032cc40d6dcb6f750a16e9e308d52584
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63197c11dc16 ubuntu:latest "/bin/bash" 5 seconds ago Created hardcore_raman
docker create
命令对应的参数有很多,下面列出对应的选项:
create 命令与容器运行模式相关的选项
create 命令与容器环境和配置相关的选项
create 命令与容器资源限制和安全保护相关的选项
以及:
- -l, --label=[]: 以键值对?式指定容器的标签信息;
- --label-file=[]: 从?件中读取标签信息。
启动容器
使用该命令新建的容器处于停止状态,使用命令 docker [container] start
启动容器,通过 docker [container] ps
查看运行中的容器:
# docker start 63197c11dc16e893dc8bb032ebf92419032cc40d6dcb6f750a16e9e308d52584
63197c11dc16e893dc8bb032ebf92419032cc40d6dcb6f750a16e9e308d52584
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63197c11dc16 ubuntu:latest "/bin/bash" About a minute ago Up 3 seconds hardcore_raman
我们还可以将新建和启动容器合起来,命令 docker [container] run
就是两个命令的组合:
# docker run ubuntu /bin/echo "Hello World"
Hello World
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5982bad8cf83 ubuntu "/bin/echo 'Hello Wo…" 7 seconds ago Exited (0) 6 seconds ago exciting_lalande
使用 run 命令实际上在后台包含了以下过程:
- 检查本地是否存在指定的镜像, 不存在就从公有仓库下载;
- 利?镜像创建?个容器, 并启动该容器;
- 分配?个?件系统给容器, 并在只读的镜像层外?挂载?层可读写层;
- 从宿主主机配置的?桥接?中桥接?个虚拟接?到容器中去;
- 从?桥的地址池配置?个IP地址给容器;
- 执??户指定的应?程序;
- 执?完毕后容器被?动终?。
注:运行结束后容器就会停止。
还可以在创建时启动一个 bash 终端,这样就能和容器交互了:
# docker run -it ubuntu bash
[email protected]:/#
- -t:选项让Docker分配?个伪终端(pseudo-tty) 并绑定到容器的标准输?上,
- -i:则让容器的标准输?保持打开。
退出容器
?户可以按 Ctrl+d
或输? exit
命令来退出容器,也可以使用命令 docker container wait CONTAINER[CONTAINER...]
?命令来等待容器退出, 并打印退出返回结果。
[email protected]:/# exit
exit
如果启动容器的出项错误,有以下错误代码:
- 125: Docker daemon执?出错, 例如指定了不?持的Docker命令参数;
- 126: 所指定命令?法执?, 例如权限出错;
- 127: 容器内命令?法找到。
后台运行
如果需要让容器在后台以守护态(Daemonized) 形式运?,可以通过 -d 参数实现:
# docker run -itd ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"
5352f3e531b2f451ec6b484a6d35d1fd064438fa3d3404691b80b98bbc6e7801
它会返回一个唯一的id值,使用 docker ps
或 docker container ls
来查看容器信息:
# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5352f3e531b2 ubuntu "/bin/bash -c 'while…" 2 minutes ago Up 2 minutes lucid_albattani
查看容器输出
刚才通过 -d 让容器以后台方式运行,我们没有看到它的输出信息,可以使用命令docker [container] logs
命令查看,该命令包含以下选项:
- -details: 打印详细信息;
- -f, -follow: 持续保持输出;
- -since string: 输出从某个时间开始的?志;
- -tail string: 输出最近的若??志;
- -t, -timestamps: 显?时间戳信息;·-until string: 输出某个时间之前的?志。
# docker logs 5352f3e531b2
hello world
注:创建容器后会返回一个唯一的id,但一般我们截取字符前面的一部分,保证能认到这个容器就可以了。
停止容器
停止容器使用的子命令为 pause/unpause、stop、prune。
暂停容器
使用命令docker [container] pause CONTAINER[CONTAINER...]
来暂停一个运行中的容器
# docker run --name test --rm -itd ubuntu bash
c1a52ffc5f662b2e60bcd98fe81157754cb251b22a624e8a6a32785905d5b93e
# docker pause c1a52ffc5
c1a52ffc5
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1a52ffc5f66 ubuntu "bash" 16 seconds ago Up 16 seconds (Paused) test
出于 paused 状态的容器就可以使用 docker [container] unpause CONTAINER[CONTAINER...]
命令来恢复了。
注:启动时添加 --rm 选项时,在容器退出后会删除容器。
停止容器
使用命令docker [container] stop [-t|--time[=10]] [CONTAINER...]
停止容器:
# docker stop 5352f3e531b2
5352f3e531b2
现在使用命令 docker container prune
会删除所有处于停止状态的容器。
除了 stop 外,使用命令docker [container] kill
或在交互模式下通过命令exit
或Ctrl+d
都可以停止容器。
属于停止状态的容器,可以使用命令 docker [container] start
来启动,或者是命令 docker [container] restart
来先停止再启动。
原文地址:https://www.cnblogs.com/xingyys/p/11388050.html