Docker第2天:容器、镜像、网络、仓库
2026/6/25 12:37:58 网站建设 项目流程

Docker:容器、镜像、网络、仓库完整教程

    • 前言
    • 一、Docker HelloWorld验证(容器运行底层流程)
      • 1. 最简输出示例
      • 2. 交互式容器(进入终端调试)
      • 3. 后台常驻容器(服务标准运行方式)
      • 4. 容器7种状态
    • 二、容器全生命周期操作
      • 2.1 基础核心概念区分
      • 2.2 容器启动多方式
      • 2.3 进入运行中容器两种方案(重点区分)
      • 2.4 容器查看、日志、资源监控
      • 2.5 容器导入导出、删除清理
      • 2.6 Web服务容器实战(端口映射基础)
    • 三、Docker镜像完整管理操作
      • 3.1 查看本地镜像列表
      • 3.2 搜索、拉取远程镜像
      • 3.3 删除本地镜像
      • 3.4 两种自定义镜像构建方式
        • 方式1:基于运行容器提交镜像(临时修改)
        • 方式2:Dockerfile标准化构建(生产主流)
      • 3.5 镜像重命名打tag
    • 四、Docker容器网络:端口映射与容器互联
      • 4.1 端口映射两种参数详解
      • 4.2 自定义网桥实现容器互通
      • 4.3 全局/单容器DNS配置
    • 五、Docker仓库(Docker Hub)镜像管理
      • 5.1 仓库基础概念
      • 5.2 账号登录/登出
      • 5.3 完整镜像推送流程
    • 六、高频命令汇总
      • 容器操作
      • 镜像操作
      • 网络&仓库
    • 七、总结

前言

验证HelloWorld、容器全生命周期管理、镜像增删构建、端口映射与容器互联、Docker Hub镜像仓库全套实操内容。

一、Docker HelloWorld验证(容器运行底层流程)

1. 最简输出示例

dockerrun ubuntu:15.10 /bin/echo"Hello world"

参数完整拆解:

  1. docker:Docker客户端执行程序;
  2. run:创建并启动容器核心指令;
  3. ubuntu:15.10:指定镜像名称+标签,本地无则自动从Docker Hub拉取;
  4. /bin/echo "Hello world":容器内执行的前台命令,执行完毕容器直接销毁。
    执行逻辑:客户端发送请求→Docker守护进程检查本地镜像→无则拉取→基于镜像创建容器→运行指定输出命令→输出后容器退出。

2. 交互式容器(进入终端调试)

dockerrun-i-tubuntu:15.10 /bin/bash
  • -t:分配伪终端,提供命令行交互界面;
  • -i:保持标准输入开启,持续接收键盘输入;
    进入后可执行lscat /proc/version查看容器系统信息,输入exit或快捷键Ctrl+D退出终端,容器同步停止。

3. 后台常驻容器(服务标准运行方式)

dockerrun-dubuntu:15.10 /bin/sh-c"while true; do echo hello world; sleep 1; done"
  • -d:后台守护进程运行,返回唯一长字符串容器ID
  • 查看后台容器输出日志:docker logs 容器ID/容器名称
  • 查看当前运行容器:docker ps
  • 停止后台容器:docker stop 容器ID/容器名称

4. 容器7种状态

created(已创建未启动)、restarting(重启中)、running(运行中)、removing(删除迁移)、paused(暂停)、exited(正常停止)、dead(异常崩溃)。

二、容器全生命周期操作

2.1 基础核心概念区分

  • 镜像Image:静态只读模板,存储系统、依赖、代码;
  • 容器Container:镜像动态运行实例,拥有独立进程、文件系统;
  • 类比:镜像=类,容器=实例对象。

2.2 容器启动多方式

  1. 一次性交互式(调试用)
dockerrun-it--nameubuntu-test ubuntu /bin/bash

--name自定义容器名称,替代随机命名,方便管理。

  1. 后台常驻服务(生产标准)
dockerrun-itd--nameweb-demo nginx
  1. 启动已停止容器
dockerstart 容器ID/名称# 重启运行中容器dockerrestart 容器ID/名称

2.3 进入运行中容器两种方案(重点区分)

  1. docker attach
dockerattach ubuntu-test

缺点:执行exit退出终端会直接关闭容器,仅临时调试使用。

  1. docker exec(生产推荐)
dockerexec-itubuntu-test /bin/bash

优势:退出终端不会停止容器,线上服务排查日志、操作文件首选。

2.4 容器查看、日志、资源监控

# 仅查看运行容器dockerps# 查看所有容器(含已停止)dockerps-a# 查看容器实时输出日志(-f持续打印)dockerlogs-f容器名# 查看容器内部进程dockertop容器名# 查看容器完整JSON配置信息(IP、挂载、端口、环境变量)dockerinspect 容器名# 实时查看CPU/内存/磁盘资源占用dockerstats

2.5 容器导入导出、删除清理

  1. 导出容器快照为本地tar包
dockerexportubuntu-test>ubuntu.tar
  1. 从快照文件导入新镜像
catubuntu.tar|dockerimport- test/ubuntu:v1
  1. 删除容器(运行中需加-f强制)
# 删除已停止容器dockerrm容器ID# 强制删除运行容器dockerrm-f容器ID# 一键清理所有停止状态容器dockercontainer prune

2.6 Web服务容器实战(端口映射基础)

# -P 随机映射容器所有暴露端口dockerrun-d-Ptraining/webapp python app.py# -p 指定固定端口映射 宿主机端口:容器端口dockerrun-d-p5000:5000 training/webapp# 查看容器端口对应关系dockerport 容器名

三、Docker镜像完整管理操作

3.1 查看本地镜像列表

