欢迎光临
我们一直在努力

学 Docker 看这一篇就够了:镜像与容器全操作保姆级教程

Docker 核心操作手册(完整版)

目录

第一章 Docker 安装后加速器配置

1.1 镜像加速器基础配置

原文代码块 1:

【代码逐行解释】

【作用说明】

原文代码块 2:

【代码解释】

【作用说明】

原文代码块 3:

1.2 其他可用加速器配置方案

原文代码块 4:

【代码解释】

【作用说明】

原文代码块 5:

【代码解释与作用说明】

1.3 补充配置操作(含常见错误示例)

原文内容保留:

【内容说明】

原文代码块 6(含常见错误示例):

原文代码块 7(修正后的标准配置):

【代码解释与说明】

第二章 Docker 镜像管理

2.1.1 搜索镜像

原文代码块 8(错误示例):

【代码解释与报错说明】

【作用说明】

原文代码块 9(正确示例):

原文代码块 10(完整执行示例):

【代码解释】

【作用说明】

2.1.2 拉取镜像

原文代码块 11:

【代码解释】

【作用说明】

原文代码块 12(指定版本拉取):

【代码解释】

【note 】

原文代码块 13(查看本地镜像):

【代码解释】

【作用说明】

2.1.3 查看镜像信息

原文代码块 14:

【代码逐行解释】

【作用说明】

2.1.4 导出镜像

原文代码块 15:

【代码逐行解释】

【note 】

【作用说明】

2.1.5 删除镜像

原文代码块 16:

【代码逐行解释】

【补充说明(隐含规则)】

镜像管理补充操作(原文完整保留)

原文代码块 17:

【代码补充解释】

第三章 Docker 容器常用操作

2.2.1 启动容器

原文代码块 18:

【代码核心解释】

表格

【逐行命令说明】

原文代码块 19(补充启动示例):

【代码逐行解释】

【作用说明】

原文代码块 20(启动补充示例):

 停止和运行容器

【内容解释与核心规则(原文 note 完整保留)】

【说明】

2.2.2 查看容器信息

原文代码块 21:

【代码逐行解释】

【作用说明】

2.2.3 停止和容器

原文代码块 22:

【代码逐行解释】

原文代码块 23(补充启停操作示例):

【代码解释】

2.2.4 删除容器

原文代码块 24:

【代码逐行解释】

原文代码块 25(补充删除示例):

【代码解释】

2.2.5 容器内容提交

原文核心说明完整保留:

原文代码块 26:

【代码解释】

原文代码块 27(容器提交生成新镜像):

【代码逐行解释】

【原文 note 完整保留】

【说明】

原文代码块 28(补充提交示例):

【代码解释】

2.2.6 系统中的文件和容器中的文件传输

原文代码块 29:

【代码核心解释】

【逐行命令说明】

原文代码块 30(补充传输示例):

【代码解释】

【作用说明】

2.2.7 查询容器内部日志

原文代码块 31:

【代码解释】

【常用补充参数】

容器操作补充命令(原文完整保留)

原文代码块 32:

【代码说明】

原文剩余内容完整保留

【内容说明】

代码总览:

Docker 补充:容器外部网络访问与进阶命令

一、核心问题提出:Docker 容器的外部网络访问局限

1.1 前置环境清理操作

二、容器默认网络的本地访问测试

2.1 启动无端口映射的测试容器

2.2 查找容器 IP 并进行本地访问测试

2.3 外部无法访问的根因分析

三、解决方案:端口映射实现外部网络访问

3.1 端口映射容器启动操作

3.2 实战效果验证

四、进阶命令补充

4.1 镜像查看命令错误示例与修正

4.2 docker history 命令实战详解

原文剩余内容完整保留



第一章 Docker 安装后加速器配置

1.1 镜像加速器基础配置

原文代码块 1:

[root@docker-node1 ~]# cat > /etc/docker/daemon.json <<EOF

{

"registry-mirrors": ["https://docker.1ms.run"]

}

EOF

【代码逐行解释】

  • cat > 文件名 <<EOF … EOF:Linux 系统的 here-document 语法,用于覆盖式向指定文件写入多行文本内容,EOF 为内容起止标记,必须单独成行且无多余字符。
  • /etc/docker/daemon.json:Docker 守护进程的核心配置文件,所有 Docker 服务级别的自定义参数均需在此文件中以标准 JSON 格式编写。
  • "registry-mirrors": ["https://docker.1ms.run"]:核心配置项,用于设置 Docker 镜像仓库的加速器地址,此处配置的是 1ms.run 提供的公共镜像加速服务。

【作用说明】

        Docker 默认拉取镜像的官方仓库 Docker Hub 位于海外,国内访问速度慢、超时率高,配置镜像加速器可将镜像拉取请求转发到国内镜像站点,大幅提升镜像拉取速度和成功率。


原文代码块 2:

[root@docker-node1 ~]# systemctl restart docker

【代码解释】

  • systemctl:Linux 系统系统服务管理命令,用于控制 systemd 管理的系统服务。
  • restart docker:重启 Docker 守护进程服务。

【作用说明】

Docker 的 daemon.json 配置文件修改后,必须重启 Docker 服务才能加载新的配置,否则配置不会生效。


原文代码块 3:

[root@docker-node1 ~]# docker info

执行后关键输出:

Registry Mirrors:

https://docker.1ms.run/

【代码解释】

  • docker info:Docker 核心诊断命令,用于查看 Docker 系统的全量详细信息,包括服务配置、存储驱动、内核版本、容器 / 镜像数量、镜像加速器配置等。

【作用说明】

        用于验证镜像加速器是否配置成功,若输出结果中 Registry Mirrors 字段包含我们配置的加速器地址,说明配置已正常生效。


1.2 其他可用加速器配置方案

原文代码块 4:

[root@docker-node1 ~]# vim /etc/docker/daemon.json

{

"registry-mirrors": ["https://docker.m.daocloud.io"]

}

EOF

【代码解释】

  • vim /etc/docker/daemon.json:使用 vim 编辑器编辑 Docker 核心配置文件,与上文 cat 命令的区别是手动编辑,而非命令行批量写入。
  • 此处配置的是 DaoCloud 提供的公共镜像加速器地址,是国内稳定可用的镜像加速服务之一。

【作用说明】

提供备选的加速器配置方案,当某一个加速器地址不可用时,可替换为其他可用地址。


原文代码块 5:

[root@docker-node1 ~]# systemctl restart docker

