Docker基础(复习)

环境: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
相关推荐
helx825 小时前
SpringBoot中自定义Starter
java·spring boot·后端
_MyFavorite_5 小时前
JAVA重点基础、进阶知识及易错点总结(31)设计模式基础(单例、工厂)
java·开发语言·设计模式
杨云龙UP5 小时前
Oracle 中 NOMOUNT、MOUNT、OPEN 怎么理解? 在不同场景下如何操作?_20260402
linux·运维·数据库·oracle
Amctwd5 小时前
【Linux】OpenCode 安装教程
linux·运维·服务器
ILYT NCTR5 小时前
SpringSecurity 实现token 认证
java
rleS IONS5 小时前
SpringBoot获取bean的几种方式
java·spring boot·后端
014-code5 小时前
Java SPI 实战:ServiceLoader 的正确打开方式(含类加载器坑)
java·开发语言
和小潘一起学AI5 小时前
SHH隧道内网穿透
运维·服务器
程序员榴莲6 小时前
Javase(七):继承
java