环境:redhat 9.3
docker清华镜像:https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/
docker阿里镜像:https://mirrors.aliyun.com/docker-ce/linux/rhel/
使用源码包安装:https://download.docker.com/linux/rhel/9/x86_64/stable/Packages/
一、docker安装
1、清除冲突包
bash
dnf remove docker docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
podman \
runc
二、配置本地仓库,关闭防火墙及Selinux(防止Docker安装过程中出现错误)
bash
[BaseOS]
name=BaseOS
baseurl=/mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=/mnt/AppStream
gpgcheck=0
bash
[root@client ~]# systemctl disable --now firewalld.service
[root@client ~]# systemctl status firewalld.service
○ firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@client ~]# sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config
三、安装Docker
其中'dnf-plugins-core'是为了能够使用dnf config-manager --add-repo ......
bash
[root@client ~]# dnf -y install dnf-plugins-core
添加docker-ce仓库
bash
[root@client ~]# dnf config-manager --add-repo
https://download.docker.com/linux/rhel/docker-ce.repo
安装docker-ce引擎
bash
[root@client ~]# dnf install docker-ce docker-ce-cli \
containerd.io docker-buildx-plugin docker-compose-plugin -y
运行docker引擎
bash
[root@client ~]# systemctl enable --now docker
Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.
[root@client ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Fri 2026-04-03 23:44:18 CST; 10s ago
docker卸载
bash
#1. 卸载引擎
dnf remove docker-ce docker-ce-cli containerd.io docker-buildx-plugin dockercompose-plugin
docker-ce-rootless-extras
# 2. 删除镜像,容器和数据卷
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
配置docker镜像加速
bash
[root@client ~]# mkdir -p /etc/docker
[root@client ~]# tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": [
> "https://docker.1ms.run",
> "https://docker.mirrors.ustc.edu.cn",
> "https://hub-mirror.c.163.com"
> ]
> }
> EOF
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker
[root@client ~]# docker info | grep -A 3 "Registry Mirrors"
Registry Mirrors:
https://docker.1ms.run/
https://docker.mirrors.ustc.edu.cn/
https://hub-mirror.c.163.com/
四、docker基础操作
1、搜索官方镜像(大概率超时)
bash
docker search 镜像名
2、拉取仓库镜像(拉取超时建议更改docker镜像加速配置)
bash
[root@client ~]# docker pull mysql:8.4.8
8.4.8: Pulling from library/mysql
3cd28adefbd9: Pull complete
43105b2d4e4a: Pull complete
1a7d4892b7d2: Pull complete
eba8eed90d75: Pull complete
68420c358694: Pull complete
50200b0c89a3: Pull complete
03f8ae82fc56: Pull complete
4d14d7bf02a4: Pull complete
d4c7048d1cf1: Pull complete
91c980086743: Pull complete
09ed159fbec4: Download complete
0ad5e3bd9c41: Download complete
Digest: sha256:da906917ca4ace3ba55538b7c2ee97a9bc865ef14a4b6920b021f0249d603f3d
Status: Downloaded newer image for mysql:8.4.8
docker.io/library/mysql:8.4.8
3、查看本地镜像
bash
[root@client ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
mysql:8.4.8 da906917ca4a 1.09GB 248MB
4、添加镜像标签
bash
[root@client ~]# docker tag mysql:8.4.8 mysql8
[root@client ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
mysql8:latest da906917ca4a 1.09GB 248MB
mysql:8.4.8 da906917ca4a 1.09GB 248MB
5、查看镜像的详细信息
bash
[root@client ~]# docker inspect mysql:8.4.8
[
{
"Id": "sha256:da906917ca4ace3ba55538b7c2ee97a9bc865ef14a4b6920b021f0249d603f3d",
"RepoTags": [
"mysql8:latest",
"mysql:8.4.8"
],
"RepoDigests": [
"mysql8@sha256:da906917ca4ace3ba55538b7c2ee97a9bc865ef14a4b6920b021f0249d603f3d",
"mysql@sha256:da906917ca4ace3ba55538b7c2ee97a9bc865ef14a4b6920b021f0249d603f3d"
],
"Comment": "buildkit.dockerfile.v0",
"Created": "2026-03-20T01:13:37.934624247Z",
"Config": {
"ExposedPorts": {
"3306/tcp": {},
"33060/tcp": {}
},
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
"GOSU_VERSION=1.19",
"MYSQL_MAJOR=8.4",
"MYSQL_VERSION=8.4.8-1.el9",
"MYSQL_SHELL_VERSION=8.4.8-1.el9"
],
"Entrypoint": [
"docker-entrypoint.sh"
],
"Cmd": [
"mysqld"
],
"Volumes": {
"/var/lib/mysql": {}
},
"WorkingDir": "/"
},
"Architecture": "amd64",
"Os": "linux",
"Size": 233229033,
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:a06588a07d8a70f60d73602f1849bea9e6339d916ad3aaa27984c4e81f4d6777",
"sha256:17f4059a9289f7bd7e00bb0ad599208a79acb670361b39bdebda4c6610deca9e",
"sha256:dbc55c953b35d6d938b5ad44f5d4ff73f9702ef6ccf3e3130e5af8daa7d46b57",
"sha256:554948bb0ddf862bfc6dbada9e3b7b20df16c5310408bf5c8de96dcbd1ff4025",
"sha256:230fb2f7aa3ae951eda5fe05dd2ace03a844eb6860be1574ec6d5a3519b3f561",
"sha256:a17c4d9f976fed9dc79fbe89f5a2e4ad2bbeab96d74beedd982decd0d06c6b70",
"sha256:ec6898a3f2b532094f3c4e01d19a431197a2fc256f35a636f1ddae8a4446420b",
"sha256:349f20d3b5aded55af87b3a3c6834d99bf2fa063d6fb1ec486a0e04e6edee640",
"sha256:047e6e712310d527737edcfb809f5c936a2f456469515a4a7938efc739c16dab",
"sha256:35e5bc7e5e82ffdb9266e54958b850a4ba81f29e47e1c05e965646f22901380a"
]
},
"Metadata": {
"LastTagTime": "2026-04-04T05:19:35.02241391Z"
},
"Descriptor": {
"mediaType": "application/vnd.oci.image.index.v1+json",
"digest": "sha256:da906917ca4ace3ba55538b7c2ee97a9bc865ef14a4b6920b021f0249d603f3d",
"size": 2603
},
"Identity": {
"Pull": [
{
"Repository": "docker.io/library/mysql"
}
]
}
}
]
6、镜像打包
bash
docker image save 镜像名[:TAG] -o 目标文件[:TAG][.tar.gz]
# 或者
docker image save 镜像名[:TAG] > 目标文件[:TAG][.tar.gz]
7、删除镜像(镜像名或镜像ID)
bash
[root@client ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
mysql8:latest da906917ca4a 1.09GB 248MB
mysql:8.4.8 da906917ca4a 1.09GB 248MB
[root@client ~]# docker rmi mysql8:latest
#或者
[root@client ~]# docker rmi da906917ca4a
8、导入压缩镜像
bash
docker [image] load -i 文件路径[.tar.gz]
9、查看悬虚镜像
悬虚镜像( Dangling Images )是指那些没有 标签 且没有被任何容器使用的镜 像。这些镜像通常是由于构建过程中生成的中间层镜像或未正确清理的镜像残留。删除悬虚镜像可以释放 磁盘空间并保持 Docker 环境的整洁。
bash
[root@client ~]# docker images -f "dangling=true"
-f:--filter的缩小,按条件过滤结果
10、删除悬虚镜像
bash
#docker image prune [OPTIONS]
#删除全部悬虚镜像
[root@client ~]# docker image prune -a -f
#删除指定悬虚镜像
[root@client ~]# docker rmi $(docker images -f "dangling=true" -q)
11、上传镜像(默认Docker hub)
bash
docker push NAME[:TAG]
五、Docker容器管理
1、创建容器(若创建容器使用的镜像不存在则会自动拉取)
bash
#docker create NAME[:TAG]
#-i:交互模式
#-t:伪终端
#-d:后台运行
#-rm:容器退出后是否自动删除
[root@client ~]# docker create -it nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
5e815e07e569: Pull complete
ec781dee3f47: Pull complete
bb3d0aa29654: Pull complete
510ddf6557d6: Pull complete
cde7a05ae428: Pull complete
587e3d84dbb5: Pull complete
3189680c601f: Pull complete
669e0ab8e7fa: Download complete
96a6cfe061e0: Download complete
Digest: sha256:7150b3a39203cb5bee612ff4a9d18774f8c7caf6399d6e8985e97e28eb751c18
Status: Downloaded newer image for nginx:latest
2af3a0a269831c9fe69829ace5cc7412b263f51c0ee7cad5d4e7fc8a7f3dff44
[root@client ~]# docker images
i Info → U In Use
IMAGE ID DISK USAGE CONTENT SIZE EXTRA
mysql8:latest da906917ca4a 1.09GB 248MB
mysql:8.4.8 da906917ca4a 1.09GB 248MB
nginx:latest 7150b3a39203 237MB 65.8MB U
2、查看容器
bash
#查看所有容器
[root@client ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2af3a0a26983 nginx "/docker-entrypoint...." 12 minutes ago Created goofy_liskov
#查看正在运行的容器
[root@client ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3、启动容器
bash
[root@client ~]# docker start 2af3a0a26983
2af3a0a26983
[root@client ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2af3a0a26983 nginx "/docker-entrypoint...." 14 minutes ago Up 4 seconds 80/tcp goofy_liskov
4、新建并启动容器(相当于docker create+docker start)
-t:打开一个终端
-i:交互式运行
-d:后台运行
-p:端口映射
-name:指定容器名称
-rm:容器一旦停止就会自动删除容器
-network:指定容器使用的网络(--network host 即容器和宿主机共用同一个网络栈、同一个 IP、同一个端口)
bash
[root@client ~]# docker run -it --name nginx -d --rm --network host -p 8888:80 nginx:1.27.4
Unable to find image 'nginx:1.27.4' locally
1.27.4: Pulling from library/nginx
e81a6b82cf64: Pull complete
553c8756fd66: Pull complete
10fe6d2248e3: Pull complete
8a628cdd7ccc: Pull complete
3b6e18ae4ce6: Pull complete
75b642592991: Pull complete
3dce86e3b082: Pull complete
c54517baf7cc: Download complete
96536756f4a7: Download complete
Digest: sha256:09369da6b10306312cd908661320086bf87fbae1b6b0c49a1f50ba531fef2eab
Status: Downloaded newer image for nginx:1.27.4
WARNING: Published ports are discarded when using host network mode
56ed0630a2c5fb3348bad493aec30f5e7b036353904d3c2b80d790e18385289a
[root@client ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56ed0630a2c5 nginx:1.27.4 "/docker-entrypoint...." 5 minutes ago Up 5 minutes nginx
2af3a0a26983 nginx "/docker-entrypoint...." 26 minutes ago Up 11 minutes 80/tcp goofy_liskov
5、终止运行容器(容器ID)
-t:X秒后停止
bash
[root@client ~]# docker stop 2af3a0a26983 -t 5
2af3a0a26983
[root@client ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56ed0630a2c5 nginx:1.27.4 "/docker-entrypoint...." 44 minutes ago Up 44 minutes nginx
2af3a0a26983 nginx "/docker-entrypoint...." About an hour ago Exited (0) 3 seconds ago goofy_liskov
restart:终止后再运行
6、进入容器内部
bash
[root@client ~]# docker exec -it 56ed0630a2c5 /bin/bash
/bin/bash:启动 bash 终端
使用exit退出
7、查看容器信息以及日志
bash
[root@localhost~]# docker inspect 56ed0630a2c5
#或者
[root@localhost~]# docker stats 56ed0630a2c5
bash
[root@client ~]# docker logs nginx
#或者
[root@client ~]# docker logs 2af3a0a26983
8、容器文件传输
bash
#将容器中的test.txt文件复制到宿主机/opt目录下
[root@client ~]# docker cp nginx:/test.txt /opt
#把本机文件复制到容器中
[root@client ~]# docker cp /etc/fstab nginx:/fstab
9、删除容器
bash
[root@client ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
56ed0630a2c5 nginx:1.27.4 "/docker-entrypoint...." 54 minutes ago Up 7 minutes nginx
2af3a0a26983 nginx "/docker-entrypoint...." About an hour ago Up 7 minutes 80/tcp goofy_liskov
[root@client ~]# docker ps -qa
56ed0630a2c5
2af3a0a26983
[root@client ~]# docker rm -f $(docker ps -qa)
56ed0630a2c5
2af3a0a26983
[root@client ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES