html5响应式设计公司网站模板整站html源码下载,软件设计师中级含金量,杭州app开发公司官网,河南网站优化公司哪家好目录 一、Docker的安装方式
1、实验环境准备
1.1 关闭防火墙
1.2 可以访问网络
1.3 配置yum源
2、yum安装docker
2.1 安装docker服务
2.2 配置镜像加速
2.3 启动docker服务
3、二进制安装docker
3.1 下载或上传安装包并解压
3.2 配置使用systemctl管理
3.3 配置镜像…目录 一、Docker的安装方式
1、实验环境准备
1.1 关闭防火墙
1.2 可以访问网络
1.3 配置yum源
2、yum安装docker
2.1 安装docker服务
2.2 配置镜像加速
2.3 启动docker服务
3、二进制安装docker
3.1 下载或上传安装包并解压
3.2 配置使用systemctl管理
3.3 配置镜像加速
3.4 启动并开机自启动
二、Docker的相关目录
三、Docker的相关操作
1、Docker基础操作
1.1 查看docker的详细信息
1.2 查看docker的版本信息
1.3 查看docker的帮助信息
2、Docker镜像操作
2.1 搜索镜像
2.2 获取镜像
2.3 查看镜像
2.3.1 查看本地镜像信息
2.3.2 查看镜像文件信息
2.3.3 获取指定镜像的详细信息
2.3.4 查看镜像的构建历史
2.4 导出镜像
2.5 添加标签
2.6 删除镜像
2.7 导入镜像
2.7.1 本地服务器镜像导入
2.7.2 远程服务器镜像导入
2.8 上传镜像
2.8.1 阿里云容器镜像服务平台
2.8.2 将本地镜像推送或拉取阿里云平台仓库
3、Docker容器操作
3.1 创建与运行与查看容器
3.1.1 创建新的容器
3.1.2 查看容器的状态
3.1.3 运行与关闭容器
3.1.4 查看容器的信息
3.2 创建并运行新的容器
3.2.1 创建并启动容器一次性运行
3.2.2 创建并启动容器持续性运行
3.2.3 创建容器时指定容器名称并持续运行容器
3.3 容器的生命周期
3.4 容器的进入操作
3.4.1 进入已存在的容器
3.4.2 进入新的容器
3.5 宿主机与容器之间的文件复制
3.5.1 将宿主机中的文件复制到容器内
3.5.2 将容器中的文件复制到宿主机中
3.6 容器的导出与导入
3.6.1 将容器导出成压缩包
3.6.2 导入容器镜像
3.7 容器的删除操作
3.7.1 删除指定的容器
3.7.2 批量删除多个容器
3.7.3 批量清理后台停止的容器
3.8 查看容器占用系统资源信息
3.9 查看容器进程状态
3.10 更新容器的配置
3.10.1 未更新配置之前的容器
3.10.2 已更新配置之后的容器
4、Docker仓库操作
4.1 镜像推送和拉取流程
4.1.1 镜像推送Push流程
4.1.2 镜像拉取Pull流程
4.2 部署本地的私有仓库环境
4.2.1 运行registry容器
4.2.2 修改daemon.json文件
4.3 镜像推送Push流程
4.3.1 标记镜像Tagging
4.3.2 推送镜像Pushing
4.3.3 验证推送Optional
4.4 镜像拉取Pull流程
4.4.1 拉取镜像Pulling
4.4.2 验证拉取Optional
四、Docker的操作总结
1、镜像管理命令
2、容器管理命令 一、Docker的安装方式
1、实验环境准备
情况说明Docker支持在主流的操作系统平台上使用包括Windows系统、Linux系统及MacOS系统等。目前最新的RedHat、CentOS、Ubuntu等操作系统官方软件源中都已经默认自带了Docker包可以直接安装使用但是比较旧不推荐使用。可以用Docker官方的YUM源进行配置进行安装较新的版本。
Docker发行版本Docker-EE 企业版和Docker-CE 社区版 角色 操作系统 IP地址 安装方式 服务端/客户端 CentOS 7.8 10.4.7.11 yum安装 服务端/客户端 CentOS 7.8 10.4.7.12 二进制安装
1.1 关闭防火墙
命令示例关闭所有设备防火墙和临时防护
systemctl disable --now firewalld
setenforce 0
输出结果
[rootMineGi ~]# systemctl disable --now firewalld
[rootMineGi ~]# setenforce 0
setenforce: SELinux is disabled
[rootMineGi ~]# 1.2 可以访问网络
命令示例
ping -c4 www.baidu.com
输出结果
[rootMineGi ~]# ping -c4 www.baidu.com
PING www.a.shifen.com (220.181.38.149) 56(84) bytes of data.
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq1 ttl128 time58.0 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq2 ttl128 time220 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq3 ttl128 time35.8 ms
64 bytes from 220.181.38.149 (220.181.38.149): icmp_seq4 ttl128 time72.0 ms--- www.a.shifen.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3006ms
rtt min/avg/max/mdev 35.806/96.655/220.715/72.781 ms
[rootMineGi ~]# 1.3 配置yum源
情况说明注意实验使用的Linux版本
命令示例
cat /etc/redhat-release
curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
tail -1 /etc/yum.repos.d/CentOS-Base.repo
输出结果
[rootMineGi ~]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[rootMineGi ~]# curl -s -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[rootMineGi ~]# tail -1 /etc/yum.repos.d/CentOS-Base.repo
gpgkeyhttp://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7
[rootMineGi ~]# 2、yum安装docker
2.1 安装docker服务
#移除之前的版本
yum remove docker-ce* -y#安装方式1脚本一键安装
curl -fsSL https://get.docker.com |bash -s docker --mirror Aliyun#安装方式2默认最新版本
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce#安装方式3安装指定版本
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce.x86_64 --showduplicates | sort -r yum install -y docker-ce-19.03.1 docker-ce-cli-19.03.1 containerd.io#安装方式4默认最新版本
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io #查看安装的RPM包
rpm -qa docker-ce*
命令示例
rpm -qa docker-ce*
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
ll /etc/yum.repos.d/docker-ce.repo
yum install -y docker-ce
rpm -qa docker-ce*
输出结果
[rootMineGi ~]# rpm -qa docker-ce*
[rootMineGi ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
--2024-12-11 18:41:57-- https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 220.181.165.67, 182.40.67.225, 182.40.67.223, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|220.181.165.67|:443... 已连接。
已发出 HTTP 请求正在等待回应... 200 OK
长度2081 (2.0K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/docker-ce.repo”100%[] 2,081 --.-K/s 用时 0s 2024-12-11 18:41:58 (244 MB/s) - 已保存 “/etc/yum.repos.d/docker-ce.repo” [2081/2081])[rootMineGi ~]# ll /etc/yum.repos.d/docker-ce.repo
-rw-r--r-- 1 root root 2081 12月 11 18:40 /etc/yum.repos.d/docker-ce.repo
[rootMineGi ~]# yum install -y -q docker-ce
警告/var/cache/yum/x86_64/7/docker-ce-stable/packages/docker-buildx-plugin-0.14.1-1.el7.x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID 621e9f35: NOKEY
导入 GPG key 0x621E9F35:用户ID : Docker Release (CE rpm) dockerdocker.com指纹 : 060a 61c5 1b55 8a7f 742b 77aa c52f eb6b 621e 9f35来自 : https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
setsebool: SELinux is disabled.
[rootMineGi ~]# rpm -qa docker-ce*
docker-ce-cli-26.1.4-1.el7.x86_64
docker-ce-26.1.4-1.el7.x86_64
docker-ce-rootless-extras-26.1.4-1.el7.x86_64
[rootMineGi ~]# 2.2 配置镜像加速
#获取镜像加速器配置需要登录
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors mkdir -p /etc/dockertee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com] #使用自己的加速器
}
EOFsystemctl daemon-reload
systemctl restart docker
命令示例
cat /etc/docker/daemon.json -EOF
{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io]
}
EOF
输出结果
[rootMineGi ~]# cat /etc/docker/daemon.json -EOF{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io]}EOF
[rootMineGi ~]# 2.3 启动docker服务
命令示例
systemctl daemon-reload
systemctl status docker
systemctl enable --now docker
systemctl status docker
输出结果
[rootMineGi ~]# systemctl daemon-reload
[rootMineGi ~]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: inactive (dead)Docs: https://docs.docker.com
[rootMineGi ~]# systemctl enable --now docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[rootMineGi ~]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: active (running) since 三 2024-12-11 18:45:24 CST; 2s agoDocs: https://docs.docker.comMain PID: 1348 (dockerd)Tasks: 8Memory: 29.4MCGroup: /system.slice/docker.service└─1348 /usr/bin/dockerd -H fd:// --containerd/run/containerd/containerd.sock12月 11 18:45:23 MineGi systemd[1]: Starting Docker Application Container Engine...
12月 11 18:45:24 MineGi dockerd[1348]: time2024-12-11T18:45:24.01203902008:00 levelinfo ...up
12月 11 18:45:24 MineGi dockerd[1348]: time2024-12-11T18:45:24.06309243208:00 levelinfo ...t.
12月 11 18:45:24 MineGi dockerd[1348]: time2024-12-11T18:45:24.39053450108:00 levelinfo ...e.
12月 11 18:45:24 MineGi dockerd[1348]: time2024-12-11T18:45:24.41269731508:00 levelinfo ...1.4
12月 11 18:45:24 MineGi dockerd[1348]: time2024-12-11T18:45:24.41283116708:00 levelinfo ...on
12月 11 18:45:24 MineGi dockerd[1348]: time2024-12-11T18:45:24.49210754108:00 levelinfo ...ck
12月 11 18:45:24 MineGi systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
[rootMineGi ~]# 注意事项
安装好的Docker系统有两个程序Docker服务端和Docker客户端其中Docker服务端是一个服务进程负责管理所有容器Docker客户端则扮演着Docker服务端的远程控制器可以用来控制Docker的服务端进程大部分情况下Docker服务端和客户端运行在一台机器上
3、二进制安装docker
安装包下载地址https://download.docker.com/linux/static/stable
#下载安装包并解压
wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.0.tgz
tar xzvf docker-26.1.0.tgz----------------------------------------------------------------------------------------
#将二进制文件移动到可执行路径上的目录例如/usr/bin/
cp docker/* /usr/bin/----------------------------------------------------------------------------------------
#启动
dockerd
#此命令下载测试映像并在容器中运行它
docker run hello-world----------------------------------------------------------------------------------------
#使用 systemctl 管理
vim /usr/lib/systemd/system/docker.service[Unit]
DescriptionDocker Application Container Engine
Documentationhttps://docs.docker.com
Afternetwork-online.target firewalld.service
Wantsnetwork-online.target[Service]
Typenotify
ExecStart/usr/bin/dockerd
ExecReload/bin/kill -s HUP $MAINPID
LimitNOFILEinfinity
LimitNPROCinfinity
TimeoutStartSec0
Delegateyes
KillModeprocess
Restarton-failure
StartLimitBurst3
StartLimitInterval60s[Install]
WantedBymulti-user.target#重新加载systemctl服务并开启Docker设置为开机自启动
systemctl daemon-reload
systemctl enable --now docker.service
3.1 下载或上传安装包并解压
【docker百度网盘】
命令示例
wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.0.tgz
ll docker-26.1.0.tgz
tar xf docker-26.1.0.tgz
ls
ls docker
cp docker/* /usr/bin/
输出结果
[rootMineGi ~]# wget https://download.docker.com/linux/static/stable/x86_64/docker-26.1.0.tgz
--2024-12-11 18:49:18-- https://download.docker.com/linux/static/stable/x86_64/docker-26.1.0.tgz
正在解析主机 download.docker.com (download.docker.com)... 99.86.4.51, 99.86.4.74, 99.86.4.35, ...
正在连接 download.docker.com (download.docker.com)|99.86.4.51|:443... 已连接。
已发出 HTTP 请求正在等待回应... 200 OK
长度73723712 (70M) [application/x-tar]
正在保存至: “docker-26.1.0.tgz”100%[] 73,723,712 1.58MB/s 用时 43s 2024-12-11 18:50:06 (1.65 MB/s) - 已保存 “docker-26.1.0.tgz” [73723712/73723712])[rootMineGi ~]# ll docker-26.1.0.tgz
-rw-r--r-- 1 root root 73723712 4月 23 2024 docker-26.1.0.tgz
[rootMineGi ~]# tar xf docker-26.1.0.tgz
[rootMineGi ~]# ls
docker docker-26.1.0.tgz
[rootMineGi ~]# ls docker
containerd containerd-shim-runc-v2 ctr docker dockerd docker-init docker-proxy runc
[rootMineGi ~]# cp docker/* /usr/bin/
[rootMineGi ~]# 3.2 配置使用systemctl管理
命令示例
cat /usr/lib/systemd/system/docker.service eof
[Unit]
DescriptionDocker Application Container Engine
Documentationhttps://docs.docker.com
Afternetwork-online.target firewalld.service
Wantsnetwork-online.target[Service]
Typenotify
ExecStart/usr/bin/dockerd
ExecReload/bin/kill -s HUP $MAINPID
LimitNOFILEinfinity
LimitNPROCinfinity
TimeoutStartSec0
Delegateyes
KillModeprocess
Restarton-failure
StartLimitBurst3
StartLimitInterval60s[Install]
WantedBymulti-user.target
eof
输出结果
[rootMineGi ~]# cat /usr/lib/systemd/system/docker.service eof[Unit]DescriptionDocker Application Container EngineDocumentationhttps://docs.docker.comAfternetwork-online.target firewalld.serviceWantsnetwork-online.target[Service]TypenotifyExecStart/usr/bin/dockerdExecReload/bin/kill -s HUP $MAINPIDLimitNOFILEinfinityLimitNPROCinfinityTimeoutStartSec0DelegateyesKillModeprocessRestarton-failureStartLimitBurst3StartLimitInterval60s[Install]WantedBymulti-user.targeteof
[rootMineGi ~]# 3.3 配置镜像加速
#获取镜像加速器配置需要登录
浏览器访问 https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/dockertee /etc/docker/daemon.json -EOF
{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com] #使用自己的加速器
}
EOFsystemctl daemon-reload
systemctl restart docker
命令示例
cat /etc/docker/daemon.json -EOF
{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io],
}
EOF
输出结果
[rootMineGi ~]# cat /etc/docker/daemon.json -EOF{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io],}EOF
-bash: /etc/docker/daemon.json: 没有那个文件或目录
[rootMineGi ~]# mkdir /etc/docker
[rootMineGi ~]# cat /etc/docker/daemon.json -EOF{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io],}EOF
[rootMineGi ~]# 3.4 启动并开机自启动
命令示例
systemctl status docker
systemctl daemon-reload
systemctl enable --now docker.service
systemctl status docker
输出结果
[rootMineGi ~]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: inactive (dead)Docs: https://docs.docker.com
[rootMineGi ~]# systemctl daemon-reload
[rootMineGi ~]# systemctl enable --now docker.service
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[rootMineGi ~]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)Active: active (running) since 三 2024-12-11 18:56:33 CST; 4s agoDocs: https://docs.docker.comMain PID: 1204 (dockerd)Tasks: 17Memory: 146.6MCGroup: /system.slice/docker.service├─1204 /usr/bin/dockerd└─1211 containerd --config /var/run/docker/containerd/containerd.toml12月 11 18:56:32 MineGi dockerd[1204]: time2024-12-11T18:56:32.06568024308:00 levelinfo ...ock
12月 11 18:56:32 MineGi dockerd[1204]: time2024-12-11T18:56:32.06570633108:00 levelinfo ...9s
12月 11 18:56:32 MineGi dockerd[1204]: time2024-12-11T18:56:32.95303229008:00 levelinfo ...y2
12月 11 18:56:32 MineGi dockerd[1204]: time2024-12-11T18:56:32.95402495308:00 levelinfo ...t.
12月 11 18:56:33 MineGi dockerd[1204]: time2024-12-11T18:56:33.24437431808:00 levelinfo ...ss
12月 11 18:56:33 MineGi dockerd[1204]: time2024-12-11T18:56:33.32129913808:00 levelinfo ...e.
12月 11 18:56:33 MineGi dockerd[1204]: time2024-12-11T18:56:33.35408383808:00 levelinfo ...1.0
12月 11 18:56:33 MineGi dockerd[1204]: time2024-12-11T18:56:33.35438280808:00 levelinfo ...on
12月 11 18:56:33 MineGi dockerd[1204]: time2024-12-11T18:56:33.39361667408:00 levelinfo ...ck
12月 11 18:56:33 MineGi systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.
[rootMineGi ~]# 二、Docker的相关目录
情况说明/var/lib/docker 是 Docker 引擎默认的工作目录用于存储 Docker 运行时的各种数据
注意事项二进制安装的docker多了一个containerd目录
命令示例
ll /var/lib/docker
输出结果
[rootMineGi ~]# ll /var/lib/docker
总用量 4
drwx--x--x 4 root root 138 12月 11 18:45 buildkit
drwx--x--- 2 root root 6 12月 11 18:45 containers
-rw------- 1 root root 36 12月 11 18:45 engine-id
drwx------ 3 root root 22 12月 11 18:45 image
drwxr-x--- 3 root root 19 12月 11 18:45 network
drwx--x--- 3 root root 40 12月 11 18:45 overlay2
drwx------ 4 root root 32 12月 11 18:45 plugins
drwx------ 2 root root 6 12月 11 18:45 runtimes
drwx------ 2 root root 6 12月 11 18:45 swarm
drwx------ 2 root root 6 12月 11 18:45 tmp
drwx-----x 2 root root 50 12月 11 18:45 volumes
[rootMineGi ~]# 目录/文件 说明 buildkit 这是用于构建镜像的工具 BuildKit 的工作目录包含构建镜像时使用的临时文件和缓存 containers 存放 Docker 容器的相关信息每个容器都有一个对应的目录包括容器的元数据、日志、进程信息等 engine-id 存放 Docker 引擎的唯一标识符用于标识不同的 Docker 引擎实例 image 存放 Docker 镜像的文件每个镜像都有一个对应的目录包括镜像的各个层和元数据信息 network 存放 Docker 网络的相关信息包括网络配置、状态等 overlay2 存放 Docker 使用的存储驱动 Overlay2 的数据包括镜像层、容器文件系统等 plugins 存放 Docker 插件的相关信息包括插件的执行文件、配置等 runtimes 存放 Docker 运行时的相关信息包括不同的运行时的配置、状态等 swarm 存放 Docker Swarm 集群的相关信息包括集群配置、状态等 tmp 用于存放临时文件的目录Docker 在运行过程中会在这里创建临时文件 volumes 存放 Docker 卷的数据包括卷的内容、元数据信息等
注意事项这些目录中的数据对于 Docker 引擎的正常运行非常重要因此在管理 Docker 环境时需要谨慎处理这些目录中的数据避免意外删除或修改导致系统故障或数据丢失
三、Docker的相关操作
1、Docker基础操作
1.1 查看docker的详细信息
命令示例
docker info
输出结果
[rootMineGi ~]# docker info |head
Client: Docker Engine - CommunityVersion: 26.1.4Context: defaultDebug Mode: falsePlugins:buildx: Docker Buildx (Docker Inc.)Version: v0.14.1Path: /usr/libexec/docker/cli-plugins/docker-buildxcompose: Docker Compose (Docker Inc.)Version: v2.27.1
[rootMineGi ~]# 1.2 查看docker的版本信息
命令示例
docker version
docker --version
输出结果
[rootMineGi ~]# docker version |head -18
Client: Docker Engine - CommunityVersion: 26.1.4API version: 1.45Go version: go1.21.11Git commit: 5650f9bBuilt: Wed Jun 5 11:32:04 2024OS/Arch: linux/amd64Context: defaultServer: Docker Engine - CommunityEngine:Version: 26.1.4API version: 1.45 (minimum version 1.24)Go version: go1.21.11Git commit: de5c9cfBuilt: Wed Jun 5 11:31:02 2024OS/Arch: linux/amd64Experimental: false
[rootMineGi ~]# docker --version
Docker version 26.1.4, build 5650f9b
[rootMineGi ~]# 1.3 查看docker的帮助信息
命令示例
# docker --help
docker help
docker image --help
输出结果
[
[rootMineGi ~]# docker help |headUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:run Create and run a new container from an imageexec Execute a command in a running containerps List containersbuild Build an image from a Dockerfile
[rootMineGi ~]# docker image --help |tail -5rm Remove one or more imagessave Save one or more images to a tar archive (streamed to STDOUT by default)tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGERun docker image COMMAND --help for more information on a command.
[rootMineGi ~]# 2、Docker镜像操作
2.1 搜索镜像
情况说明Docker创建容器前需要本地存在对应的镜像如果本地加载不到相关镜像Docker默认就会尝试从官方镜像仓库 https://hub.docker.com下载。使用docker search命令只能査找镜像镜像的标签无法査找因此如果需要査找docker标签需要从网页上访问镜像仓库https://hub.docker.com进行查找。目前无法search到镜像列表此操作可以略过。
命令格式docker search 关键字
docker search nginx #搜索nginx镜像
docker search centos #搜索centos镜像
2.2 获取镜像
情况说明搜索到符合需求的镜像可以使用docker pull命令从网络下载镜像到本地使用。
命令格式docker pull 仓库(镜像)名称[:标签]
情况说明对于Docker镜像来说如果下载镜像时不指定标签则默认会下载仓库中最新版本的镜像即选择标签为latest也可以通过指定的标签来下载特定版本的某一镜像。这里标签就是用来区分镜像版本的。
docker pull nginx #获取nginx镜像选择默认标签为latest
docker pull nginx:1.19.5 #获取nginx镜像选择指定标签为1.19.5
命令示例
docker pull nginx
docker pull nginx:1.19.5
输出结果从整个下载的过程可以看出镜像文件是由若干层Layer组成我们称为AUFS(联合文件系统)是实现增量保存于更新的基础下载过程中会输出镜像的各层信息。镜像下载到本地之后就可以随时使用该镜像了。
[rootMineGi ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
bc0965b23a04: Pull complete
650ee30bbe5e: Pull complete
8cc1569e58f5: Pull complete
362f35df001b: Pull complete
13e320bf29cd: Pull complete
7b50399908e1: Pull complete
57b64962dd94: Pull complete
Digest: sha256:fb197595ebe76b9c0c14ab68159fd3c08bd067ec62300583543f0ebda353b5be
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[rootMineGi ~]# docker pull nginx:1.19.5
1.19.5: Pulling from library/nginx
6ec7b7d162b2: Pull complete
bbce32568f49: Pull complete
5928664fb2b3: Pull complete
a85e904c7548: Pull complete
ac39958ca6b1: Pull complete
Digest: sha256:31de7d2fd0e751685e57339d2b4a4aa175aea922e592d36a7078d72db0a45639
Status: Downloaded newer image for nginx:1.19.5
docker.io/library/nginx:1.19.5
[rootMineGi ~]# 2.3 查看镜像
2.3.1 查看本地镜像信息
情况说明使用 docker images 命令查看下载到本地的所有镜像。
命令格式docker images 仓库名称[:标签]
docker images #查看所有的镜像
docker image -aq #只显示所有的镜像ID
docker images nginx #查看nginx的所有的镜像
docker images nginx:1.19.5 #查看nginx的指定版本的镜像#-a列出所有镜像
#-q只显示镜像的ID
命令示例
docker images
docker image -aq
docker images nginx
docker images nginx:1.19.5
输出结果
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker images -aq
66f8bdd3810c
7baf28ea91eb
[rootMineGi ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker images nginx:1.19.5
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 信息 说明 REPOSITORY 镜像属于的仓库 TAG 镜像的标签信息标记同一个仓库中的不同镜像 IMAGE ID 镜像的唯一ID 号唯一标识一个镜像 CREATED 镜像创建时间 VIRTUAL SIZE 镜像大小
完整的镜像名称docker.io/library/ginx:1.19.5
docker.io镜像的访问域名
library项目名称
nginx:1.19.5镜像名称:标签(版本)
2.3.2 查看镜像文件信息
情况说明查看下载的镜像文件信息
命令示例
ls /var/lib/docker/image/overlay2/
cat /var/lib/docker/image/overlay2/repositories.json
输出结果
[rootMineGi ~]# ls /var/lib/docker/image/overlay2/
distribution imagedb layerdb repositories.json
[rootMineGi ~]# cat /var/lib/docker/image/overlay2/repositories.json
{Repositories:{nginx:{nginx:1.19.5:sha256:7baf28ea91eb59a68b3b3a82873d413dc9f1b6e0b89d5ad627ad80154f546be5,nginx:latest:sha256:66f8bdd3810c96dc5c28aec39583af731b34a2cd99471530f53c8794ed5b423e,nginxsha256:31de7d2fd0e751685e57339d2b4a4aa175aea922e592d36a7078d72db0a45639:sha256:7baf28ea91eb59a68b3b3a82873d413dc9f1b6e0b89d5ad627ad80154f546be5,nginxsha256:fb197595ebe76b9c0c14ab68159fd3c08bd067ec62300583543f0ebda353b5be:sha256:66f8bdd3810c96dc5c28aec39583af731b34a2cd99471530f53c8794ed5b423e}}}[rootMineGi ~]# 2.3.3 获取指定镜像的详细信息
情况说明根据镜像的名称或唯一标识 ID 号获取镜像详细信息
命令格式docker inspect 镜像名称或镜像ID号
命令示例
docker inspect nginx
docker inspect nginx:1.19.5
docker images
docker inspect 7baf28ea91eb
输出结果镜像的详细信息中包括创建时间、系统版本、主机名、域名、用户、卷、标签、操作系统、设备ID等各种信息。
[rootMineGi ~]# docker inspect nginx |head
[{Id: sha256:66f8bdd3810c96dc5c28aec39583af731b34a2cd99471530f53c8794ed5b423e,RepoTags: [nginx:latest],RepoDigests: [nginxsha256:fb197595ebe76b9c0c14ab68159fd3c08bd067ec62300583543f0ebda353b5be],Parent: ,
[rootMineGi ~]# docker inspect nginx:1.19.5 |head -5
[{Id: sha256:7baf28ea91eb59a68b3b3a82873d413dc9f1b6e0b89d5ad627ad80154f546be5,RepoTags: [nginx:1.19.5
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker inspect 7baf28ea91eb |head -5
[{Id: sha256:7baf28ea91eb59a68b3b3a82873d413dc9f1b6e0b89d5ad627ad80154f546be5,RepoTags: [nginx:1.19.5
[rootMineGi ~]# 2.3.4 查看镜像的构建历史
命令示例
docker history nginx
输出结果
[rootMineGi ~]# docker history nginx
IMAGE CREATED CREATED BY SIZE COMMENT
66f8bdd3810c 2 weeks ago CMD [nginx -g daemon off;] 0B buildkit.dockerfile.v0
missing 2 weeks ago STOPSIGNAL SIGQUIT 0B buildkit.dockerfile.v0
missing 2 weeks ago EXPOSE map[80/tcp:{}] 0B buildkit.dockerfile.v0
missing 2 weeks ago ENTRYPOINT [/docker-entrypoint.sh] 0B buildkit.dockerfile.v0
missing 2 weeks ago COPY 30-tune-worker-processes.sh /docker-ent… 4.62kB buildkit.dockerfile.v0
missing 2 weeks ago COPY 20-envsubst-on-templates.sh /docker-ent… 3.02kB buildkit.dockerfile.v0
missing 2 weeks ago COPY 15-local-resolvers.envsh /docker-entryp… 389B buildkit.dockerfile.v0
missing 2 weeks ago COPY 10-listen-on-ipv6-by-default.sh /docker… 2.12kB buildkit.dockerfile.v0
missing 2 weeks ago COPY docker-entrypoint.sh / # buildkit 1.62kB buildkit.dockerfile.v0
missing 2 weeks ago RUN /bin/sh -c set -x groupadd --syst… 117MB buildkit.dockerfile.v0
missing 2 weeks ago ENV DYNPKG_RELEASE1~bookworm 0B buildkit.dockerfile.v0
missing 2 weeks ago ENV PKG_RELEASE1~bookworm 0B buildkit.dockerfile.v0
missing 2 weeks ago ENV NJS_RELEASE1~bookworm 0B buildkit.dockerfile.v0
missing 2 weeks ago ENV NJS_VERSION0.8.7 0B buildkit.dockerfile.v0
missing 2 weeks ago ENV NGINX_VERSION1.27.3 0B buildkit.dockerfile.v0
missing 2 weeks ago LABEL maintainerNGINX Docker Maintainers d… 0B buildkit.dockerfile.v0
missing 2 weeks ago # debian.sh --arch amd64 out/ bookworm … 74.8MB debuerreotype 0.15
[rootMineGi ~]# 2.4 导出镜像
情况说明当需要把一台机器上的镜像迁移到另一台机器上的时候可以将镜像保存成本地文件这一个过程叫做存出导出镜像可以使用docker save命令进行存出操作。之后就可以复制该文件到其他机器
命令格式docker save -o 存储的文件名 被存储的镜像名
命令示例如果导出镜像的时候不指定标签默认为导出该镜像的所有标签
ls
docker save -o nginx-all.tar nginx
docker save -o nginx-latest.tar nginx:latest
docker save -o nginx-1.19.5.tar nginx:1.19.5
ll
ls -lh
docker images
输出结果
[rootMineGi ~]# ls
[rootMineGi ~]# docker save -o nginx-all.tar nginx
[rootMineGi ~]# docker save -o nginx-latest.tar nginx:latest
[rootMineGi ~]# docker save -o nginx-1.19.5.tar nginx:1.19.5
[rootMineGi ~]# ll
总用量 650420
-rw------- 1 root root 137089024 12月 11 19:31 nginx-1.19.5.tar
-rw------- 1 root root 333010432 12月 11 19:31 nginx-all.tar
-rw------- 1 root root 195927040 12月 11 19:31 nginx-latest.tar
[rootMineGi ~]# ls -lh
总用量 636M
-rw------- 1 root root 131M 12月 11 19:31 nginx-1.19.5.tar
-rw------- 1 root root 318M 12月 11 19:31 nginx-all.tar
-rw------- 1 root root 187M 12月 11 19:31 nginx-latest.tar
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 2.5 添加标签
情况说明为本地的镜像添加新的标签
命令格式docker tag 镜像名:[原标签] 镜像名:[新标签]
docker tag nginx test-tag-nginx #为本地的nginx镜像添加新标签没有指定新标签使用默认的latest标签
docker tag nginx test-tag-nginx:web01 #两个都修改了这里的镜像名和标签可以自定义
docker tag nginx:1.19.5 test-tage-nginx #没有指定新标签使用默认的latest标签如果之前有latest标签会被替换
docker tag nginx:1.19.5 test-tage-nginx:web02 #两个都修改了标签不是复制镜像本身只是一个别名
命令示例
docker images
docker tag nginx test-tag-nginx
docker tag nginx test-tag-nginx:web01
docker images
docker tag nginx:1.19.5 test-tag-nginx
docker tag nginx:1.19.5 test-tag-nginx:web02
docker images
输出结果如果没指定标签会替换之前的latest
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker tag nginx test-tag-nginx
[rootMineGi ~]# docker tag nginx test-tag-nginx:web01
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
test-tag-nginx latest 66f8bdd3810c 2 weeks ago 192MB
test-tag-nginx web01 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker tag nginx:1.19.5 test-tag-nginx
[rootMineGi ~]# docker tag nginx:1.19.5 test-tag-nginx:web02
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
test-tag-nginx web01 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
test-tag-nginx latest 7baf28ea91eb 4 years ago 133MB
test-tag-nginx web02 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 2.6 删除镜像
情况说明使用docker rmi命令可以删除多余的镜像。删除镜像的操作有两种方法使用镜像的标签或者使用镜像的ID删除镜像。
命令格式
docker rmi 镜像名称:标签 #当一个镜像有多个标签时只是删除其中指定的标签如果没指定标签默认会删除latestdocker rmi 镜像ID号 #会彻底删除该ID号的镜像如果镜像ID重复时不让删除可以使用-f强制删除
docker images #查看镜像信息
docker rmi nginx #删除nginx的镜像不指定标签默认为latest
docker rmi 7baf28ea91eb #使用重复的镜像ID号会提示Error
docker images -aq #只列出所有镜像ID号
docker rmi docker images -aq #批量删除重复的镜像ID还是无法删除
docker images #查看镜像信息
docker rmi docker images -aq -f #使用-f选项强制删除
docker images #查看镜像信息命令示例
docker images
docker rmi nginx
docker rmi 7baf28ea91eb
docker images -aq
docker rmi docker images -aq
docker images
docker rmi docker images -aq -f
docker images输出结果
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
test-tag-nginx web01 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
test-tag-nginx latest 7baf28ea91eb 4 years ago 133MB
test-tag-nginx web02 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker rmi nginx
Untagged: nginx:latest
[rootMineGi ~]# docker rmi nginx
Error response from daemon: No such image: nginx:latest
[rootMineGi ~]# docker rmi 7baf28ea91eb
Error response from daemon: conflict: unable to delete 7baf28ea91eb (must be forced) - image is referenced in multiple repositories
[rootMineGi ~]# docker images -aq
66f8bdd3810c
7baf28ea91eb
7baf28ea91eb
7baf28ea91eb
[rootMineGi ~]# docker rmi docker images -aq
Untagged: test-tag-nginx:web01
Deleted: sha256:66f8bdd3810c96dc5c28aec39583af731b34a2cd99471530f53c8794ed5b423e
Deleted: sha256:861885804cea72da66a857f56e2d08ef29d8db273745d46e9f192553362b943d
Deleted: sha256:bced374ce582002f98d19b5a73a4acd9945fed7ed80222c4a3f9ecd6debdfbea
Deleted: sha256:b3057aca5d4f2d9f34b63f2fa532d7164c42daf3c6741ab3baef4afee5310579
Deleted: sha256:721c11eb2640980a3d5de69cb15c3f86484cf9070ef623720a54d03f699656dc
Deleted: sha256:f141f959fda67ad077ac28920ad56ca36ef7cb54fe437559a18d62075afc2cd6
Deleted: sha256:d0edcb20c85bbe98d67cb15ed1ec313958d9fff0834e5cf8aa64cb30e48790c7
Deleted: sha256:c0f1022b22a9b36851b358f44e5475e39d166e71a8073cf53c894a299239b1c5
Error response from daemon: conflict: unable to delete 7baf28ea91eb (must be forced) - image is referenced in multiple repositories
Error response from daemon: conflict: unable to delete 7baf28ea91eb (must be forced) - image is referenced in multiple repositories
Error response from daemon: conflict: unable to delete 7baf28ea91eb (must be forced) - image is referenced in multiple repositories
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
test-tag-nginx latest 7baf28ea91eb 4 years ago 133MB
test-tag-nginx web02 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker rmi docker images -aq -f
Untagged: nginx:1.19.5
Untagged: test-tag-nginx:latest
Untagged: test-tag-nginx:web02
Deleted: sha256:7baf28ea91eb59a68b3b3a82873d413dc9f1b6e0b89d5ad627ad80154f546be5
Deleted: sha256:76568a8765bf6788bab06a4c283b5ca6669def93eba5c1f0fc887b159f6e1dc1
Deleted: sha256:ef3c14608491697162ea3cc095a1c0c27cd6d4053aa3ea09f91c756379ebc8d1
Deleted: sha256:b538d73544a75eec8322716997990d289f2581169a82b763a0e1037c669f167d
Deleted: sha256:89942a8c1027ff865a14b0a807142453493474831ebc47c312f05ec640b16254
Deleted: sha256:87c8a1d8f54f3aa4e05569e8919397b65056aa71cdf48b7f061432c98475eee9
Error response from daemon: No such image: 7baf28ea91eb:latest
Error response from daemon: No such image: 7baf28ea91eb:latest
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[rootMineGi ~]# 情况说明
当一个镜像有多个标签的时候docker rmi命令只是删除该镜像多个标签中的指定标签不会影响镜像文件相当于只是删除了镜像的一个别名而己但该镜像只剩下一个标签的时候就要小心了再使用删除命令就会彻底删除该镜像。当使用docker rmi命令后面跟上镜像的ID号时必须确保该镜像没有被容器使用才能进行删除时系统会先删除掉所有指向该镜像的标签然后除该镜像文件本身。如果该镜像已经被容器使用正确的做法是先删除依赖该镜像的所有容器再去除镜像。
2.7 导入镜像
情况说明将之前存出的镜像或从其它方法获取的镜像文件存入到本地镜像列表中这一过程叫做载入导入镜像
命令格式
docker load 存出的文件
docker load -i 存出的文件
docker load --input 存出的文件
2.7.1 本地服务器镜像导入
命令示例
ll
docker images
docker load nginx-latest.tar
docker load -i nginx-1.19.5.tar
docker images
输出结果
[rootMineGi ~]# ll
总用量 650420
-rw------- 1 root root 137089024 12月 11 19:31 nginx-1.19.5.tar
-rw------- 1 root root 333010432 12月 11 19:31 nginx-all.tar
-rw------- 1 root root 195927040 12月 11 19:31 nginx-latest.tar
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[rootMineGi ~]# docker load nginx-latest.tar
c0f1022b22a9: Loading layer 77.89MB/77.89MB
fc00b055de35: Loading layer 118MB/118MB
2c3a053d7b67: Loading layer 3.584kB/3.584kB
b060cc3bd13c: Loading layer 4.608kB/4.608kB
8aa4787aa17a: Loading layer 2.56kB/2.56kB
c28e0f7d0cc5: Loading layer 5.12kB/5.12kB
d32d820bcf1c: Loading layer 7.168kB/7.168kB
Loaded image: nginx:latest
[rootMineGi ~]# docker load -i nginx-1.19.5.tar
87c8a1d8f54f: Loading layer 72.5MB/72.5MB
2111bafa5ce4: Loading layer 64.55MB/64.55MB
f3ee98cb305c: Loading layer 3.072kB/3.072kB
997bdb5b26cc: Loading layer 4.096kB/4.096kB
ea6033164031: Loading layer 3.584kB/3.584kB
Loaded image: nginx:1.19.5
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 2.7.2 远程服务器镜像导入
命令示例
hostname -I
ls
scp 10.4.7.11:/root/nginx-all.tar ./
ls
docker images
docker load --input nginx-all.tar
docker images
输出结果
[rootMineGi ~]# hostname -I
10.4.7.12 172.17.0.1
[rootMineGi ~]# ls
docker docker-26.1.0.tgz
[rootMineGi ~]# scp 10.4.7.11:/root/nginx-all.tar ./
The authenticity of host 10.4.7.11 (10.4.7.11) cant be established.
ECDSA key fingerprint is SHA256:gWbFfV9d3KPbh3aZzedG04X6pxEhITjO0bESQoL98w.
ECDSA key fingerprint is MD5:15:28:ac:c6:98:7f:65:87:2d:7a:45:54:e1:d4:57:f5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 10.4.7.11 (ECDSA) to the list of known hosts.
root10.4.7.11s password:
nginx-all.tar 100% 318MB 36.6MB/s 00:08
[rootMineGi ~]# ls
docker docker-26.1.0.tgz nginx-all.tar
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[rootMineGi ~]# docker load --input nginx-all.tar
87c8a1d8f54f: Loading layer 72.5MB/72.5MB
2111bafa5ce4: Loading layer 64.55MB/64.55MB
f3ee98cb305c: Loading layer 3.072kB/3.072kB
997bdb5b26cc: Loading layer 4.096kB/4.096kB
ea6033164031: Loading layer 3.584kB/3.584kB
Loaded image: nginx:1.19.5
c0f1022b22a9: Loading layer 77.89MB/77.89MB
fc00b055de35: Loading layer 118MB/118MB
2c3a053d7b67: Loading layer 3.584kB/3.584kB
b060cc3bd13c: Loading layer 4.608kB/4.608kB
8aa4787aa17a: Loading layer 2.56kB/2.56kB
c28e0f7d0cc5: Loading layer 5.12kB/5.12kB
d32d820bcf1c: Loading layer 7.168kB/7.168kB
Loaded image: nginx:latest
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 2.8 上传镜像
情况说明本地存储的镜像越来越多就需要指定一个专门存放这些镜像的地方也就是仓库了。目前比较方便的就是公共仓库默认上传到Docker Hub官方仓库需要注册使用公共仓库的账号可以使用docker login命令来输入用户名、密码和邮箱来完成注册和登录。在上传镜像之前需要对本地镜像添加新的标签然后再使用docker push命令进行上传。由于Docker Hub官方仓库无法登录我们可以使用国内的镜像仓库比如阿里云的可以免费使用个人仓库。后期也可以搭建个人镜像仓库。
命令格式docker push 仓名称:标签
阿里云容器镜像服务https://cr.console.aliyun.com/
2.8.1 阿里云容器镜像服务平台
1登录阿里云容器镜像服务平台
情况说明注册并登录阿里云容器镜像服务平台点击个人实例。 2命名空间
情况说明根据个人需求创建命名空间 3镜像仓库
情况说明创建镜像仓库可选 4操作指南
1. 登录阿里云Docker Registry
$ docker login --usernamemineg registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。2. 从Registry中拉取镜像
$ docker pull registry.cn-beijing.aliyuncs.com/mg-docker/nginx:[镜像版本号]3. 将镜像推送到Registry
$ docker login --usernamemineg registry.cn-beijing.aliyuncs.com
$ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/mg-docker/nginx:[镜像版本号]
$ docker push registry.cn-beijing.aliyuncs.com/mg-docker/nginx:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。4. 选择合适的镜像仓库地址
从ECS推送镜像时可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
如果您使用的机器位于VPC网络请使用 registry-vpc.cn-beijing.aliyuncs.com 作为Registry的域名登录。5. 示例
使用docker tag命令重命名镜像并将它通过专有网络地址推送至Registry。
$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
registry.aliyuncs.com/acs/agent 0.7-dfb6816 37bb9c63c8b2 7 days ago 37.89 MB
$ docker tag 37bb9c63c8b2 registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
使用 docker push 命令将该镜像推送至远程。
$ docker push registry-vpc.cn-beijing.aliyuncs.com/acs/agent:0.7-dfb6816
5设置固定密码
情况说明可以设置登录密码用于服务器登录 2.8.2 将本地镜像推送或拉取阿里云平台仓库
1登录阿里云Docker Registry
$ docker login --usernamemineg registry.cn-beijing.aliyuncs.com
用于登录的用户名为阿里云账号全名密码为开通服务时设置的密码。
您可以在访问凭证页面修改凭证密码。
命令示例
docker login --usernamemineg registry.cn-beijing.aliyuncs.com
输出结果
[rootMineGi ~]# docker login --usernamemineg registry.cn-beijing.aliyuncs.com
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded
[rootMineGi ~]# 2将镜像推送到Registry
$ docker tag [ImageId] registry.cn-beijing.aliyuncs.com/mg-docker/nginx:[镜像版本号]
$ docker push registry.cn-beijing.aliyuncs.com/mg-docker/nginx:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。
命令示例
docker images
docker tag nginx:1.19.5 registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
docker images
docker push registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
输出结果
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker tag nginx:1.19.5 registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker push registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
The push refers to repository [registry.cn-beijing.aliyuncs.com/mg-docker/nginx]
ea6033164031: Pushed
997bdb5b26cc: Pushed
f3ee98cb305c: Pushed
2111bafa5ce4: Pushed
87c8a1d8f54f: Pushed
1.19.5: digest: sha256:e0f65235cc7bca84baf18bb5146faa7413225bfd1013b7c72f0b85b153deccb6 size: 1362
[rootMineGi ~]# 3从Registry中拉取镜像
$ docker pull registry.cn-beijing.aliyuncs.com/mg-docker/nginx:[镜像版本号]
命令示例
docker rmi -f docker images -aq
docker images
docker pull registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
docker images输出结果
[rootMineGi ~]# docker rmi -f docker images -aq
Untagged: nginx:latest
Deleted: sha256:66f8bdd3810c96dc5c28aec39583af731b34a2cd99471530f53c8794ed5b423e
Deleted: sha256:861885804cea72da66a857f56e2d08ef29d8db273745d46e9f192553362b943d
Deleted: sha256:bced374ce582002f98d19b5a73a4acd9945fed7ed80222c4a3f9ecd6debdfbea
Deleted: sha256:b3057aca5d4f2d9f34b63f2fa532d7164c42daf3c6741ab3baef4afee5310579
Deleted: sha256:721c11eb2640980a3d5de69cb15c3f86484cf9070ef623720a54d03f699656dc
Deleted: sha256:f141f959fda67ad077ac28920ad56ca36ef7cb54fe437559a18d62075afc2cd6
Deleted: sha256:d0edcb20c85bbe98d67cb15ed1ec313958d9fff0834e5cf8aa64cb30e48790c7
Deleted: sha256:c0f1022b22a9b36851b358f44e5475e39d166e71a8073cf53c894a299239b1c5
Untagged: nginx:1.19.5
Untagged: registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
Untagged: registry.cn-beijing.aliyuncs.com/mg-docker/nginxsha256:e0f65235cc7bca84baf18bb5146faa7413225bfd1013b7c72f0b85b153deccb6
Deleted: sha256:7baf28ea91eb59a68b3b3a82873d413dc9f1b6e0b89d5ad627ad80154f546be5
Deleted: sha256:76568a8765bf6788bab06a4c283b5ca6669def93eba5c1f0fc887b159f6e1dc1
Deleted: sha256:ef3c14608491697162ea3cc095a1c0c27cd6d4053aa3ea09f91c756379ebc8d1
Deleted: sha256:b538d73544a75eec8322716997990d289f2581169a82b763a0e1037c669f167d
Deleted: sha256:89942a8c1027ff865a14b0a807142453493474831ebc47c312f05ec640b16254
Deleted: sha256:87c8a1d8f54f3aa4e05569e8919397b65056aa71cdf48b7f061432c98475eee9
Error response from daemon: No such image: 7baf28ea91eb:latest
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
[rootMineGi ~]# docker pull registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
1.19.5: Pulling from mg-docker/nginx
6ec7b7d162b2: Pull complete
bbce32568f49: Pull complete
5928664fb2b3: Pull complete
a85e904c7548: Pull complete
ac39958ca6b1: Pull complete
Digest: sha256:e0f65235cc7bca84baf18bb5146faa7413225bfd1013b7c72f0b85b153deccb6
Status: Downloaded newer image for registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
registry.cn-beijing.aliyuncs.com/mg-docker/nginx:1.19.5
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 3、Docker容器操作
情况说明容器是镜像的一个运行实例是独立运行的一个或一组应用以及它们所必需的运行环境包括文件系统、系统类库、shell 环境等。镜像是只读模板而容器会给这个只读模板一个额外的可写层。
3.1 创建与运行与查看容器
3.1.1 创建新的容器
情况说明使用docker create创建的新容器默认处于停止状态不运行任何程序需要在其中发起一个进程来启动容器需要注意的是如果创建的新容器所使用的镜像本地没有的话会自动从指定的仓库中拉取镜像。
命令格式docker create [选项]... 镜像名称 镜像运行的程序 常用选项
-i让容器的输入保持打开
-t让 Docker 分配一个伪终端 tty
-d守护进程形式运行
-it合起来实现和容器交互的作用运行一个交互式会话 shell
#创建的nginx容器默认处于停止状态不运行任何程序
docker create -it nginx:latest /bin/bash
命令示例使用docker create命令创建新容器后会返回一个唯一的ID
docker images
docker create -it alpine:latest /bin/sh
docker create -it busybox /bin/sh
docker images
输出结果
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker create -it alpine:latest /bin/sh
Unable to find image alpine:latest locally
latest: Pulling from library/alpine
38a8310d387e: Pull complete
Digest: sha256:21dc6063fd678b478f57c0e13f47560d0ea4eeba26dfc947b2a4f81f686b9f45
Status: Downloaded newer image for alpine:latest
17383977b9ecf4d9bac1c17893fe077bf80fb6a28281bfd7b92d65035f4b416a
[rootMineGi ~]# docker create -it busybox /bin/sh
Unable to find image busybox:latest locally
latest: Pulling from library/busybox
9c0abc9c5bd3: Pull complete
Digest: sha256:2919d0172f7524b2d8df9e50066a682669e6d170ac0f6a49676d54358fe970b5
Status: Downloaded newer image for busybox:latest
3939281048a0b0a352aedab55c12798722bd44062fe771fd88be0295f57229ac
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 4048db5d3672 6 days ago 7.84MB
busybox latest af4709625109 2 months ago 4.27MB
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 3.1.2 查看容器的状态
情况说明可以使用docker ps命令来查看所有运行中的容器的运行状态。添加-a选项可以列出系统中所有的容器的状态。
#查看容器状态
docker ps #不加-a选项只能查看正在运行状态的容器
docker ps -a #加-a选项查看当前所有容器
docker ps -l #-l只显示最近一次运行的容器
命令示例
docker ps
docker ps -a
输出结果
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 32 seconds ago Created nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 52 seconds ago Created beautiful_merkle
[rootMineGi ~]# 情况说明输出信息显示容器的ID号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射。其中状态一栏为空表示当前的容器处于停止状态。 标识 说明 CONTAINER ID 容器的ID号 IMAGE 加载的镜像 COMMAND 运行的程序 CREATED 创建时间 STATUS 当前的状态 PORTS 端口映射 NAMES 名称
3.1.3 运行与关闭容器
情况说明开启运行、重启和关闭容器
命令格式docker start|restart|stop 容器的ID/名称#使用docker create 创建新容器需要 docker start 再启动该容器
docker start 1a82cb80f1b4 #启动指定ID的容器
docker restart 容器名称 #重启指定名称的容器
docker stop 容器名称 #关闭指定名称的容器命令示例
docker ps -a
docker start 3939281048a0
docker start beautiful_merkle
docker ps
docker ps -a
输出结果容器启动后可以看到容器状态一栏已经变为UP表示容器已经处于启动状态。
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 32 seconds ago Created nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 52 seconds ago Created beautiful_merkle
[rootMineGi ~]# docker start 3939281048a0
3939281048a0
[rootMineGi ~]# docker start beautiful_merkle
beautiful_merkle
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 2 minutes ago Up 16 seconds nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 2 minutes ago Up 6 seconds beautiful_merkle
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 2 minutes ago Up 20 seconds nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 2 minutes ago Up 11 seconds beautiful_merkle
[rootMineGi ~]# 3.1.4 查看容器的信息
情况说明根据容器的唯一标识 ID 号获取容器详细信息
命令格式docker inspect 容器ID号
命令示例
docker ps
docker inspect 3939281048a0
输出结果
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 3 minutes ago Up About a minute nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 3 minutes ago Up About a minute beautiful_merkle
[rootMineGi ~]# docker inspect 3939281048a0 |head
[{Id: 3939281048a0b0a352aedab55c12798722bd44062fe771fd88be0295f57229ac,Created: 2024-12-12T02:26:30.170696152Z,Path: /bin/sh,Args: [],State: {Status: running,Running: true,Paused: false,
[rootMineGi ~]# 3.2 创建并运行新的容器
情况说明执行 docker run 命令 等同于先执行 docker create 命令再执行 docker start 命令
命令格式docker run [选项]... 镜像名称 镜像运行的程序 # docker run -it centos /bin/bash
docker将docker后面的命令交给docker client进行处理
run创建并运行:createstart
-it分配交互式终端并保证终端输入打开
centos:容器启动的镜像
/bin/bash解释器或者容器启动后运行的命令
注意事项容器是一个与其中运行的 shell 命令共存亡的终端命令运行容器运行 命令结束容器退出
当利用 docker run 来创建容器时 Docker 在后台的标准运行过程是
检查本地是否存在指定的镜像。当镜像不存在时会从公有仓库下载利用镜像创建并启动一个容器分配一个文件系统给容器在只读的镜像层外面挂载一层可读写层从宿主主机配置的网桥接口中桥接一个虚拟机接口到容器中分配一个地址池中的 IP 地址给容器执行用户指定的应用程序执行完毕后容器被终止运行 3.2.1 创建并启动容器一次性运行
情况说明docker 容器默认会把容器内部第一个进程也就是 pid1 的程序作为docker容器是否正在运行的依据如果docker容器中 pid 1 的进程挂了那么docker容器便会直接退出也就是说Docker容器中必须有一个前台进程否则认为容器已经挂掉。例如启动一个名为centos:7的Docker容器中运行/usr/bin/bash命令并且在bash命令中执行ls /mnt命令。具体来说它会列出/mnt目录下的内容
#创建并启动容器
docker run centos:7 /usr/bin/bash -c ls -ld /mnt#此时会发现创建了一个新容器并启动执行一条 shell 命令之后就停止了
docker ps -a 命令示例创建并启动容器只运行cat /etc/issue命令后容器就停止运行了
docker ps -a
docker run alpine /bin/sh -c cat /etc/issue
docker ps -a
输出结果
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 11 minutes ago Up 9 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 11 minutes ago Up 9 minutes beautiful_merkle
[rootMineGi ~]# docker run alpine /bin/sh -c cat /etc/issue
Welcome to Alpine Linux 3.21
Kernel \r on an \m (\l)[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ab9144c652cd alpine /bin/sh -c cat /et… 7 seconds ago Exited (0) 6 seconds ago hungry_engelbart
3939281048a0 busybox /bin/sh 11 minutes ago Up 10 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 12 minutes ago Up 9 minutes beautiful_merkle
[rootMineGi ~]# 3.2.2 创建并启动容器持续性运行
情况说明如果想要创建在后台持续运行的容器需要在docker run命令之后添加 -d 选项让Docker容器以守护形式在后台运行。并且容器所运行的程序不能结束。
#运行执行一个死循环的程序的容器
docker run -d centos:7 /usr/bin/bash -c while true;do echo hello;done#可以看出容器始终处于 UP运行状态
docker ps -a
命令示例创建并启动容器能在后台持续运行该容器
docker ps
docker run -d alpine /bin/sh -c while true;do echo hello;done
docker ps
输出结果
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 12 minutes ago Up 11 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 13 minutes ago Up 11 minutes beautiful_merkle
[rootMineGi ~]# docker run -d alpine /bin/sh -c while true;do echo hello;done
a298d9302938e72ff3c35f4ebc8c5f16659f69726e0c26fafef62ff0b044573f
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a298d9302938 alpine /bin/sh -c while t… 6 seconds ago Up 6 seconds adoring_tesla
3939281048a0 busybox /bin/sh 13 minutes ago Up 11 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 13 minutes ago Up 11 minutes beautiful_merkle
[rootMineGi ~]# 情况说明此时的CPU利用率过高可能会导致卡顿等问题
命令示例
# top
top -b -n 1 top_output.txt
head top_output.txt
docker ps
docker stop a298d9302938输出结果
[rootMineGi ~]# top -b -n 1 top_output.txt
[rootMineGi ~]# head top_output.txt
top - 10:40:45 up 2:50, 2 users, load average: 3.44, 1.04, 0.40
Tasks: 116 total, 2 running, 114 sleeping, 0 stopped, 0 zombie
%Cpu(s): 53.1 us, 40.6 sy, 0.0 ni, 6.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 2027900 total, 71280 free, 282448 used, 1674172 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 1567536 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND942 root 20 0 1776908 80908 24860 S 93.8 4.0 2:10.23 dockerd3547 root 20 0 1624 104 56 R 81.2 0.0 0:54.43 sh3527 root 20 0 1236192 8836 4088 S 12.5 0.4 0:07.78 containerd-shim
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a298d9302938 alpine /bin/sh -c while t… About a minute ago Up About a minute adoring_tesla
3939281048a0 busybox /bin/sh 14 minutes ago Up 12 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 14 minutes ago Up 12 minutes beautiful_merkle
[rootMineGi ~]# docker stop a298d9302938
a298d9302938
[rootMineGi ~]# 3.2.3 创建容器时指定容器名称并持续运行容器
# 创建容器时指定容器名称并持续运行容器
docker run -itd --name centos7 centos:7 /bin/bash
命令示例
docker ps
docker run -itd --name alpine-test alpine /bin/sh
docker ps
输出结果
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3939281048a0 busybox /bin/sh 15 minutes ago Up 14 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 16 minutes ago Up 13 minutes beautiful_merkle
[rootMineGi ~]# docker run -itd --name alpine-test alpine /bin/sh
64a901fb68b9661850f72464210ffa8c20dcf5b1d7a3ae421ba45eb9725e9e04
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64a901fb68b9 alpine /bin/sh 2 seconds ago Up 1 second alpine-test
3939281048a0 busybox /bin/sh 17 minutes ago Up 15 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 17 minutes ago Up 15 minutes beautiful_merkle
[rootMineGi ~]# 3.3 容器的生命周期 状态 说明 Created已创建 当你使用docker create命令创建一个容器时容器就处于这个状态。在这个阶段容器已经被创建但还没有被启动 Running运行中 当你使用docker start命令启动一个容器时容器进入运行状态。容器中的进程正在运行并且可以与之交互 Paused已暂停 在某些情况下你可以暂停一个正在运行的容器这样容器中的所有进程会被暂停。容器处于暂停状态时它的状态被冻结但资源仍然被保留 Restarting重启中 当你使用docker restart命令重启一个容器时容器会进入重启状态。在这个阶段容器的进程会被停止然后重新启动 Exited已退出 当容器中的主要进程结束或者容器被手动停止时容器会进入已退出状态。在这个阶段容器不再运行任何进程 Dead已终止 当Docker检测到容器中的主要进程异常退出时容器会被标记为已终止状态。这通常发生在容器内部发生严重错误或者主进程意外终止的情况下 Removed已移除 当你使用docker rm命令删除一个容器时容器会被标记为已移除状态。在这个阶段容器的所有数据和元数据都被删除不再存在于系统中
3.4 容器的进入操作
情况说明需要进入容器进行相应操作时可以使用docker exec命令或者docker attach不推荐命令进入运行着的容器。
3.4.1 进入已存在的容器
命令格式docker exec -it 容器ID/名称 /bin/bash-i表示让容器的输入保持打开
-t表示让 Docker 分配一个伪终端
1进入指定ID的容器
docker ps -a #进入容器前必须保证该容器正在运行
docker exec -it 已退出的容器ID /bin/bash #指定ID的容器没有运行进入该容器会有提示
docker exec -it 已运行的容器ID /bin/bash #指定ID的容器容器正在运行可以直接进入
命令示例
docker ps -a
docker exec -it a298d9302938 /bin/sh
docker exec -it 64a901fb68b9 /bin/sh
输出结果
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64a901fb68b9 alpine /bin/sh About a minute ago Up About a minute alpine-test
a298d9302938 alpine /bin/sh -c while t… 5 minutes ago Exited (137) 3 minutes ago adoring_tesla
ab9144c652cd alpine /bin/sh -c cat /et… 6 minutes ago Exited (0) 6 minutes ago hungry_engelbart
3939281048a0 busybox /bin/sh 18 minutes ago Up 16 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 18 minutes ago Up 16 minutes beautiful_merkle
[rootMineGi ~]# docker exec -it a298d9302938 /bin/sh
Error response from daemon: container a298d9302938e72ff3c35f4ebc8c5f16659f69726e0c26fafef62ff0b044573f is not running
[rootMineGi ~]# docker exec -it 64a901fb68b9 /bin/sh
/ # 2进入容器后可对当前容器进行操作
命令示例
ls
hostname
ip r g 1
cat /etc/issue
输出结果
/ # ls
bin etc lib mnt proc run srv tmp var
dev home media opt root sbin sys usr
/ # hostname
64a901fb68b9
/ # ip r g 1
1.0.0.0 via 172.17.0.1 dev eth0 src 172.17.0.4
/ # cat /etc/issue
Welcome to Alpine Linux 3.21
Kernel \r on an \m (\l)/ # 3退出容器后该容器仍在运行状态中
命令示例用户可以通过所创建的终端来输入命令通过exit命令退出容器也可以使用Ctrl D快捷键退出
exit
docker ps
输出结果
/ # exit
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64a901fb68b9 alpine /bin/sh 6 minutes ago Up 6 minutes alpine-test
3939281048a0 busybox /bin/sh 23 minutes ago Up 21 minutes nostalgic_feistel
17383977b9ec alpine:latest /bin/sh 23 minutes ago Up 21 minutes beautiful_merkle
[rootMineGi ~]# 3.4.2 进入新的容器
#不加 -d 选项会创建容器后直接进入容器但是退出容器容器也会停止
docker run -it centos:7 bash
命令示例
docker rm -f $(docker ps -qa)
docker ps -a
docker run -it busybox /bin/sh
hostname
exit
docker ps
docker ps -a
输出结果
[rootMineGi ~]# docker rm -f $(docker ps -qa)
51805bdd89a6
64a901fb68b9
a298d9302938
ab9144c652cd
3939281048a0
17383977b9ec
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# docker run -it busybox /bin/sh
/ # hostname
fdb0d193b203
/ # exit
[rootMineGi ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdb0d193b203 busybox /bin/sh 21 seconds ago Exited (0) 13 seconds ago zealous_galileo
[rootMineGi ~]# 3.5 宿主机与容器之间的文件复制
3.5.1 将宿主机中的文件复制到容器内
情况说明怎么把宿主机的文件传入到容器内部可以使用docker cp命令
命令格式docker cp 宿主机的文件 容器id:容器目标路径
#把宿主机的当前目录的文件file.txt传入到指定ID的容器内部
docker cp file.txt a7760aac1e76:/mnt/
命令示例
echo Hello, This is a hostname host file |tee file.txt
docker ps -a
docker cp file.txt fdb0d193b203:/
docker start fdb0d193b203
docker exec -it fdb0d193b203 /bin/sh
ls /
cat /file.txt
输出结果
[rootMineGi ~]# echo Hello, This is a hostname host file |tee file.txt
Hello, This is a MineGi host file
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdb0d193b203 busybox /bin/sh 4 minutes ago Exited (0) 4 minutes ago zealous_galileo
[rootMineGi ~]# docker cp file.txt fdb0d193b203:/
Successfully copied 2.05kB to fdb0d193b203:/
[rootMineGi ~]# docker start fdb0d193b203
fdb0d193b203
[rootMineGi ~]# docker exec -it fdb0d193b203 /bin/sh
/ # ls /
bin etc home lib64 root tmp var
dev file.txt lib proc sys usr
/ # cat file.txt
Hello, This is a MineGi host file
/ # 3.5.2 将容器中的文件复制到宿主机中
命令格式docker cp 容器id:容器中的指定文件 宿主机的目标路径
#把指定ID容器内部的文件下载到宿主机的/opt/目录中
docker cp a7760aac1e76:/file.txt /opt/
命令示例
echo Hello, This is a hostname host file |tee file.txt
ls
cat file.txt
exit
docker cp fdb0d193b203:/file.txt /opt/
ls /opt/
cat /opt/file.txt
输出结果
/ # echo Hello, This is a hostname host file |tee file.txt
Hello, This is a fdb0d193b203 host file
/ # ls
bin etc home lib64 root tmp var
dev file.txt lib proc sys usr
/ # cat file.txt
Hello, This is a fdb0d193b203 host file
/ # exit
[rootMineGi ~]# docker cp fdb0d193b203:/file.txt /opt/
Successfully copied 2.05kB to /opt/
[rootMineGi ~]# ls /opt/
containerd file.txt
[rootMineGi ~]# cat /opt/file.txt
Hello, This is a fdb0d193b203 host file
[rootMineGi ~]# 3.6 容器的导出与导入
情况说明用户可以将任何一个Docker 容器从一台机器迁移到另一台机器。在迁移过程中首先需要将已经创建好的容器导出为文件可以使用docker export命令实现无论这个容器是处于运行状态还是停止状态均可导出。导出之后可将导出文件传输到其他机器通过相应的导入命令实现容器的迁移。但是这种方式不推荐使用因为使用这种方法导出的镜像没有完整的构建历史。
3.6.1 将容器导出成压缩包
命令格式docker export 容器ID/名称 压缩包名
docker export 7b16ecf90301 centos7.tar #将指定ID的容器导出成压缩包
命令示例
docker ps -a
docker export fdb0d193b203 busybox.tar
ls -lh busybox.tar
输出结果
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fdb0d193b203 busybox /bin/sh 9 minutes ago Up 4 minutes zealous_galileo
[rootMineGi ~]# docker export fdb0d193b203 busybox.tar
[rootMineGi ~]# ls -lh busybox.tar
-rw-r--r-- 1 root root 4.3M 12月 12 13:11 busybox.tar
[rootMineGi ~]# 3.6.2 导入容器镜像
情况说明导出的文件从A机器拷贝到B机器之后使用docker import 命令导入导入后会生成镜像但不会创建容器。
命令格式cat 压缩包名 | docker import – 镜像名称:标签cat centos7.tar | docker import - centos7:test #导入后会生成镜像但不会创建容器
命令示例
docker rm -f $(docker ps -qa)
docker ps -a
docker images
cat busybox.tar |docker import - busybox:test01
docker images
docker ps -a
输出结果
[rootMineGi ~]# docker rm -f $(docker ps -qa)
fdb0d193b203
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine latest 4048db5d3672 6 days ago 7.84MB
busybox latest af4709625109 2 months ago 4.27MB
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# cat busybox.tar |docker import - busybox:test01
sha256:202622f0cb02c8703c0681a5a3028b1c6692b5a6259cc1437c9fcd7bbe467198
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox test01 202622f0cb02 9 seconds ago 4.27MB
alpine latest 4048db5d3672 6 days ago 7.84MB
busybox latest af4709625109 2 months ago 4.27MB
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# 3.7 容器的删除操作
情况说明
如果删除一个正在运行的容器可以添加-f选项强制删除但是建议先将容器停止再做删除操作。这样可以防止误删除正在运行的容器Docker默认的存储目录为/var/lib/dockerDocker的镜像、容器、日志等内容全部都存储在此可以单独使用大容量的分区来存储这些内容并且一般选择建立LVM逻辑卷。从而避免Docker运行过程中存储目录容量不足
3.7.1 删除指定的容器
格式docker rm [-f] 容器ID/名称
docker rm e6cd1271b9a8 #删除已经终止状态的容器
docker rm 7bcc640be688 #删除正在运行的容器
docker rm -f 7bcc640be688 #强制删除正在运行的容器
命令示例
docker run -it busybox /bin/sh -c date
docker run -itd alpine /bin/sh
docker ps -a
docker rm c8fc8c4efa63
docker rm 580a867fb0de
docker rm -f 580a867fb0de
docker ps -a
输出结果
[rootMineGi ~]# docker run -it busybox /bin/sh -c date
Thu Dec 12 05:18:32 UTC 2024
[rootMineGi ~]# docker run -itd alpine /bin/sh
580a867fb0dee93ba24c42102ead166c88a02b8328f3a3f7a737bbb9d8d89434
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
580a867fb0de alpine /bin/sh 4 seconds ago Up 3 seconds jovial_dirac
c8fc8c4efa63 busybox /bin/sh -c date 24 seconds ago Exited (0) 23 seconds ago youthful_volhard
[rootMineGi ~]# docker rm c8fc8c4efa63
c8fc8c4efa63
[rootMineGi ~]# docker rm 580a867fb0de
Error response from daemon: cannot remove container /jovial_dirac: container is running: stop the container before removing or force remove
[rootMineGi ~]# docker rm 580a867fb0de -f
580a867fb0de
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[rootMineGi ~]# 3.7.2 批量删除多个容器
#批量停止所有的容器
方法一docker ps -a | awk NR2{print docker stop $1} | bash
方法二docker ps -a | awk NR2{print $1}| xargs docker stop
方法三docker stop docker ps -aq
#-a列出所有容器
#-q只显示容器的ID#批量删除所有容器
方法一docker ps -a | awk NR2{print docker rm $1} | bash
方法二docker ps -a | awk NR2{print $1}| xargs docker rm
方法三docker rm docker ps -aq#批量强制删除所有的容器无论是否处在运行状态
方法一docker ps -a | awk NR2{print docker rm -f $1} | bash
方法二docker ps -a | awk NR2{print $1}| xargs docker rm -f
方法三docker rm -f docker ps -aq#批量强制删除第二行后的容器无论是否处在运行状态
方法一docker ps -a | awk NR3{print docker rm -f $1} | bash
方法二docker ps -a | awk NR3{print $1}| xargs docker rm -f#批量强制删除第三行后且包括第三行的容器无论是否处在运行状态
法一docker ps -a | awk NR4{print docker rm -f $1} | bash
法二docker ps -a | awk NR4{print $1}| xargs docker rm -f
命令示例
docker ps -aq
for i in seq 3;do docker run -it busybox /bin/sh -c sleep 1;done
docker ps -aq
docker ps -a | awk NR2{print $1}
docker ps -a | awk NR2{print docker rm $1}
docker ps -a | awk NR2{print docker rm $1} |bash
docker ps -aq
输出结果
[rootMineGi ~]# docker ps -aq
[rootMineGi ~]# for i in seq 3;do docker run -it busybox /bin/sh -c sleep 1;done
[rootMineGi ~]# docker ps -aq
edb9daa034d9
273ca793da78
bbdb9ce93df8
[rootMineGi ~]# docker ps -a | awk NR2{print $1}
edb9daa034d9
273ca793da78
bbdb9ce93df8
[rootMineGi ~]# docker ps -a | awk NR2{print docker rm $1}
docker rm edb9daa034d9
docker rm 273ca793da78
docker rm bbdb9ce93df8
[rootMineGi ~]# docker ps -a | awk NR2{print docker rm $1} |bash
edb9daa034d9
273ca793da78
bbdb9ce93df8
[rootMineGi ~]# docker ps -aq
[rootMineGi ~]# 3.7.3 批量清理后台停止的容器
docker rm $(docker ps -a -q) #批量清理后台停止的容器
命令示例
docker ps -aq
for i in seq 3;do docker run -it busybox /bin/sh -c sleep 1;done
docker rm $(docker ps -aq)
docker ps -aq
输出结果
[rootMineGi ~]# docker ps -aq
[rootMineGi ~]# for i in seq 3;do docker run -it busybox /bin/sh -c sleep 1;done
[rootMineGi ~]# docker rm $(docker ps -aq)
865d8d2b5dec
68e0be0f966a
4582cc746a1c
[rootMineGi ~]# docker ps -aq
[rootMineGi ~]# 3.8 查看容器占用系统资源信息
命令格式docker stats [容器ID/NAME]
命令示例
docker run -itd alpine /bin/sh
docker stats
docker stats wonderful_bohr
输出结果使用Ctrl C 退出
[rootMineGi ~]# docker run -itd alpine /bin/sh
0ad8fce604e500928abd4d45d8e3c7d502f699679ff150fb3eba692ac454f77e
[rootMineGi ~]# docker statsCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
0ad8fce604e5 wonderful_bohr 0.00% 200KiB / 1.934GiB 0.01% 656B / 0B 0B / 0B 1
^C
[rootMineGi ~]# docker stats wonderful_bohrCONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
0ad8fce604e5 wonderful_bohr 0.00% 200KiB / 1.934GiB 0.01% 656B / 0B 0B / 0B 1CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
0ad8fce604e5 wonderful_bohr 0.00% 200KiB / 1.934GiB 0.01% 656B / 0B 0B / 0B 1
^C
[rootMineGi ~]# 3.9 查看容器进程状态
命令格式docker top 容器ID/NAME
命令示例
docker ps -a
docker top 0ad8fce604e5
输出结果
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ad8fce604e5 alpine /bin/sh 4 minutes ago Up 4 minutes wonderful_bohr
[rootMineGi ~]# docker top 0ad8fce604e5
UID PID PPID C STIME TTY TIME CMD
root 7467 7446 0 13:33 pts/0 00:00:00 /bin/sh
[rootMineGi ~]# 3.10 更新容器的配置
命令格式docker update 选项 容器ID/NAME
--restartalways|on - failure|unless - stopped|no[rootMineGi ~]# docker run --help |grep -A1 restart--restart string Restart policy to apply when a container exits(default no)
[rootMineGi ~]#
功能概述 --restart是 Docker 用于控制容器重启行为的一个重要选项。它允许用户根据不同的策略来决定容器在退出或出现故障后是否重新启动以此来确保容器所提供服务的可用性和稳定性。
具体策略
always 含义容器总是会自动重启不管容器是因为何种原因退出。这包括正常退出例如容器内的应用程序正常完成任务后退出和异常退出如程序崩溃、资源不足等原因导致退出。应用场景适用于那些需要始终保持运行状态的关键服务容器比如生产环境中的 Web 服务器容器、数据库容器等。例如对于一个对外提供网站服务的 Nginx 容器使用--restartalways可以确保即使因为某些突发情况如服务器的短暂网络波动、容器内 Nginx 进程意外终止等导致容器停止它也能立即重新启动最大程度地减少服务中断时间。on - failure[:max - retries] 含义只有当容器以非零退出码退出即容器因为错误而退出时才会重新启动。并且可以通过max - retries参数指定容器尝试重新启动的最大次数。如果不指定max - retries默认会无限次重新启动直到容器成功启动并保持运行状态。应用场景用于那些在出现错误后可能通过重新启动来恢复正常运行的容器。例如一个运行自定义数据处理应用程序的容器偶尔可能会因为数据格式异常等可恢复的错误而退出。使用--restarton - failure可以让容器在出现这种可恢复错误后自动重启同时如果设置了合理的max - retries还可以避免容器因为频繁重启而进入无限循环在达到最大重启次数后可以方便运维人员介入检查问题。unless - stopped 含义容器会在除了被手动停止通过docker stop命令之外的任何情况下自动重启。这意味着如果容器是因为内部程序错误、主机重启、资源耗尽等非手动停止的原因导致停止运行Docker 会自动重新启动容器。应用场景这种策略比较灵活适用于大多数需要保持运行状态的服务容器尤其是在需要频繁对容器进行维护操作如更新、升级等的场景。例如一个运行后端微服务的容器在正常运行过程中希望它能够自动重启以应对各种意外情况但当运维人员需要手动停止容器进行软件更新时又不希望容器自动重启干扰更新操作--restartunless - stopped就能很好地满足这种需求。no等同于旧版本中的never 含义容器在退出后不会自动重新启动。这适用于那些执行一次性任务的容器或者在测试场景下不希望容器自动重启而掩盖问题的情况。应用场景例如一个用于运行数据迁移脚本的容器脚本执行完毕后容器正常退出就不需要再重新启动此时可以使用--restartno。或者在测试一个新的容器化应用程序时为了方便观察和分析程序在退出后的状态也可以将容器设置为--restartno。
3.10.1 未更新配置之前的容器
命令示例
docker ps -a
systemctl restart docker
docker ps -a
输出结果
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ad8fce604e5 alpine /bin/sh 33 minutes ago Up 33 minutes wonderful_bohr
[rootMineGi ~]# systemctl restart docker
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ad8fce604e5 alpine /bin/sh 35 minutes ago Exited (137) About a minute ago wonderful_bohr
[rootMineGi ~]# 3.10.2 已更新配置之后的容器
命令示例
docker ps -a
docker update --restartalways 0ad8fce604e5
docker ps -a
docker inspect 0ad8fce604e5 |grep -C1 always
systemctl restart docker
docker ps -a
输出结果
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ad8fce604e5 alpine /bin/sh 37 minutes ago Exited (137) 4 minutes ago wonderful_bohr
[rootMineGi ~]# docker update --restartalways 0ad8fce604e5
0ad8fce604e5
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ad8fce604e5 alpine /bin/sh 39 minutes ago Exited (137) 5 minutes ago wonderful_bohr
[rootMineGi ~]# docker inspect 0ad8fce604e5 |grep -C1 alwaysRestartPolicy: {Name: always,MaximumRetryCount: 0
[rootMineGi ~]# systemctl restart docker
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0ad8fce604e5 alpine /bin/sh 43 minutes ago Up 2 seconds wonderful_bohr
[rootMineGi ~]# 4、Docker仓库操作 仓库(Repository)是集中存放镜像的地方。 仓库注册服务器才是存放仓库具体的服务器(Registry)每个服务器上都可以放置多个仓库而每个仓库下可以放置多个镜像每个镜像上可以运行多个容器每个容器上可以跑一个应用或应用组。 仓库自身可以分为公共仓库和私有仓库
官方仓库http://hub.docker.com国内仓库dockerpool.com
4.1 镜像推送和拉取流程
4.1.1 镜像推送Push流程
本地准备 开发者首先在本地构建好 Docker 镜像。这个镜像包含了应用程序及其运行所需的环境如操作系统、库文件等。例如一个简单的 Python 应用镜像可能包含了 Python 解释器、应用代码和相关的依赖库。然后对镜像进行标记tagging标记通常包含镜像仓库地址、镜像名称和标签版本。例如docker tag my - app - image:latest my - registry - address/my - app - image:v1这里my - registry - address是镜像仓库地址my - app - image是镜像名称v1是标签版本。认证阶段 若镜像仓库Registry需要认证如私有仓库开发者需要提供认证信息如用户名和密码或者令牌给 Docker 客户端。这一过程确保只有授权的用户能够将镜像推送到仓库中。Docker 客户端会使用提供的认证信息向镜像仓库服务器发送认证请求仓库服务器验证通过后允许客户端进行后续的推送操作。推送镜像层Layers Docker 镜像由多个只读的层layers组成。在推送过程中客户端会将镜像的各个层依次发送给镜像仓库服务器。对于每个层仓库服务器会检查是否已经存在相同的层。如果已经存在就不需要重复存储这是基于内容哈希content - hash来判断的。例如如果多个镜像共享相同的基础层如基于相同的 Linux 发行版构建仓库可以有效地利用存储空间。更新镜像索引Index 当所有的镜像层都推送完成后客户端会向仓库服务器发送镜像索引信息。镜像索引包含了镜像的名称、标签以及各个层的哈希值等内容。仓库服务器更新其索引记录下新推送的镜像的相关信息此时镜像就成功存储在仓库中可以供其他用户拉取使用。
4.1.2 镜像拉取Pull流程
查询镜像信息 用户可以是开发者、运维人员等通过 Docker 客户端发出拉取特定镜像的请求。首先客户端会向镜像仓库服务器查询目标镜像的信息包括镜像的名称、标签、层信息等。仓库服务器根据请求的镜像名称和标签查找对应的镜像索引然后将镜像索引信息返回给客户端。认证阶段如有需要 与推送流程类似如果是私有仓库客户端需要提供认证信息来获取拉取镜像的权限。仓库服务器验证通过后允许客户端进行后续的拉取操作。拉取镜像层 根据镜像索引中的层信息客户端开始从仓库服务器拉取镜像的各个层。客户端会根据层的哈希值来确保拉取的层的准确性。同样对于已经存在于本地的相同层客户端会自动识别不会重复拉取从而提高拉取效率并节省存储空间。构建本地镜像 当所有需要的镜像层都拉取完成后客户端会根据镜像索引信息将这些层组合起来构建出完整的本地镜像。构建完成后用户就可以在本地使用这个镜像来创建和运行 Docker 容器例如通过docker run命令来启动一个基于拉取的镜像的容器以运行相应的应用程序。
4.2 部署本地的私有仓库环境
4.2.1 运行registry容器
情况说明安装docker后可以通过官方提供的registry镜像部署一套本地的私有仓库环境
命令示例
docker rm -f $(docker ps -qa)
mkdir -p /opt/data/registry
docker run -d --restartalways -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
docker ps -a
iptables -nvL -t nat |tail -1
输出结果
[rootMineGi ~]# docker rm -f $(docker ps -qa)
0ad8fce604e5
[rootMineGi ~]# mkdir -p /opt/data/registry
[rootMineGi ~]# docker run -d --restartalways -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
Unable to find image registry:latest locally
latest: Pulling from library/registry
dc0decf4841d: Pull complete
6cb0aa443e23: Pull complete
813676e291ef: Pull complete
dc2fb7dcec61: Pull complete
916205650bfe: Pull complete
Digest: sha256:543dade69668e02e5768d7ea2b0aa4fae6aa7384c9a5a8dbecc2be5136079ddb
Status: Downloaded newer image for registry:latest
09af0b42dd3f5c072565359ab3731b727ff91e92dc551ff9ef0b9510e5303624
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09af0b42dd3f registry /entrypoint.sh /etc… 23 seconds ago Up 21 seconds 0.0.0.0:5000-5000/tcp, :::5000-5000/tcp amazing_galileo
[rootMineGi ~]# iptables -nvL -t nat |tail -10 0 DNAT tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:5000 to:172.17.0.2:5000
[rootMineGi ~]# 4.2.2 修改daemon.json文件
insecure-registries: [10.4.7.11:5000]
情况说明
在 Docker 的配置文件通常是daemon.json中insecure - registries: [IP地址:端口号]这一配置用于指定允许访问的不安全镜像仓库。这里的10.4.7.11:5000是一个示例的镜像仓库地址它被标记为 “不安全” 是因为这个仓库可能没有使用有效的 SSL/TLS 证书例如自签名证书或者没有进行适当的安全认证机制。
命令示例
ip r g 1cat /etc/docker/daemon.json -EOF
{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io],insecure-registries: [10.4.7.11:5000]
}
EOFsystemctl restart docker
输出结果
[rootMineGi ~]# ip r g 1
1.0.0.0 via 10.4.7.254 dev eth0 src 10.4.7.11 cache
[rootMineGi ~]# cat /etc/docker/daemon.json -EOF{registry-mirrors: [https://41q9iv61.mirror.aliyuncs.com,https://docker.cloudmessage.top,https://registry.docker-cn.com,https://docker.nju.edu.cn,https://registry.cn-hangzhou.aliyuncs.com,https://mirror.ccs.tencentyun.com,https://05f073ad3c0010ea0f4bc00b7105ec20.mirror.swr.myhuaweicloud.com,http://hub-mirror.c.163.com,http://f1361db2.m.daocloud.io],insecure-registries: [10.4.7.11:5000]}EOF
[rootMineGi ~]# systemctl restart docker
[rootMineGi ~]# 4.3 镜像推送Push流程
4.3.1 标记镜像Tagging
情况说明首先要确保镜像有正确的标记标记格式通常是[仓库地址]/[镜像名称]:[标签]。假设你的镜像名称是my-app-image想要推送到10.4.7.11:5000这个配置为不安全的仓库并且标签是v1可以使用以下命令进行标记
docker tag my-app-image:v1 10.4.7.11:5000/my-app-image:v1
情况说明这一步操作是告诉 Docker 将本地的my-app-image镜像与目标仓库地址、名称和标签关联起来以便后续推送操作能够准确地将镜像发送到指定位置。
命令示例
docker images
docker tag alpine:latest 10.4.7.11:5000/alpine:latest
docker images
输出结果
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox test01 202622f0cb02 2 hours ago 4.27MB
alpine latest 4048db5d3672 6 days ago 7.84MB
busybox latest af4709625109 2 months ago 4.27MB
registry latest c18a86d35e98 14 months ago 25.4MB
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker tag alpine:latest 10.4.7.11:5000/alpine:latest
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox test01 202622f0cb02 2 hours ago 4.27MB
alpine latest 4048db5d3672 6 days ago 7.84MB
10.4.7.11:5000/alpine latest 4048db5d3672 6 days ago 7.84MB
busybox latest af4709625109 2 months ago 4.27MB
registry latest c18a86d35e98 14 months ago 25.4MB
registry.cn-beijing.aliyuncs.com/mg-docker/nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# 4.3.2 推送镜像Pushing
情况说明完成标记后使用docker push命令来推送镜像。对于上面标记好的镜像推送命令如下
docker push 10.4.7.11:5000/my-app-image:v1
情况说明Docker客户端会根据配置已经将10.4.7.11:5000设置为不安全仓库跳过安全证书验证等步骤然后将镜像的各个层发送到指定的仓库地址。仓库会检查是否已经存在相同的层通过内容哈希来判断如果没有则存储这些层最后更新镜像索引完成镜像的推送。
命令示例
docker push 10.4.7.11:5000/alpine:latest
输出结果
[rootMineGi ~]# docker push 10.4.7.11:5000/alpine:latest
The push refers to repository [10.4.7.11:5000/alpine]
3e01818d79cd: Pushed
latest: digest: sha256:fa7042902b0e812e73bbee26a6918a6138ccf6d7ecf1746e1488c0bd76cf1f34 size: 527
[rootMineGi ~]# 4.3.3 验证推送Optional
情况说明
可以通过查看仓库的管理界面如果仓库有相应的管理界面或者使用仓库相关的命令行工具如果支持来验证镜像是否成功推送。这里没有对应的管理界面所以此步骤省略。另外在推送过程中Docker 客户端也会输出一些信息如推送的进度、每个层的状态等。如果推送过程中出现错误客户端会显示相应的错误信息例如权限问题如果仓库需要认证但未提供正确的认证信息、网络问题或者镜像格式问题等可以根据这些错误信息来排查并解决问题。
4.4 镜像拉取Pull流程
确认镜像标记和仓库地址
确保你知道要拉取镜像的完整标记格式为[仓库地址]/[镜像名称]:[标签]。例如之前推送到10.4.7.11:5000仓库的镜像标记为10.4.7.11:5000/my-app-image:v1。
拉取镜像操作
由于已经在Docker配置中将10.4.7.11:5000设置为不安全的仓库在拉取镜像时Docker客户端会跳过安全证书验证等步骤。使用docker pull命令来拉取镜像如下所示
docker pull 10.4.7.11:5000/my - app - image:v1
Docker客户端会先向10.4.7.11:5000仓库发送请求查询镜像的索引信息包括镜像的名称、标签和各层的哈希值等。然后根据索引信息从仓库拉取镜像的各个层。如果本地已经存在相同的层通过层的哈希值判断则不会重复拉取。
构建本地镜像
当拉取完所有需要的镜像层后Docker客户端会根据镜像索引信息将这些层组合起来构建出完整的本地镜像。构建完成后就可以使用这个镜像来创建和运行Docker容器例如通过docker run命令启动一个基于拉取的镜像的容器来运行相应的应用程序。
验证拉取Optional
拉取完成后可以使用docker images命令来查看本地是否已经成功拉取了镜像。该命令会列出本地所有的Docker镜像包括镜像的仓库地址、名称、标签、大小等信息。如果看到刚刚拉取的镜像出现在列表中就说明拉取成功。也可以尝试使用拉取的镜像创建一个容器来验证其可用性例如
docker run -it 10.4.7.11:5000/my-app-image:v1 /bin/sh
这会以交互模式-it启动一个基于拉取的镜像的容器并进入容器内部的/bin/sh命令行环境通过这种方式可以进一步检查镜像是否完整且能正常运行。
4.4.1 拉取镜像Pulling
命令示例
ip r g 1
grep insecure-registries /etc/docker/daemon.json
docker images
docker pull 10.4.7.11:5000/alpine:latest
docker images
输出结果
[rootMineGi ~]# ip r g 1
1.0.0.0 via 10.4.7.254 dev eth0 src 10.4.7.12 cache
[rootMineGi ~]# grep insecure-registries /etc/docker/daemon.jsoninsecure-registries: [10.4.7.11:5000]
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]# docker pull 10.4.7.11:5000/alpine:latest
latest: Pulling from alpine
38a8310d387e: Pull complete
Digest: sha256:fa7042902b0e812e73bbee26a6918a6138ccf6d7ecf1746e1488c0bd76cf1f34
Status: Downloaded newer image for 10.4.7.11:5000/alpine:latest
10.4.7.11:5000/alpine:latest
[rootMineGi ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
10.4.7.11:5000/alpine latest 4048db5d3672 6 days ago 7.84MB
nginx latest 66f8bdd3810c 2 weeks ago 192MB
nginx 1.19.5 7baf28ea91eb 4 years ago 133MB
[rootMineGi ~]#
4.4.2 验证拉取Optional
命令示例
docker run -it 10.4.7.11:5000/alpine:latest /bin/sh
ls
hostname
cat /etc/issue
exit
docker ps -a
输出结果
[rootMineGi ~]# docker run -it 10.4.7.11:5000/alpine:latest /bin/sh
/ # ls
bin etc lib mnt proc run srv tmp var
dev home media opt root sbin sys usr
/ # hostname
b842a9a4123c
/ # cat /etc/issue
Welcome to Alpine Linux 3.21
Kernel \r on an \m (\l)/ # exit
[rootMineGi ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b842a9a4123c 10.4.7.11:5000/alpine:latest /bin/sh About a minute ago Exited (0) 6 seconds ago zealous_robinson
[rootMineGi ~]# 四、Docker的操作总结
1、镜像管理命令 指令 描述 images 列出镜像 build 构建镜像来自Dockerfile history 查看历史镜像 inspect 显示一个或多个镜像的详细信息 pull 从镜像仓库拉取镜像 push 推送一个镜像到仓库 rmi 移除一个或多个镜像 prune 一处未使用的的镜像没有被标记或被任何容器引用的 tag 创建一个引用源镜像标记目标镜像 save 保存一个或多个镜像到本地的镜像文件 load 加载本地的镜像文件到docker镜像库中来自tar归档或标准输入
#查询 docker 版本和信息
docker version
docker info#搜索镜像可以自己制作镜像上传本地或官网仓库 dockerfile
docker search 镜像名#下载镜像
docker pull 镜像名#查看镜像列表
docker images#查看镜像详细信息
docker inspect 镜像ID#给镜像打标签
docker tag 镜像名:[原标签] 镜像名:[新标签]
#docker tag nginx:latest nginx:web#删除镜像
docker rmi 镜像名:标签
docker rmi 镜像ID
docker rmi docker images -aq #删除所有镜像
docker images | awk NR2{print docker rmi -f $3} | bash
docker images | awk NR2{print $3}| xargs docker rmi#镜像导出
docker save -o 导出的文件名 镜像名
#docker save -o nginx nginx:latest#镜像导入
docker load 镜像文件
#docker load nginx
2、容器管理命令 指令 描述 ps 列出容器-a选项显示所有的容器 inspect 显示一个或多个容器详细信息 attach 附加本地标准输入输出和错误到一个运行的容器 exec 进入到指定容器中可执行命令 commit 构建一个新镜像来自一个容器 cp 拷贝文件夹到一个容器 logs 获取一个容器日志 port 列出或指定容器端口映射 stats 显示一容器资源使用统计 top 显示一个或多个容器运行的进程 update 更新一个或多个容器配置 stop/start 停止/启动一个或多个容器 rm 删除一个或多个容器 export 导出容器文件系统到本地的tar归档文件 import 导入本地的tar容器归档文件后生成镜像
#查询容器
docker ps #查看正在运行状态中的容器
docker ps -a #查看所有容器#创建容器默认处于停止状态
docker create -it nginx:latest /bin/bash
#常用参数说明
# -i 让容器的标准输入保持打开
# -t 分配一个伪终端
# -d 以后台守护进程的方式运行#开启/停止/重启 容器
docker start 容器ID
docker stop 容器ID
docker restart 容器ID#查看指定容器详细信息
docker inspect 容器名
docker inspect 容器ID#创建一个能后台运行且指定容器名称为 test 的容器
docker run -itd --name centos7 centos:7 /bin/bash#进入容器
docker exec -it 容器ID /bin/bash #exit 退出#容器 导出/导入
docker export 容器ID 文件名
docker import 容器文件名 指定镜像名称 #导入的是镜像#批量停止所有的容器
docker ps -a | awk NR2{print docker stop $1} | bash
docker ps -a | awk NR2{print $1} | xargs docker stop#批量强制删除所有的容器
docker rm -f docker ps -aq
docker ps -a | awk NR2{print docker rm -f $1} | bash
docker ps -a | awk NR2{print $1} | xargs docker rm -f#批量删除 exit 状态后台停止状态的容器
docker rm $(docker ps -a -q)#查看容器占用系统资源信息
docker stats