Docker之八:Docker 容器
容器是镜像的一个运行实例。镜像是静态的只读文件,容器带有运行时的可写文件层,容器中的应用进程处于运行状态。虚拟机时一个模拟的完整操作系统,而Docker容器是带有必需运行环境的可运行的应用。
创建镜像
获取镜像
# 获取最新版本ubuntu镜像ubuntu:latest
$ sudo docker pull ubuntu

新建容器
# 新建容器
$ sudo docker create -it ubuntu:latest


docker create创建的容器处于停止状态,需要启动后才能真正运行。若在create之前没有pull获取镜像,执行create后会首先自动从仓库下载镜像。
docker create还有许多的指令选项,使用 docker create --help 可以查看其功能,主要包括与容器运行相关、与容器环境配置相关、与容器资源限制相关和容器安全保护相关。这些指令需要在实际中不断领会。
启动容器
# f242393c2e4b为通过docker pa -a查找到的ubuntu容器CONTAINER ID
$ sudo docker start f242393c2e4b

获取镜像并新建启动容器
使用docker run命令可以一次性完成新建和启动容器,并且若本地没有镜像,会自动从仓库下载镜像。
# 输出Hello world后容器自动终止
$ sudo docker run ubuntu:latest /bin/echo 'Hello world'

docker run创建容器流程:
- 检查本地是否存在镜像,不存在就从共有仓库下载。
- 利用镜像创建一个容器,并启动该容器。
- 分配一个文件系统给容器,并在只读镜像层外面挂载一层可读写层。
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。
- 从网桥的地址池配置一个IP地址给容器。
- 执行用户指定的应用程序。
- 执行完毕后容器被自动终止。
启动用户可交互bash终端:
# 启动一个用户可交互的bash终端
$ sudo docker run -it ubuntu:latest /bin/bash
# 退出交互模式
root@d45fd3fd2cae:/# exit

docker run常见错误代码(命令执行出错后,默认返回命令的退出错误码):
| 错误码 | 描述 |
|---|---|
| 125 | Docker daemon 支持出错,例如指定了不支持的Docker命令参数 |
| 126 | 指令无法执行,例如权限出错等 |
| 127 | 容器内命令无法找到 |
守护态运行
通过 -d 参数来让Docker容器在后台以守护态(Daemonized)形式运行。
# 后台守护态运行,每过1秒,打印一次hello world
$ sudo docker run -d ubuntu:latest /bin/sh -c "while true; do echo hello world; sleep 1; done"

查看容器输出
使用 docker logs 可以查看容器输出。

上一步我们启动了一个守护态容器,每过1秒,打印一次hello world,这里我们来查看容器输出:
$ sudo docker logs 8bddde26b1fc

停止容器
暂停容器
# 启动一个容器 --name 指定容器别名,--rm 指定容器退出后自动删除
$ sudo docker run --name test --rm -it ubuntu:latest bash


# 暂停容器
$ sudo docker pause test

# 继续容器
$ sudo docker unpause 3cb9777fa384

终止容器
# 终止容器
$ sudo docker stop test
# 或
$ sudo docker stop 3cb9777fa384

终止容器后正在运行的容器会自动退出:

处于终止状态的容器(终止后不被删除)可以使用 docker start 重启,或者正在运行的容器,可以使用 docker restart重启:
# 启动已经终止的容器
$ sudo docker start 3cb9777fa384
# 重启正在运行的容器
$ sudo docker restart 3cb9777fa384
进入容器
使用 -d 参数启动容器时,容器启动后会进入后台,用户无法查看容器中的信息,并且无法进行操作。使用 attach 和 exec 命令可以在需要数进入容器。
- attach命令

# 守护态启动容器
$ sudo docker run -itd ubuntu
# attach 进入容器
$ sudo docker attach 9ec685095022
# 退出容器CTRL-D或命令行输入exit
root@9ec685095022:/# exit

当多个窗口同时 attach 到同一个容器时,所有窗口会同步显示;某个窗口阻塞时,其它窗口无法执行操作。
- exec 命令
exec可以在运行的容器内直接执行任意命令。

# 守护态启动容器
$ sudo docker run -itd ubuntu
# exec 进入容器并启动一个 bash
$ $ sudo docker exec -it b2bbe291790c /bin/bash
# 退出容器CTRL-D或命令行输入exit
root@b2bbe291790c:/# exit

删除容器
使用 docker rm 删除容器。默认情况下,docker rm命令只能删除已经处于终止或退出状态的容器,并不能删除处于运行状态的容器,除非使用 -f 参数。

# 删除一个正在运行的容器
# 终止容器
$ sudo docker stop b2bbe291790c
# 删除容器
$ sudo docker rm b2bbe291790c

导入和导出容器
导出容器
导出容器是指,导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。使用 docker export 可以导出容器:

$ sudo docker export -o ubuntu-bak.tar a6314aee8914
# 或
$ sudo docker export a6314aee8914 > ubuntu-bak.tar

导入容器
使用 docker import可以将导出的容器文件导入成镜像:

$ sudo cat ubuntu-bak.tar | sudo docker import - ubuntu:v1.0

查看容器
查看容器信息
$ sudo docker inspect de64e3fe7fdb

查看容器内进程
$ sudo docker top de64e3fe7fdb

查看统计信息
# 查看统计信息,默认会持续输出
$ sudo docker stats de64e3fe7fdb
# 查看统计信息,不持续输出
$ sudo docker stats --no-stream de64e3fe7fdb

其他容器命令
- 复制文件

# 将本地文件 data 复制到容器tmp目录下
$ sudo docker cp data de64e3fe7fdb:/tmp/

2. 查看变更
查看容器内文件系统是否变更。
$ sudo docker diff de64e3fe7fdb

3. 查看端口映射

$ sudo docker port de64e3fe7fdb
- 更新配置
docker update会更新容器的一些运行时配置,主要是一些资源配置份额。

# 限制总配额为 1 秒
$ sudo docker update --cpu-quota 1000000 de64e3fe7fdb
# 容器所占用时间为 10%
$ sudo docker update --cpu-period 1000000 de64e3fe7fdb
本文详细介绍了Docker容器的管理,包括如何创建镜像、获取镜像、新建并启动容器、查看容器输出、停止与暂停容器、进入容器以及删除容器。还讲解了守护态运行、查看容器信息和统计信息等操作,帮助读者掌握Docker容器的基本管理技巧。
6万+

被折叠的 条评论
为什么被折叠?