[root@docker-node1 ~]# docker info

执行后关键输出:

Registry Mirrors:

https://docker.m.daocloud.io/

Live Restore Enabled: false

【代码解释与作用说明】

与上文一致,重启 Docker 服务使配置生效,并通过 docker info 验证加速器配置结果。


1.3 补充配置操作(含常见错误示例)

原文内容保留:

默认直通docker hub

【内容说明】

  • 上述内容为原文保留的操作日志与系统信息,其中 Docker Root Dir:/var/lib/docker 是 Docker 的默认数据存储目录,所有镜像、容器的数据均默认存储在此路径下;
  • 默认直通docker hub 说明未配置加速器时,Docker 会直接访问海外官方镜像仓库 Docker Hub;
  • 乱码内容为原文保留,无有效操作含义。

原文代码块 6(含常见错误示例):

[rootdocker-nodel -]# cat > /etc/docker/daemon.json <<EOF

"registry-mirrors":["https://docker.lms.run"]

EOF

[ root@docker-node1 -]# cat /etc/docker/demon.json

"registry-mirrors":["https://docker.lms.run"]

[root@docker-nodel~]#cat>/etc/docker/daemon.json<<EOF

"registry-mirrors":["https://docker.lms.run"]

【代码解释与错误说明】

  • 第一段命令存在JSON 格式错误:配置内容缺少外层的 {} 大括号,不符合 JSON 语法规范,会导致 Docker 服务重启失败。
  • 第二段命令存在文件名拼写错误:正确的配置文件名是 daemon.json,此处写成了 demon.json,无法查看正确的配置文件内容。
  • 第三段命令同时存在 JSON 格式错误、缺少结束符 EOF 的问题,属于无效配置命令。
  • 【作用说明】

    为常见的配置错误示例,可用于避坑:配置 daemon.json 必须保证 JSON 格式合法、文件名拼写正确、起止标记完整。


    原文代码块 7(修正后的标准配置):

    [root@docker-node1 ~]# cat > /etc/docker/daemon.json <<EOF

    {

    "registry-mirrors": ["https://docker.1ms.run"]

    }

    EOF

    [root@docker-node1 ~]# systemctl restart docker

    [root@docker-node1 ~]# docker info

    执行后关键输出:

    Registry Mirrors:

    https://docker.1ms.run/

    设完加速器也没啥用

    【代码解释与说明】

    此为标准的加速器配置完整流程,与 1.1 的规范操作一致;原文保留的「设完加速器也没啥用」为操作日志,若配置后仍无法拉取镜像,需排查加速器地址可用性、网络连通性、DNS 解析、防火墙 / SELinux 限制等问题。


    第二章 Docker 镜像管理

    2.1.1 搜索镜像

    原文代码块 8(错误示例):

    [ root@docker-nodel~]# docker search

    docker:'docker search'requires l argument

    Usage:docker search [OPTIONS] TERM

    Run 'docker search –help'for more information

    【代码解释与报错说明】

    • docker search:Docker 镜像搜索命令,用于在镜像仓库中搜索指定的镜像。
    • 报错原因:该命令必须指定搜索的镜像名称参数,不带任何参数执行时,会触发参数缺失报错。
    • Usage:docker search [OPTIONS] TERM:命令的语法格式说明,TERM 为必填的镜像名称关键词,[OPTIONS] 为可选参数。

    【作用说明】

    展示了 docker search 命令的基础语法规则,明确必填参数要求,为常见的新手错误示例。


    原文代码块 9(正确示例):

    [ root@docker-nodel~]#docker search nginx

    ^C[root@docker-nodel~]#

    【代码解释】

    • docker search nginx:正确的镜像搜索命令,用于在镜像仓库中搜索名称包含 nginx 的所有镜像。
    • ^C:为键盘快捷键 Ctrl+C,用于中断当前正在执行的命令。

    原文代码块 10(完整执行示例):

    [root@Docker-node1 ~]# docker search nginx

    NAME DESCRIPTION STARS OFFICIAL

    nginx Official build of Nginx. 20094 [OK]

    nginx @@@省略内容

    【代码解释】

    执行 docker search nginx 后,返回镜像仓库中所有 nginx 相关镜像的列表,核心字段说明如下:

    参数

    说明

    NAME

    镜像名称

    DESCRIPTION

    镜像说明

    STARS

    点赞数量,数值越高代表镜像越受欢迎

    OFFICIAL

    是否是官方镜像,[OK] 代表为 Docker 官方认证的镜像,安全性和稳定性更有保障

    【作用说明】

    用于在拉取镜像前,查找所需的镜像,确认镜像的官方性、受欢迎程度,筛选符合需求的镜像版本。


    2.1.2 拉取镜像

    原文代码块 11:

    [root@docker-nodel ~]# docker pull nginx

    Using default tag:latest

    latust: Pulling from library/nginx

    【代码解释】

    • docker pull 镜像名称:Docker 镜像拉取命令,用于从镜像仓库中将指定的镜像下载到本地服务器。
    • Using default tag:latest:若未指定镜像的版本标签(TAG),Docker 会默认拉取 latest(最新版)标签的镜像。
    • Pulling from library/nginx:表示从官方仓库 library 命名空间下拉取 nginx 镜像。

    【作用说明】

    将远程镜像仓库中的镜像下载到本地,是创建容器的前置步骤 —— 容器必须基于本地已存在的镜像才能启动。


    原文代码块 12(指定版本拉取):

    [root@Docker-node1 ~]# docker pull busybox

    [root@Docker-node1 ~]# docker pull nginx:1.26-alpine

    【代码解释】

    • docker pull busybox:拉取 busybox 镜像的 latest 最新版本,busybox 是一个高度精简的 Linux 工具集镜像,体积极小,常用于测试和轻量容器场景。
    • docker pull nginx:1.26-alpine:指定标签拉取镜像,1.26 是 nginx 的版本号,alpine 是基于 Alpine Linux 发行版构建的镜像。

    【note 】

            alpine 版本:nginx 镜像的最小安装发型版本,基于 Alpine Linux 构建,体积远小于标准版本,同时保留了核心功能,适合生产环境轻量化部署。


    原文代码块 13(查看本地镜像):

    [root@docker-nodel ~]# docker images

    执行后完整输出(原文保留):

    # 查看本地镜像

    [root@Docker-node1 ~] # docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE

    nginx latest 900dca2a61f5 7 weeks ago 188MB

    nginx 1.26-alpine b32ed582bddb 7 weeks ago 43.2MB

    ubuntu latest 35a88802559d 78.1MB 2 months ago

    busybox latest 65ad0d468eb1 15 months ago 4.26MB

    centos 7 eeb6ee3f44bd 2 years ago 204MB

    centos latest 5d0da3dc9764 2 years ago 231MB

    gcr.io/distroless/base-debian12 latest 7273f3276b27 N/A 20.7MB

    gcr.io/distroless/base-debian11 latest 2a6de77407bf N/A 20.6MB

    【代码解释】

    • docker images:核心命令,用于列出本地服务器上已下载的所有镜像,输出字段说明:
      • REPOSITORY:镜像仓库名称 / 镜像名
      • TAG:镜像的版本标签,用于区分同一镜像的不同版本
      • IMAGE ID:镜像的唯一 ID,是镜像的身份标识
      • CREATED:镜像的创建时间
      • SIZE:镜像占用的磁盘空间大小

    【作用说明】

    用于查看本地已有的镜像,确认镜像是否拉取成功、查看镜像版本和大小,为后续容器启动做准备。


    2.1.3 查看镜像信息

    原文代码块 14:

    #查看系统中的镜像列表

    [root@docker-node1 ~]# docker images

    #查看镜像的详细信息

    [root@Docker-node1 ~]# docker image inspect nginx:1.26-alpine

    #查看对镜像的更改记录

    [root@docker-node1 ~]# docker history nginx:latest

    【代码逐行解释】

  • docker images:同上文,查看本地镜像列表,快速确认镜像是否存在。
  • docker image inspect 镜像名:标签:查看镜像的底层详细信息,输出内容为 JSON 格式,包括镜像的构建历史、环境变量、端口配置、挂载点、操作系统、架构等全量元数据。
  • docker history 镜像名:标签:查看镜像的构建历史记录,展示镜像每一层的创建命令、创建时间、占用大小,可清晰看到镜像的构建过程。
  • 【作用说明】

    • inspect 命令用于排查镜像配置问题、确认镜像的内置参数,是容器排障的核心命令之一;
    • history 命令用于了解镜像的构建流程,分析镜像体积构成,也可用于学习官方镜像的构建方式。

    2.1.4 导出镜像

    原文代码块 15:

    #保存镜像

    [root@Docker-node1 ~]# docker image save nginx:latest -o nginx-latest.tar.gz

    [root@Docker-node1 ~]# docker image save nginx:latest nginx:1.26-alpine -o nginx.tag.gz

    #保存所有镜像

    [root@Docker-node1 ~]# docker save `docker images | awk 'NR>1{print $1":"$2}'` -o images.tar.gz

    【代码逐行解释】

    • docker image save / docker save:Docker 镜像导出命令,两个命令功能完全一致,用于将本地镜像导出为 tar 压缩包文件。
    • -o:必填参数,用于指定导出镜像的文件路径和名称。
    • 第一行命令:将本地的 nginx:latest 镜像导出为 nginx-latest.tar.gz 压缩包文件。
    • 第二行命令:同时将 nginx:latest 和 nginx:1.26-alpine 两个镜像导出到同一个 nginx.tag.gz 文件中。
    • 第三行命令:通过 docker images | awk 'NR>1{print $1":"$2}' 批量获取本地所有镜像的名称和标签,一次性导出所有镜像到 images.tar.gz 文件中。

    【note 】

            -o: 指定导出镜像的位置;

            可以同时导出多个镜像到一个文件中;

            指定.tar.gz 可以导出并压缩。

    【作用说明】

            用于镜像的离线传输、备份、迁移:在无外网的服务器环境中,可通过导出的 tar 包,将镜像导入到目标服务器,无需通过镜像仓库拉取。


    2.1.5 删除镜像

    原文代码块 16:

    [root@Docker-node1 ~]# docker rmi nginx:latest

    [root@Docker-node1 ~]# docker rmi `docker images | awk 'NR>1{print $1":"$2}'`

    【代码逐行解释】

    • docker rmi:Docker 镜像删除命令,rmi 是 remove image 的缩写,用于删除本地存储的镜像。
    • 第一行命令:删除本地指定的 nginx:latest 镜像,删除时需指定完整的镜像名 + 标签,若不指定标签默认删除 latest 版本。
    • 第二行命令:批量删除本地所有镜像,通过 awk 命令获取所有镜像的名称和标签,传递给 docker rmi 命令执行批量删除。

    【补充说明(隐含规则)】

    • 若镜像已被容器使用(即使容器已停止),直接删除会报错,需先删除依赖该镜像的所有容器,再删除镜像;
    • 可添加 -f 参数强制删除镜像,例如 docker rmi -f nginx:latest,但不推荐生产环境使用,可能导致残留数据。

    镜像管理补充操作(原文完整保留)

    原文代码块 17:

    #镜像查看

    [root@docker-node1 ~]

    IMAGE ID DISK USAGE CONTENT SIZE EXTRA

    #搜索镜像

    [root@docker-node1 ~]# docker search nginx

    NAME DESCRIPTION STARS OFFICIAL

    nginx Official build of Nginx. 21206

    #下载镜像

    [root@docker-node1 ~]# docker pull nginx

    [root@docker-node1 ~]# docker pull busybox

    Using default tag: latest

    latest: Pulling from library/busybox

    61dfb50712f5: Pull complete

    96cfb76e59bd: Download complete

    Digest: sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f

    Status: Downloaded newer image for busybox:latest

    docker.io/library/busybox:latest

    #查看镜像提交历史

    [root@docker-node1 ~]# docker history busybox:latest

    IMAGE CREATED CREATED BY SIZE COMMENT

    b3255e7dfbcd 17 months ago BusyBox 1.37.0 (glibc), Debian 13 4.49MB

    [root@docker-node1 ~]# docker images

    i Info → U In Use

    IMAGE ID DISK USAGE CONTENT SIZE EXTRA

    b3255e7dfbcd

    busybox:latest b3255e7dfbcd 6 2.22MB

    nginx:1.26 41b194461e4b 75.2MB 279MB

    #导出镜像

    [root@docker-node1 ~]# docker save -o game2048-latest.tar timinglee/game2048:latest

    #删除镜像

    [root@docker-node1 ~]# docker rmi timinglee/mario:latest

    #导入镜像

    [root@docker-node1 ~]# docker load -i game2048-latest.tar

    【代码补充解释】

    • docker load -i 镜像包文件:与 docker save 配套的命令,用于将导出的 tar 镜像包文件导入到本地 Docker 中,恢复为可用的镜像。
    • Digest: sha256:xxx:镜像的哈希摘要,是镜像的唯一身份标识,用于校验镜像的完整性,确保拉取的镜像未被篡改。
    • U In Use:标记该镜像正在被中的容器使用,处于使用中的镜像无法直接删除,需先删除对应容器。

    第三章 Docker 容器常用操作

    2.2.1 启动容器

    原文代码块 18:

    [root@Docker-node1 ~]# docker run -d –name mario -p 80:8080 timinglee/mario

    [root@Docker-node1 ~]# docker run -it –name centos7 centos:7

    [root@3ba22e59734f /]# #进入到容器中,按<ctrl>+<d>退出并停止容器,#按<ctrl>+<pq>退出但不停止容器

    【代码核心解释】

    docker run:Docker 最核心的容器启动命令,用于基于指定镜像创建并启动一个容器,核心参数释义如下(原文 note 完整保留):

    表格

    参数

    说明

    -d

    后台容器(守护进程模式),容器启动后在后台,不占用当前终端

    -i

    交互式容器,保持容器的标准输入流开启,用于与容器进行交互

    -t

    为容器分配一个虚拟终端,通常与 -i 搭配使用(合称 -it),实现进入容器内部执行命令

    –name

    为容器指定自定义名称,名称必须唯一,便于后续对容器进行管理操作

    -p

    端口映射,格式为 -p 宿主机端口:容器端口,将容器内的端口映射到宿主机的端口,外部可通过宿主机 IP + 端口访问容器内的服务

    –rm

    容器停止后自动删除容器,常用于临时测试场景

    –network

    指定容器使用的网络,实现容器间的网络互通与隔离

    【逐行命令说明】

  • 第一行命令:基于 timinglee/mario 镜像,后台启动一个名为 mario 的容器,将容器内的 8080 端口映射到宿主机的 80 端口,外部可通过宿主机 80 端口访问容器内的马里奥游戏服务。
  • 第二行命令:基于 centos:7 镜像,交互式启动一个名为 centos7 的容器,启动后直接进入容器内部的终端,可在容器内执行 Linux 命令。
  • 快捷键说明:
    • Ctrl+d:退出容器终端,同时停止容器;
    • Ctrl+p+q:退出容器终端,但保持容器在后台持续。

  • 原文代码块 19(补充启动示例):

    #重新进入容器
    [root@docker ~]# docker attach centos7

    [root@3ba22e59734f /]#

    #在容器中执行命令

    [root@docker ~]# docker exec -it test ifconfig

    lo Link encap:Local Loopback

    inet addr:127.0.0.1 Mask:255.0.0.0

    inet6 addr: ::1/128 Scope:Host

    UP LOOPBACK RUNNING MTU:65536 Metric:1

    RX packets:0 errors:0 dropped:0 overruns:0 frame:0

    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

    collisions:0 txqueuelen:1000

    RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

    【代码逐行解释】

  • docker attach 容器名/容器ID:进入正在的容器的终端,与容器的主进程进行交互,使用该命令进入容器后,执行 Ctrl+d 会导致容器停止。
  • docker exec:在正在的容器内部执行指定命令,是生产环境最常用的容器内操作命令,核心参数:
    • -it:分配交互式终端,用于执行需要交互的命令(如进入  终端);
    • 第二行命令:在名为 test 的容器内执行 ifconfig 命令,查看容器内的网卡信息,执行后返回容器内的网络配置结果。
  • 【作用说明】

    • attach 适用于接入容器主进程的场景;
    • exec 适用于在容器内执行额外命令、进入容器终端的场景,不会因退出终端导致容器停止,是生产环境推荐使用的方式。

    原文代码块 20(启动补充示例):

    还不能,没有常驻在前台对应程序:

    可以了,并占用终端,docker默认交互:

    [root@docker-nodel~]#docker run-d–name web nginx:1.26

    加入-d后台运行

     停止和运行容器  

    [root@Docker-node1 ~]# docker stop busybox            #停止容器
    [root@Docker-node1 ~]# docker kill busybox            #杀死容器,可以使用信号
    [root@Docker-node1 ~]# docker start busybox            #开启停止的容器

    【内容解释与核心规则(原文 note 完整保留)】

            容器内的第一个进程必须一直处于的状态,否则这个容器,就会处于退出状态!

            -it 表示交互;交互默认退出后会停止

    【说明】

            Docker 容器的生命周期与容器内的 1 号主进程绑定,主进程启动则容器启动,主进程停止则容器退出。

    • 未加 -d 参数时,容器默认前台,占用当前终端,终端关闭则容器停止;
    • 加 -d 参数后,容器后台守护进程模式,不占用终端,主进程正常则容器持续在后台。

    2.2.2 查看容器信息

    原文代码块 21:

    [root@Docker-node1 ~]# docker ps # 查看当前容器

    [root@Docker-node1 ~]# docker ps -a # 查看所有容器

    [root@Docker-node1 ~]# docker inspect busybox # 查看容器的详细信息

    【代码逐行解释】

  • docker ps:查看当前正在中的容器列表,输出核心字段包括:容器 ID、镜像、启动命令、创建时间、状态、端口映射、容器名称。
  • docker ps -a:查看宿主机上所有容器,包括正在的、已停止的、已退出的所有状态的容器,-a 是 –all 的缩写。
  • docker inspect 容器名/容器ID:查看容器的全量底层详细信息,输出为 JSON 格式,包括容器的 IP 地址、端口映射、挂载配置、网络配置、环境变量、状态、资源限制等所有元数据。
  • 【作用说明】

    • docker ps/docker ps -a 是容器管理最常用的命令,用于快速查看容器的状态、端口映射、名称等基础信息;
    • docker inspect 是容器排障的核心命令,用于排查容器网络、挂载、启动配置等各类问题。


    2.2.3 停止和容器

    原文代码块 22:

    [root@Docker-node1 ~]# docker stop busybox # 停止容器

    [root@Docker-node1 ~]# docker kill busybox # 杀死容器,可以使用信号

    [root@Docker-node1 ~]# docker start busybox # 开启停止的容器

    容器内的第一个进程必须一直处于运行的状态,否则这个容器,就会处于退出状态!

    【代码逐行解释】

  • docker stop 容器名/容器ID:优雅停止正在的容器,会先向容器内的主进程发送 SIGTERM 信号,等待进程优雅退出后,再发送 SIGKILL 信号停止容器,默认等待超时时间为 10 秒,适用于正常停止服务的场景。
  • docker kill 容器名/容器ID:强制杀死容器,直接向容器内的主进程发送 SIGKILL 信号,立即终止容器,适用于容器卡死、无法正常停止的场景,支持通过 -s 参数指定发送的信号,例如 docker kill -s SIGINT busybox。
  • docker start 容器名/容器ID:启动已停止 / 已退出的容器,基于容器原有配置重新启动,保留容器内的所有修改和数据。

  • 原文代码块 23(补充启停操作示例):

    -it表示交互;交互运行默认退出后会停止:

    #交互模式运行容器
    [root@docker-node1 ~]# docker run  -it –name busybox busybox:latest

    一下图展示了容器有独立区域:

    #交互容器默认退出后会停止

    [root@docker-node1 ~]# docker ps -a

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    d1b27167a247 busybox:latest "sh" 50 seconds ago Exited (0) 19 seconds ago busybox

    #停止的容器

    [root@docker-node1 ~]# docker start busybox

    root@docker-node1 ~]# docker ps -a

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    d1b27167a247 busybox:latest "sh" 2 minutes ago Up 1 second busybox

    #退出交互容器不对其停止

    [root@docker-node1 ~]# docker attach busybox

    / # [ctrl]+[p]+[q] # 按键

    [root@docker-node1 ~]# docker ps -a

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    d1b27167a247 busybox:latest "sh" 3 minutes ago Up About a minute busybox

    【代码解释】

    完整展示了容器启停、交互式退出的完整流程,验证了 Ctrl+p+q 快捷键可实现退出容器终端但不停止容器的效果,与前文的快捷键说明一致。


    2.2.4 删除容器

    原文代码块 24:

    [root@Docker-node1 ~]# docker rm centos7 # 删除停止的容器

    [root@Docker-node1 ~]# docker rm -f busybox # 删除的容器

    [root@Docker-node1 ~]# docker container prune -f # 删除所有停止的容器

    【代码逐行解释】

  • docker rm 容器名/容器ID:删除指定的容器,默认只能删除已停止 / 已退出的容器,无法删除正在的容器。
  • docker rm -f 容器名/容器ID:强制删除容器,-f 是 –force 缩写,可直接删除正在中的容器,无需先停止容器,底层会先终止容器再执行删除。
  • docker container prune -f:批量清理所有已停止的容器,-f 参数用于跳过确认提示,直接执行删除,常用于批量清理服务器上的无用容器,释放磁盘空间。

  • 原文代码块 25(补充删除示例):

    #容器删除

    [root@docker-node1 ~]# docker rm -f busybox

    busybox

    [root@docker-node1 ~]# docker stop web

    web

    [root@docker-node1 ~]# docker rm web

    web

    【代码解释】

    展示了两种容器删除的规范流程:

  • 强制删除中的 busybox 容器,一步完成;
  • 先优雅停止 web 容器,再删除已停止的 web 容器,是生产环境推荐的规范操作,避免强制删除导致数据丢失。

  • 2.2.5 容器内容提交

    原文核心说明完整保留:

    默认情况下,容器被删除后,在容器中的所有操作都会被清理,包括要保存的文件

    如果想永久保存,那么我们需要把动作提交,提交后会生成新的镜像

    当我们在新镜像后即可看到我们提交的内容

    原文代码块 26:

    [root@Docker-node1 ~]# docker run -it –name test busybox

    / 在容器中建立文件

    / # ls

    bin etc leefile lib64 root tmp var

    dev home 1ib proc sys usr

    [root@Docker-node1 ~]# docker rm test # 删掉容器后

    test

    [root@Docker-node1 ~]# docker run -it –name test busybox # 删掉容器后开启新的容器文件不存在

    # ls

    bin dev etc home 1ib 1ib64 proc root sys tmp usr var

    / #

    【代码解释】

    完整演示了容器的生命周期特性:容器内的所有修改仅在当前容器内有效,一旦容器被删除,所有修改都会丢失,重新基于原镜像启动的容器会恢复到镜像的初始状态,无任何之前的修改内容。


    原文代码块 27(容器提交生成新镜像):

    [root@Docker-node1 ~]# docker commit -m "add leefile" test busybox:v1

    sha256:c8ff62b7480c951635acb6064acdfeb25282bd0c19cbffee0e51f3902cbfa4bd

    [root@Docker-node1 ~]# docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE

    12 seconds ago

    busybox v1 c8ff62b7480c 4.26MB

    [root@Docker-node1 ~]# docker image history busybox:v1

    IMAGE CREATED CREATED BY SIZE COMMENT

    c8ff62b7480c 2 minutes ago sh 17B add leefile

    65ad0d468eb1 15 months ago BusyBox 1.36.1 (glibc), Debian 12 4.26MB

    【代码逐行解释】

    • docker commit:容器提交命令,用于将容器内的修改内容提交,生成一个新的自定义镜像。
    • -m "add leefile":为本次提交添加备注信息,说明本次修改的内容,便于后续追溯。
    • test:要提交的容器名称。
    • busybox:v1:生成的新镜像的名称和版本标签。
    • 执行后返回的 sha256:xxx 是新生成镜像的唯一 ID,通过 docker images 可查看到新生成的 busybox:v1 镜像。
    • docker image history busybox:v1:可查看到新镜像的构建历史,包含本次提交的修改内容和备注。

    【原文 note 完整保留】

    此方法不利于企业审计,所以不推荐使用,在企业中我们多用 Dockerfile 来构建镜像

    【说明】

    docker commit 属于黑箱构建镜像,无法追溯镜像的构建过程,存在安全风险,且不利于版本管理和审计,企业级场景推荐使用 Dockerfile 文件构建镜像,可实现镜像构建的标准化、可追溯、可复用。


    原文代码块 28(补充提交示例):

    #内容提交

    [root@docker-node1 ~]# docker run -it –name test busybox:latest

    / # touch /root/file

    / # ls /root/

    file

    ctrl+qp 退出当前环境并继续容器

    [root@docker-node1 ~]# docker commit -m "add file" test busybox-file:latest

    sha256:31a32089d241d025a5a54f144f15319cc6fb55be1b41d049f8905a472d5a028e

    [root@docker-node1 ~]# docker images

    i Info → U In Use

    IMAGE ID DISK USAGE CONTENT SIZE EXTRA

    busybox-file:latest 31a32089d241 2.21MB

    31a32089d241 6.71MB

    [root@docker-node1 ~]# docker run -it –name test busybox-file:latest

    【代码解释】

    完整演示了容器修改→提交→生成新镜像→基于新镜像启动容器的全流程,基于新镜像 busybox-file:latest 启动的容器,会保留之前提交的 /root/file 文件,实现了容器内修改的持久化。


    2.2.6 系统中的文件和容器中的文件传输

    原文代码块 29:

    #文件在镜像中的复制

    [root@docker-node1 ~]# docker run -it –name test busybox-file:latest

    root@docker-node1 ~]# docker cp test:/root/file /mnt

    Successfully copied 1.54kB to /mnt

    [root@docker-node1 ~]# ls /mnt/

    file hgfs

    [root@docker-node1 ~]# docker cp /etc/passwd test:/root/

    Successfully copied 3.07kB to test:/root/

    [root@docker-node1 ~]# docker exec test ls /root

    file

    passwd

    【代码核心解释】

    docker cp:Docker 容器与宿主机之间的文件 / 目录复制命令,用于实现宿主机和容器之间的文件双向传输,无论容器是否处于状态,均可执行复制操作。

    【逐行命令说明】

  • docker cp test:/root/file /mnt:将名为 test 的容器内的 /root/file 文件,复制到宿主机的 /mnt 目录下。
  • docker cp /etc/passwd test:/root/:将宿主机的 /etc/passwd 文件,复制到名为 test 的容器内的 /root/ 目录下。
  • 后续通过 ls 和 docker exec ls 命令,验证了文件复制成功。

  • 原文代码块 30(补充传输示例):

    [root@Docker-node1 ~]# docker cp test2:/leefile /mnt # 把容器中的文件复制到本机

    Successfully copied 1.54kB to /mnt

    [root@Docker-node1 ~]# docker cp /etc/fstab test2:/fstab # 把本机文件复制到容器中

    【代码解释】

    再次演示了 docker cp 命令的双向传输能力:

    • 容器→宿主机:docker cp 容器名:容器内文件路径 宿主机目标路径
    • 宿主机→容器:docker cp 宿主机文件路径 容器名:容器内目标路径

    【作用说明】

    用于无需进入容器即可实现宿主机与容器之间的文件传输,常用于配置文件注入、容器内日志 / 数据导出、容器内文件备份等场景。


    2.2.7 查询容器内部日志

    原文代码块 31:

    [root@Docker-node1 ~]# docker logs web

    /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration

    /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/

    /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh

    10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf

    10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf

    /docker-entrypoint.sh: Sourcing /docker-entrypoint.d/15-local-resolvers.envsh

    /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh

    /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh

    /docker-entrypoint.sh: Configuration complete; ready for start up

    2024/08/14 07:50:01 [notice] 1#1: using the "epoll" event method

    2024/08/14 07:50:01 [notice] 1#1: nginx/1.27.0

    2024/08/14 07:50:01 [notice] 1#1: built by gcc 12.2.0 (Debian 12.2.0-14)

    2024/08/14 07:50:01 [notice] 1#1: OS: Linux 5.14.0-427.13.1.el9_4.x86_64

    2024/08/14 07:50:01 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1073741816:1073741824

    2024/08/14 07:50:01 [notice] 1#1: start worker processes

    2024/08/14 07:50:01 [notice] 1#1: start worker process 29

    2024/08/14 07:50:01 [notice] 1#1: start worker process 30

    172.17.0.1 – – [14/Aug/2024:07:50:20 +0000] "GET / HTTP/1.1" 200 615 "-" "curl/7.76.1" "-"

    【代码解释】

    • docker logs 容器名/容器ID:查看容器内主进程的标准输出日志,是容器服务排障的核心命令,可查看容器的启动日志、日志、报错日志、访问日志等。
    • 上述输出为 nginx 容器的完整启动日志和访问日志,包含 nginx 的启动配置、启动状态、以及收到的 HTTP 请求记录,可用于排查 nginx 服务启动失败、访问异常等问题。

    【常用补充参数】

    • docker logs -f 容器名:实时跟踪容器的日志输出,等同于 tail -f,用于实时查看服务的日志;
    • docker logs –tail 100 容器名:查看容器最新的 100 行日志;
    • docker logs -t 容器名:为日志输出添加时间戳,便于排查时间相关问题。

    容器操作补充命令(原文完整保留)

    原文代码块 32:

    #镜像

    [root@docker-node1 ~]# docker run -d –name web nginx:1.26 f3e369725fab95d48779eaa556941b735aae841efe09bb1d28bca89923c44ee4

    #查看容器

    [root@docker-node1 ~]# docker ps

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    f3e369725fab nginx:1.26 "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 80/tcp web

    #查看所有容器

    [root@docker-node1 ~]# docker ps -a

    #查看容器信息

    [root@docker-node1 ~]# docker inspect busybox

    #容器控制

    [root@Docker-node1 ~]# docker stop busybox # 停止容器

    [root@Docker-node1 ~]# docker kill busybox # 杀死容器,可以使用信号

    [root@Docker-node1 ~]# docker start busybox # 开启停止的容器

    #在已经的容器中执行指定命令

    [root@docker-node1 ~]# docker exec busybox touch /root/haha # 非交互

    [root@docker-node1 ~]# docker exec busybox ls /root

    file1

    file2

    haha

    [root@docker-node1 ~]# docker exec -it web /bin/ # 交互的

    root@f3e369725fab:/#

    【代码说明】

            为前文容器核心操作的补充示例,完整覆盖了容器启动、查看、启停、命令执行的全流程操作,与前文的命令释义完全一致,可作为操作参考模板使用。


    原文剩余内容完整保留

    U是正在用的意思:

    这样U就没了

    【内容说明】

    上述内容为原文保留的操作日志、终端输出片段与状态说明,其中 U是正在用的意思 标记了镜像 / 容器的使用状态,无新增操作命令,完整保留原文所有内容无删减。

    代码总览:

    #镜像查看
    [root@docker-node1 ~]# docker images IMAGE ID DISK USAGE CONTENT SIZE EXTRA

    #搜索镜像
    [root@docker-node1 ~]# docker search nginx
    NAME DESCRIPTION STARS OFFICIAL
    nginx Official build of Nginx. 21206

    #下载镜像
    [root@docker-node1 ~]# docker pull nginx

    [root@docker-node1 ~]# docker pull busybox
    Using default tag: latest
    latest: Pulling from library/busybox
    61dfb50712f5: Pull complete
    96cfb76e59bd: Download complete
    Digest: sha256:b3255e7dfbcd10cb367af0d409747d511aeb66dfac98cf30e97e87e4207dd76f
    Status: Downloaded newer image for busybox:latest
    docker.io/library/busybox:latest

    #查看镜像提交历史
    [root@docker-node1 ~]# docker history busybox:latest
    IMAGE CREATED CREATED BY SIZE COMMENT
    b3255e7dfbcd 17 months ago BusyBox 1.37.0 (glibc), Debian 13 4.49MB

    [root@docker-node1 ~]# docker images
    i Info → U In Use
    IMAGE ID DISK USAGE CONTENT SIZE EXTRA
    busybox:latest b3255e7dfbcd 6.7MB 2.22MB
    nginx:1.26 41b194461e4b 279MB 75.2MB

    #导出镜像
    [root@docker-node1 ~]# docker save -o game2048-latest.tar timinglee/game2048:latest

    #删除镜像
    [root@docker-node1 ~]# docker rmi timinglee/mario:latest

    #导入镜像
    [root@docker-node1 ~]# docker load -i game2048-latest.tar

    #运行镜像
    [root@docker-node1 ~]# docker run -d –name web nginx:1.26
    f3e369725fab95d48779eaa556941b735aae841efe09bb1d28bca89923c44ee4

    #查看运行容器
    [root@docker-node1 ~]# docker ps
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    f3e369725fab nginx:1.26 "/docker-entrypoint.…" 2 seconds ago Up 2 seconds 80/tcp web

    #查看所有容器
    [root@docker-node1 ~]# docker ps -a

    #交互运行容器默认退出后会停止
    [root@docker-node1 ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    d1b27167a247 busybox:latest "sh" 50 seconds ago Exited (0) 19 seconds ago busybox

    #运行停止的容器
    [root@docker-node1 ~]# docker start busybox
    root@docker-node1 ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    d1b27167a247 busybox:latest "sh" 2 minutes ago Up 1 second busybox

    #退出交互容器不对其停止
    [root@docker-node1 ~]# docker attach busybox
    / # [ctrl]+[p]+[q] #按键
    [root@docker-node1 ~]# docker ps -a
    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    d1b27167a247 busybox:latest "sh" 3 minutes ago Up About a minute busybox

    #查看容器信息
    [root@docker-node1 ~]# docker inspect busybox

    #容器控制
    [root@Docker-node1 ~]# docker stop busybox#停止容器
    [root@Docker-node1 ~]# docker kill busybox#杀死容器,可以使用信号
    [root@Docker-node1 ~]# docker start busybox#开启停止的容器

    #在已经运行的容器中执行指定命令
    [root@docker-node1 ~]# docker exec busybox touch /root/haha#非交互
    [root@docker-node1 ~]# docker exec busybox ls /root
    file1
    file2
    haha

    [root@docker-node1 ~]# docker exec -it web /bin/bash#交互的
    root@f3e369725fab:/#

    #容器删除
    [root@docker-node1 ~]# docker rm -f busybox
    busybox
    [root@docker-node1 ~]# docker stop web
    web
    [root@docker-node1 ~]# docker rm web
    web

    #内容提交
    [root@docker-node1 ~]# docker run -it –name test busybox:latest
    / # touch /root/file
    / # ls /root/
    file
    ctrl+qp 退出当前环境并继续运行容器

    [root@docker-node1 ~]# docker commit -m "add file" test busybox-file:latest
    sha256:31a32089d241d025a5a54f144f15319cc6fb55be1b41d049f8905a472d5a028e
    [root@docker-node1 ~]# docker images
    i Info → U In Use
    IMAGE ID DISK USAGE CONTENT SIZE EXTRA
    busybox-file:latest 31a32089d241 6.71MB 2.21MB

    [root@docker-node1 ~]# docker run -it –name test busybox-file:latest

    #文件在镜像中的复制
    [root@docker-node1 ~]# docker run -it –name test busybox-file:latest
    root@docker-node1 ~]# docker cp test:/root/file /mnt
    Successfully copied 1.54kB to /mnt
    [root@docker-node1 ~]# ls /mnt/
    file hgfs

    [root@docker-node1 ~]# docker cp /etc/passwd test:/root/
    Successfully copied 3.07kB to test:/root/
    [root@docker-node1 ~]# docker exec test ls /root
    file
    passwd

    Docker 补充:容器外部网络访问与进阶命令

    说明:完整保留原文所有代码、操作日志、终端输出与内容,优化逻辑顺序贴合操作流程,每个代码块后补充命令释义与作用说明,无任何内容删减。


    一、核心问题提出:Docker 容器的外部网络访问局限

    原文核心需求完整保留:

    补充:docker 局限于主机里,现在能否远程访问

    1.1 前置环境清理操作

    原文代码块 1:

    [root@docker-nodel~]#docker ps
    CONTAINER ID 4c3c18e78a94 IMAGE busybox-file:latest CONMAND CREATED 30 minutes ago STATUS Up29minutes PORTS NAMES test
    [ root@docker-nodel -]# docker rm -f test
    – CREATED STATUS PORTS NAMES
    rootedocker-node -# ckr
    COMMAND CREATED STATUS PORTS NAMES
    root@docker-nodel ~]#

    【代码逐行解释】

  • docker ps:查看当前正在运行的容器列表,输出结果显示:
    • 运行中的容器名为 test,基于 busybox-file:latest 镜像启动,已运行 29 分钟;
    • 关键信息:PORTS 列为空,说明该容器没有做任何端口映射,仅能在宿主机内部访问,外部网络无法触及。
  • docker rm -f test:强制删除正在运行的 test 容器,为后续网络访问测试清理环境。
  • 后续不完整命令为终端操作日志,无有效执行含义,原文完整保留。
  • 【作用说明】演示了无端口映射的容器默认状态,同时清理环境,为后续容器网络访问测试做准备。


    二、容器默认网络的本地访问测试

    2.1 启动无端口映射的测试容器

    原文代码块 2:

    尝试远程连接:

    [root@docker-nodel-]#docker run-d–name web nginx:1.26 45ea5874128e72691496da68f8f07c84ef68a1e74e09f4d96f79132b342a91e2 2172252541000

    ng40:1.26 CREATED STATUS
    2 seconds ago Up 1 second 80/tcp PORTS web NAMES

    【代码解释】

    • docker run -d –name web nginx:1.26:后台启动一个名为 web 的容器,基于 nginx:1.26 镜像构建,执行后返回的长哈希值为该容器的唯一 ID。
    • 执行结果关键信息:PORTS 列仅显示 80/tcp,说明 nginx 镜像默认声明暴露 80 端口,但没有映射到宿主机的任何端口,仅容器内部开放了 80 端口。

    【作用说明】启动了一个无端口映射的标准 web 容器,用于验证 Docker 默认网络的访问限制。


    2.2 查找容器 IP 并进行本地访问测试

    原文代码块 3:

    用inspect命令查找IP

    [rootedocker-nodel -]# curl 172.25.0.2
    ^C I
    [ root@docker-nodel ~]# docker inspect web
    真工具

    工具 会认看
    1

    } )

    信
    I
    X··
    [ root@docker-node1 ~]# curl "172.17.0.2"

    【代码逐行解释】

  • curl 172.25.0.2:尝试通过 IP 访问容器内的 nginx 服务,^C 为键盘快捷键 Ctrl+C,因 IP 地址错误、无法访问,手动中断了命令执行。
  • docker inspect web:核心命令,用于查看 web 容器的全量底层详细信息,其中最关键的是获取 Docker 分配给容器的私有 IP 地址,这是容器在 Docker 网桥内的通信地址。
  • curl "172.17.0.2":使用容器正确的私有 IP 地址访问 nginx 服务,该 IP 是 Docker 默认网桥分配的地址,在宿主机本地可以正常访问到 nginx 的默认页面。
  • 【作用说明】验证了 Docker 默认桥接网络的特性:容器会被分配一个宿主机内部的私有 IP,宿主机本地可以通过该 IP 访问容器服务,但该 IP 仅在宿主机内部生效。


    2.3 外部无法访问的根因分析

    原文代码块 4:

    1

    【代码解释】

    • ip a:Linux 系统查看网卡与 IP 地址的核心命令,输出结果中显示了 Docker 默认网桥 docker0 的配置:
      • 宿主机上 docker0 网桥的 IP 为 172.17.0.1/16,这是一个私有内网网段,容器的 IP 均从该网段分配;
      • 该网段仅在当前宿主机内部路由,局域网内的其他主机、外网设备无法直接访问到这个网段的 IP,这就是「外部访问不了」的核心原因。
    • 后续内容为浏览器操作日志,原文完整保留,验证了外部浏览器无法直接访问容器私有 IP 的现象。

    三、解决方案:端口映射实现外部网络访问

    3.1 端口映射容器启动操作

    原文代码块 5:

    [root@docker-nodel-]#docker rm-f web web
    [root@docker-nodel~]#docker run-d –name test-p 80:80 nginx:1.26
    5cd345b1bcc99ff505239c816fc154f78a0e369c72d1ec7d04c3c454c84ceb31
    [root@docker-nodel~]#
    [root@docker-nodel~]# docker rm-f test]
    感受DOCKER的魅力

    【代码逐行解释】

  • docker rm -f web:强制删除之前启动的无端口映射的 web 容器,清理测试环境。
  • 核心命令:docker run -d –name test -p 80:80 nginx:1.26
    • 新增核心参数 -p 宿主机端口:容器端口:端口映射参数,格式为「宿主机 IP: 宿主机端口:容器端口」,省略宿主机 IP 时默认绑定 0.0.0.0(所有网卡);
    • 此处 -p 80:80 的含义:将容器内的 80 端口,映射到宿主机的 80 端口,所有访问宿主机 80 端口的流量,都会转发到容器的 80 端口;
    • 执行后返回的长哈希值为新容器的唯一 ID。
  • docker rm -f test:强制删除测试用的 test 容器,为后续实战演示做准备。
  • 【作用说明】这是解决 Docker 容器外部访问的核心方案,通过端口映射,将容器内的服务端口暴露到宿主机的物理网卡上,局域网内的其他主机、外网设备均可通过「宿主机 IP + 映射端口」访问到容器内的服务。


    3.2 实战效果验证

    原文内容完整保留:

    控制镜像,让外部网络访问

    1

    【内容说明】这是端口映射后的实战效果:基于端口映射启动马里奥游戏容器后,外部浏览器通过宿主机的 IP + 映射端口,成功访问到了容器内的 Full Screen Mario 游戏页面,实现了容器服务的外部网络访问,完美验证了端口映射的作用。


    四、进阶命令补充

    4.1 镜像查看命令错误示例与修正

    原文代码块 6:

    80 和 8080;本机端口和容器端口

    【代码解释】

  • docker imagess:错误命令,因拼写错误(多了一个 s),Docker 会报「未知命令」的错误,提示通过 docker –help 查看支持的命令。
  • docker images:正确的命令,用于查看本地所有镜像列表,输出结果中:
    • Info→ In Use:标记该镜像当前正在被运行中的容器使用,无法直接删除;
    • 补充说明 80 和 8080;本机端口和容器端口:再次明确端口映射的格式规则,冒号左侧是宿主机端口,右侧是容器内的服务端口。

  • 4.2 docker history 命令实战详解

    原文核心说明:查看用HISTORY原文代码块 7:

    【代码解释】

    • docker history 镜像名:标签:Docker 镜像历史查看命令,用于展示镜像的每一层构建记录,包括每一层执行的命令、创建时间、占用磁盘大小、构建备注等信息,是分析镜像构建逻辑、排查镜像问题、学习镜像构建的核心命令。
    • 输出关键字段说明:
      • EXPOSE 80/tcp / EXPOSE 8080/tcp:镜像构建时声明的暴露端口,仅为镜像的声明信息,不会自动实现端口映射,必须通过 -p 参数手动绑定宿主机端口,才能实现外部访问;
      • SIZE:每一层镜像占用的磁盘大小,可用于分析镜像体积过大的原因;
      • CREATED:每一层镜像的创建时间;
      • COMMENT:构建时的备注信息;
      • <missing>:该层镜像的构建历史来自父镜像,本地无该层的详细构建记录。

    【作用说明】通过该命令可清晰了解镜像的构建过程,确认镜像声明的暴露端口,为端口映射配置提供依据,同时也能分析镜像的体积构成,优化镜像大小。


    原文剩余内容完整保留

    1

    【内容说明】上述内容为原文保留的终端操作日志片段,无新增有效命令,完整保留无删减。

    赞(0)
    未经允许不得转载:171主机测评 » 学 Docker 看这一篇就够了:镜像与容器全操作保姆级教程
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址