avatar

目录
CentOS7 安装 Docker 与容器、镜像管理

卸载旧版本的Docker与依赖

Code
1
2
3
4
5
6
7
8
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

使用存储库安装

①安装yum配置管理器实用程序

Code
1
2
3
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2

②设置Docker稳定存储库

Code
1
2
3
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo

③安装Docker

Code
1
yum install docker-ce docker-ce-cli containerd.io

常用Docker命令

运行Docker

Code
1
2
3
systemctl start docker

service docker start

查看Docker版本

Code
1
docker version

Docker添加阿里云镜像加速器

Code
1
2
cd /etc/docker
touch daemon.json

添加如下内容

Code
1
2
3
{
"registry-mirrors": ["https://n6syp70m.mirror.aliyuncs.com"]
}

重启Docker

Code
1
2
3
service docker restart

systemctl restart docker

运行一个镜像测试Docker,是否安装成功

Code
1
docker run hello-world

查看Docker在系统的状态

Code
1
2
3
docker system info

docker info
Code
1
2
3
4
5
Containers: 1           # 容器
Running: 0 # 正在运行
Paused: 0 # 暂停
Stopped: 1 # 停止
Images: 1 # 镜像

创建一个新的容器

Code
1
2
3
docker create

docker container create

显示容器列表

Code
1
2
3
4
5
6
7
docker ps

docker container ls
# 可选的配置项
-a 显示所有的容器
-q 仅显示 ID
-s 显示总的文件大小

Docker新旧版本对比,命令皆可用

docker attach docker container attach # 连接到正在运行中的容器
docker build docker image build # 构建镜像
docker commit docker container commit # 根据已有的镜像构建
docker cp docker container cp # 容器和本地文件系统之间复制文件/文件夹
docker create docker container create # 创建容器
docker deploy docker stack deploy # 部署服务
docker exec docker container exec # 容器中执行命令
docker images docker image ls # 查看镜像列表
docker import docker image import # 从归档文件中创建镜像
docker inspect docker container/image inspect # 查看容器的详细信息(即元数据)
docker kill docker container kill # 立即停止容器中的主要进程
docker port docker container port # 列出指定的容器的端口映射
docker restart docker container restart # 容器重启
docker rm docker container rm # 删除一个或多个容器
docker rmi docker image rm # 删除本地一个或多少镜像
docker run docker container run # 运行命令
docker start docker container start # 容器启动
docker top docker container top # 容器停止
…… ……

命令选项

命令的选项有以下几种:长选项短选项复合选项无选项

举例:显示容器的状态

Code
1
docker container ls --help
Code
1
2
3
4
5
6
7
8
-a, --all             Show all containers (default shows just running)
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print containers using a Go template
-n, --last int Show n last created containers (includes all states)(default -1)
-l, --latest Show the latest created container (includes all states)
--no-trunc Don't truncate output
-q, --quiet Only display numeric IDs
-s, --size Display total file sizes
Code
1
2
3
4
docker container ls      # 无选项
docker container ls -a # 短选项
docker container ls -all # 长选项
docker container ls -aq # 复合选项

查看容器的详细信息inspect

Code
1
2
3
docker image inspect ubuntu

docker inspect ubuntu

inspect三种使用方法

Code
1
2
3
4
5
6
# 使用容器名
docker container inspect shiyanlou01
# 使用 ID ,因生成的 ID 不同,需要修改为相应的 ID
docker container inspect 1f6789
#查看刚刚创建的名为 shiyanlou01 的容器的 MAC 地址
docker container inspect shiyanlou01 | grep "MacAddress"

创建容器①

Code
1
2
3
4
5
6
7
8
9
docker container run [OPTIONS] IMAGE [COMMAND [ARGS...]]

docker run [OPTIONS] IMAGE [COMMAND [ARGS...]]
# 一些常用的配置项为:
-i 或 --interactive, 交互模式
-t 或 --tty, 分配一个 pseudo-TTY,即伪终端
--rm 在容器退出后自动移除
-p 将容器的端口映射到主机
-v 或 --volume, 指定数据卷

指定 busybox 镜像,然后运行命令 echo "hello shiyanlou" 命令