dockerimages

字段说明:

  1. REPOSITORY:镜像仓库名称;
  2. TAG:版本标签,默认latest代表最新;
  3. IMAGE ID:镜像唯一ID;
  4. CREATION:镜像构建时间;
  5. SIZE:镜像占用磁盘大小。
    使用规则:镜像名:标签唯一标识镜像,仅写镜像名默认拉取latest。

3.2 搜索、拉取远程镜像

  1. 在线搜索Docker Hub镜像
dockersearch httpd

返回字段:NAME镜像名、DESCRIPTION描述、STARS收藏量、OFFICIAL是否官方镜像。
2. 拉取指定版本镜像

# 拉取最新ubuntudockerpull ubuntu# 拉取指定18.04版本dockerpull ubuntu:18.04

3.3 删除本地镜像

# 通过名称删除dockerr hello-world# 通过镜像ID删除dockerrmi 镜像ID

注意:镜像被容器占用时无法直接删除,需先删除对应容器。

3.4 两种自定义镜像构建方式

方式1:基于运行容器提交镜像(临时修改)
  1. 启动容器并修改内部环境(如apt更新、安装软件);
  2. exit退出容器;
  3. commit提交生成新镜像
dockercommit-m"系统更新"-a"作者名"容器ID 自定义镜像名:v2

参数:-m提交备注,-a标注作者。

方式2:Dockerfile标准化构建(生产主流)
  1. 新建Dockerfile文本,示例模板:
FROM centos:6.7 MAINTAINER test <test@shturl.> RUN echo 'root:123456' | chpasswd EXPOSE 80 CMD /usr/sbin/sshd -D
  1. 当前目录构建镜像
dockerbuild-trunoob/centos:6.7.

-t指定镜像名称标签,.代表Dockerfile所在目录。

3.5 镜像重命名打tag

dockertag 镜像ID 新镜像仓库名:版本

同一镜像ID可绑定多个不同标签,用于推送私有仓库。

四、Docker容器网络:端口映射与容器互联

4.1 端口映射两种参数详解

  1. -P(大写):自动将容器EXPOSE声明端口随机映射宿主机高位端口(32768起);
  2. -p(小写):精准自定义端口,支持多种格式:
# 绑定本机所有网卡 宿主机5000=容器5000dockerrun-d-p5000:5000 webapp# 仅绑定本地回环地址,外部无法访问dockerrun-d-p127.0.0.1:5001:5000 webapp# 指定UDP协议端口dockerrun-d-p5000:5000/udp webapp

4.2 自定义网桥实现容器互通

默认bridge网桥仅支持IP互访,自定义网桥支持容器名称DNS解析,推荐多服务使用:

  1. 创建自定义bridge网络
dockernetwork create-dbridge test-net
  1. 两个容器挂载同一网络
dockerrun-itd--nametest1--networktest-net ubuntudockerrun-itd--nametest2--networktest-net
  1. 进入容器ping对方容器名可直接连通,无需IP

4.3 全局/单容器DNS配置

  1. 全局DNS(所有容器生效,修改daemon.json)
{"dns":["114.114.114.114","8.8.8.8"]}

修改后执行systemctl daemon-reload && systemctl restart docker重启引擎。
2. 启动容器单独指定DNS、主机名

dockerrun-it--rm-hmyhost--dns=114.114.114 ubuntu

--rm容器退出自动销毁,适合临时测试。

五、Docker仓库(Docker Hub)镜像管理

5.1 仓库基础概念

Registry:镜像仓库服务(Docker Hub/Harbor);
Repository:单个镜像仓库(如ubuntu、nginx);
Tag:镜像版本标签。

5.2 账号登录/登出

# 登录Docker Hub,输入用户名密码dockerlogin# 退出登录dockerlogout

5.3 完整镜像推送流程

  1. 搜索并拉取基础镜像
dockersearch ubuntudockerpull ubuntu:18.04
  1. 打标签匹配个人仓库用户名
dockertag ubuntu:18.04 你的用户名/ubuntu:18.04
  1. 推送至远程Docker Hub
dockerpush 你的用户名/ubuntu:18.04

推送后可在个人Docker Hub仓库查看共享镜像,其他设备可直接拉取使用。

六、高频命令汇总

容器操作

dockerrun[-it/-d/-p/--name]镜像# 创建启动容器dockerps/dockerps-a# 查看容器dockerstart/stop/restart 容器# 启停重启dockerexec-it容器 /bin/bash# 进入容器dockerrm[-f]容器# 删除容器dockerlogs-f容器# 实时日志dockerstats# 资源监控dockerexport/dockerimport# 容器快照导入导出

镜像操作

dockerimages# 本地镜像列表dockersearch 关键词# Hub搜索镜像dockerpull 镜像:tag# 拉取镜像dockerrmi 镜像ID/名称# 删除镜像dockercommit# 容器提交镜像dockerbuild-t名称.# Dockerfile构建dockertag# 镜像重打标签

网络&仓库

dockernetwork create bridge名称# 自定义网桥dockerport 容器# 查看端口映射dockerlogin /logout# 仓库登录登出dockerpush 镜像标签# 推送镜像

七、总结

  1. 后台服务进入容器优先使用docker exec,不要用attach,避免误退出停服务;
  2. 线上生产禁止使用-P随机端口,统一-p固定映射便于运维;
  3. 多服务交互必须创建自定义bridge网络,支持容器名DNS解析;
  4. 推送镜像前必须使用docker tag添加账号前缀,否则推送失败;
  5. 国内环境务必配置镜像加速器,解决Docker Hub拉取超时;
  6. 清理磁盘定期执行docker container prunedocker image prune删除无用资源。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询