Code
1
2
docker container run \
busybox echo "hello shiyanlou"

ubunutu 容器中运行 /bin/bash 命令:

Code
1
2
3
4
docker container run \
-i -t \
ubuntu /bin/bash
# 对于交互式的进程而言(例如这里的 bash),必须将 -i 和 -t 参数一起使用,才能为容器进程分配一个伪终端,通常我们会直接使用 -it

退出bash

①直接使用 exit 命令,这时候 bash 程序终止,容器进入到停止状态

Code
1
exit

②使用组合键退出,容器仍然保持运行的状态,可以再次连接到这个 bash 中,

组合键是 ctrl + pctrl +q。即先同时按下 ctrlp 键,再同时按 ctrlq 键,就可以让容器在后台运行。

-d 参数指定容器以后台模式运行

Code
1
2
3
4
docker container run \
-i -t -d \
ubuntu /bin/bash
# 以后台模式创建并运行一个容器

创建容器②

严格意义上来讲,docker run 命令的作用并不是创建一个容器,而是在一个新的容器中运行一个命令。而用于创建一个新容器的命令为

Code
1
2
3
4
5
6
7
8
9
docker container create [OPTIONS] IMAGE [COMMAND] [ARG...]

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
# 常见的配置项如下所示:
--name 指定一个容器名称,未指定时,会随机产生一个名字
--hostname 设置容器的主机名
--mac-address 设置 MAC 地址
--ulimit 设置 Ulimit 选项
# ulimit 是一种 linux 系统的内建功能,一些简单的描述,可以参考 https://www.ibm.com/developerworks/cn/linux/l-cn-ulimit/ ,而对于在下面我们将要设置的部分值的含义,可以参考 https://access.redhat.com/solutions/61334

实例:指定容器的名字为 shiyanlou01,主机名为 shiyanlou01,设置相应的 MAC 地址,并通过 ulimit 设置最大进程数(1024:2048 分别代表软硬资源限制,详细内容可以参考上面的链接),使用 ubuntu 的镜像,并运行 bash

Code
1
2
3
4
5
6
docker container create \
--name shiyanlou01 \
--hostname shiyanlou01 \
--mac-address 00:01:02:03:04:05 \
--ulimit nproc=1024:2048 \
-it ubuntu /bin/bash

容器创建成功后,会打印该容器的 ID

容器的标识有三种比较常见的标识方式

UUID 长标识符,例如

Code
1
1f6789f885029dbdd4a6426d7b950996a5bcc1ccec9f8185240313aa1badeaff

UUID 短标识符,从长标识符开始,只要不与其它标识符冲突,可以从头开始,任意选用位数,例如针对上面的长标识符,

可以使用 1f1f678 等等

③最后一种方式即是使用容器的名字Name

runcreate的区别

创建和使用容器

create

Code
1
2
3
4
5
6
7
8
9
#创建
docker container create \
--name shiyanlou01 \
--hostname shiyanlou01 \
--mac-address 00:01:02:03:04:05 \
--ulimit nproc=1024:2048 \
-it ubuntu /bin/bash
# 启动
docker container start shiyanlou01

run

Code
1
2
3
4
5
6
docker container run \
--name shiyanlou01 \
--hostname shiyanlou01 \
--mac-address 00:01:02:03:04:05 \
--ulimit nproc=1024:2048 \
-it ubuntu /bin/bash

run 命令还完成一些其它的操作,例如没有镜像时会 pull 镜像,使用 -it 参数时完成了 attach 操作,使用 --rm 参数在容器退出后还会完成 container rm 操作,因此run 命令是一个综合性的命令

容器暂停进程操作

Code
1
2
3
docker container pause CONTAINER [CONTAINER...]

docker pause [OPTIONS] CONTAINER [CONTAINER...]

容器恢复进程操作

Code
1
2
3
docker container unpause CONTAINER [CONTAINER...]

docker unpause [OPTIONS] CONTAINER [CONTAINER...]

连接到正在运行中的容器

Code
1
2
3
docker container attach [OPTIONS] CONTAINER

docker attach [OPTIONS] CONTAINER

容器的日志管理

Code
1
2
3
4
5
6
docker container logs [OPTIONS] CONTAINER

docker logs [OPTIONS] CONTAINER
# 常用的配置项有:
-t 或 --timestamps 显示时间戳
-f 实时输出,类似于 tail -f

实例:重新运行一个容器,让它在后台执行一个不断输出的脚本,命令如下

Code
1
2
3
4
5
docker container run \
--name shiyanlou02 \
-i -t -d \
ubuntu /bin/sh -c "while true; do echo hello shiyanlou; sleep 2; done"
# "while true; do echo hello world; sleep 2; done" 是一个脚本,它的功能是每 2 秒输出一次“ hello shiyanlou ”,

查看刚刚创建的容器的日志,使用如下命令:

Code
1
docker container logs -tf shiyanlou02

可以使用组合键 Ctrl + c 来结束日志跟踪

显示容器中的进程信息

Code
1
2
3
docker container top CONTAINER

docker top CONTAINER

查看容器文件修改

Code
1
2
3
docker container diff CONTAINER

docker diff CONTAINER

容器中执行命令

除了使用 docker container run 执行命令之外

Code
1
2
# 在一个运行中的容器中执行命令,使用如下格式:
docker container exec [OPTIONS] CONTAINER COMMAND [ARG...]

例如,我们在 shiyanlou01 容器中执行 echo "test_exec" 命令,就可以使用如下命令:

Code
1
2
3
4
# 重启容器
docker container restart shiyanlou01
# 执行命令
docker container exec shiyanlou01 echo "test_exec"

删除容器

Code
1
2
3
docker container rm [OPTIONS] CONTAINER [CONTAINER...]

docker rm [OPTIONS] CONTAINER [CONTAINER...]

删除之前创建的所有容器

Code
1
2
3
4
docker container rm -f $(docker container ls -aq)
# docker container ls -aq 会输出所有容器的 UUID ,
rm 命令可以根据 UUID 去删除容器
这里用来选项 -f 是因为还有在运行中的容器,所以需要强制删除。ls 列出的 UUID 传递给 rm 进行删除.

查看镜像列表

Code
1
2
3
docker image ls

docker images

查看指定仓库的镜像,例如。查看 ubuntu 仓库的镜像:

Code
1
docker image ls ubuntu

搜索镜像

Code
1
docker search ubuntu

拉取镜像

Code
1
2
3
4
docker image pull [OPTIONS] NAME[:TAG|@DIGEST]

docker pull [OPTIONS] NAME[:TAG|@DIGEST]
# 常用的配置参数为 -a,代表下载仓库中的所有镜像,即下载整个存储库

下载 ubuntu:14.04 镜像,使用如下命令

Code
1
docker image pull ubuntu:14.04

对于 pull 下来的镜像来说,其默认的保存路径为 /var/lib/docker。因为这里的存储驱动为 aufs,所以具体路径为 /var/lib/docker/aufs

拉取具体的镜像,有一行 Digest 信息,这就是摘要信息

构建镜像

对于我们 pull 的新镜像 ubuntu:14.04 来说,如果我们需要对其进行更新,可以创建一个容器,在容器中进行修改,然后将修改提交到一个新的镜像中。

提交修改使用如下命令

Code
1
2
3
docker container commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

例如,我们运行一个容器,然后在其中创建一个文件,最后使用 commit 命令

Code
1
2
3
4
5
6
7
8
9
10
11
# 使用 run 创建运行一个新命令
docker container run \
--name shiyanlou001 \
-it busybox /bin/sh
# 在运行的容器中创建两个文件,test1 和 test2
touch test1 test2
# 使用 ctrl + p 及 ctrl+q 键退出
# 使用提交命令,提交容器 shiyanlou001 的修改到镜像 busybox:test 中
docker container commit shiyanlou001 busybox:test
# 查看通过提交创建的镜像
docker image ls busybox

查看更多的关于Docker的命令

Code
1
2
3
man docker

docker --help
文章作者: Jack-Roc
文章链接: http://jack-roc.top/2018/10/23/Docker/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jack-Roc
打赏
  • 微信
    微信
  • 支付寶
    支付寶