Docker 容器与镜像 - 实践

Docker 容器与镜像技术

一、Docker 概述

Docker 是一种轻量级容器化技术,通过打包应用程序及其依赖环境,实现 "一次构建,到处运行" 的目标。容器技术相比传统虚拟机,具有启动速度快、资源占用低、可移植性强等优势,已成为现代应用部署的主流方案。

1.1 容器核心概念

容器是一个自包含的运行环境,包含:

  1. 应用程序本身
  2. 应用所需的全部依赖(库、二进制文件、配置文件等)

容器通过操作系统级虚拟化技术,实现与宿主机器及其他容器的隔离,同时避免了传统虚拟机的 Hypervisor 层开销,性能接近原生系统。

1.2 Docker 优势

优势

说明

快速交付部署

容器启动时间为秒级,大幅缩短开发、测试、部署周期

高效虚拟化

内核级虚拟化,无需额外 Hypervisor,资源利用率更高

可移植性强

可在物理机、虚拟机、公有云、私有云等任意环境运行

简化管理

增量更新,自动化管理,减少环境配置差异带来的问题

1.3 容器标准化

容器技术遵循两大核心标准:

  • Runtime Spec:运行时标准,定义容器的运行环境规范
  • Image Format Spec:镜像格式标准,定义容器镜像的结构规范

主流容器运行时(Runtime):

  1. LXC:Linux 老牌容器运行时,Docker 早期使用
  2. Runc:Docker 开发的默认运行时,符合 OCI 规范
  3. Rkt:CoreOS 开发的容器运行时,兼容 Docker 镜像

二、Docker 架构与核心组件

Docker 采用C/S(客户端 - 服务器)架构,核心组件包括客户端、守护进程、镜像、容器和仓库。

2.1 架构示意图

[客户端] <--REST API--> [Docker守护进程]
                           |
         +----------------+----------------+
         |                |                |
    [镜像(Images)]  [容器(Containers)]  [仓库(Registry)]

2.2 核心组件说明

  1. Docker 客户端
    • 常用工具:docker 命令行工具
    • 功能:向 Docker 守护进程发送指令(构建、运行、管理容器等)
    • 通信方式:通过 UNIX 套接字或网络接口与守护进程通信

    2.Docker 守护进程(Docker Daemon)

    • 运行位置:Docker 主机后台
    • 功能:负责创建、运行、监控容器,管理镜像和仓库交互

    3.Docker 镜像(Image)

    • 本质:只读模板,包含运行应用所需的代码、依赖、配置等
    • 特点:分层存储,可复用,不可修改(修改会生成新层)

    4.Docker 容器(Container)

    • 本质:镜像的可运行实例,是一个隔离的运行环境
    • 特点:可启动、停止、删除、暂停,状态可持久化

    5.Docker 仓库(Registry)

    • 功能:存储和分发 Docker 镜像
    • 分类:
      • 公有仓库:Docker Hub(官方)、阿里云容器仓库等
      • 私有仓库:企业内部自建的镜像仓库

三、Docker 部署与环境配置

3.1 前置条件

  • 关闭防火墙和 SELinux:
systemctl stop firewalld && systemctl disable firewalld
setenforce 0 && sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
  • 配置网络 YUM 源(推荐阿里云源)

https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.22081b117nyHaS

3.2 安装 Docker(CentOS 为例)

  1. 安装依赖包:
yum install -y yum-utils device-mapper-persistent-data lvm2

     2.添加 Docker 官方源:

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

     3.安装 Docker CE:

yum install -y docker-ce docker-ce-cli containerd.io

      4.启动 Docker 并设置开机自启:

systemctl start docker
systemctl enable docker

     5.验证安装:

docker --version # 显示版本信息则安装成功

3.3 配置镜像加速器

由于默认镜像仓库(Docker Hub)访问速度慢,需配置国内加速器:

  1. 创建 / 修改配置文件:
vim /etc/docker/daemon.json

     2.添加加速器地址:

{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn"
]
}

   3.重启 Docker 使配置生效:

systemctl daemon-reload
systemctl restart docker

四、Docker 镜像管理

镜像是 Docker 容器的基础,所有容器都基于镜像创建。以下是常用镜像操作命令。

4.1 镜像基本操作

命令

功能说明

示例

docker images

列出本地所有镜像

docker images

docker search 镜像名

搜索镜像(Docker Hub)

docker search nginx

docker pull 镜像名[:标签]

拉取镜像

docker pull nginx:latest

docker tag 原镜像 新镜像[:标签]

为镜像添加标签

docker tag nginx:latest mynginx:v1

docker rmi 镜像名[:标签]

删除镜像

docker rmi nginx:latest

docker history 镜像名

查看镜像构建历史

docker history nginx

4.2 镜像高级操作

4.2.1 镜像导入导出
# 导出镜像为压缩包
docker image save nginx > nginx-image.tar.gz
# 从压缩包导入镜像
docker image load -i nginx-image.tar.gz
4.2.2 清理无用镜像
# 清理临时镜像和未使用的镜像
docker image prune
# 清理所有无用镜像(包括未打标签的)
docker image prune -a -f
4.2.3 查看镜像详细信息
# 查看镜像完整信息(JSON格式)
docker image inspect nginx:latest
# 查看镜像特定信息(如架构)
docker image inspect -f {{".Architecture"}} nginx:latest

4.3 镜像管理注意事项

  1. 同一镜像可以有多个标签,共享同一镜像 ID(类似硬链接)
  2. 若镜像被容器使用,需先删除容器才能删除镜像(或使用 -f 强制删除)
  3. 镜像名称格式:仓库地址/用户名/镜像名:标签(默认仓库为 Docker Hub)

五、Docker 容器管理

容器是镜像的运行实例,以下是容器的创建、启动、停止等核心操作。

5.1 容器基本操作

命令

功能说明

示例

docker ps

查看运行中的容器

docker ps

docker ps -a

查看所有容器(包括停止的)

docker ps -a

docker create -it --name 容器名 镜像名

创建容器(不启动)

docker create -it --name mycentos centos:7

docker start 容器名/ID

启动容器

docker start mycentos

docker run -it 镜像名 命令

创建并启动容器(交互模式)

docker run -it centos:7 /bin/bash

docker run -itd 镜像名 命令

创建并启动容器(后台模式)

docker run -itd --name mynginx nginx

docker stop 容器名/ID

停止容器

docker stop mynginx

docker rm 容器名/ID

删除停止的容器

docker rm mycentos

docker rm -f 容器名/ID

强制删除容器(包括运行中的)

docker rm -f mynginx

5.2 容器交互与进入

  1. docker exec(推荐)
# 进入运行中的容器(退出后容器继续运行)
docker exec -it mynginx /bin/bash

     2.docker attach(不推荐)

# 进入容器(退出后容器会停止)
docker attach mynginx

5.3 容器导入导出

用于容器迁移,保留容器当前状态:

  1. 导出容器
# 将运行或停止的容器导出为压缩包
docker export -o mycontainer.tar mycentos

     2.导入为镜像

# 从压缩包导入为新镜像
docker import mycontainer.tar myimage:v1

     3.从新镜像创建容器

docker run -itd --name newcontainer myimage:v1 /bin/bash

5.4 容器高级操作

命令

功能说明

示例

docker pause 容器名

暂停容器

docker pause mynginx

docker unpause 容器名

恢复暂停的容器

docker unpause mynginx

docker logs 容器名

查看容器日志

docker logs -f mynginx(实时查看)

docker inspect 容器名

查看容器详细信息

docker inspect mynginx

docker container prune

清理所有停止的容器

docker container prune -f

docker cp 本地文件 容器名:路径

复制文件到容器

docker cp test.txt mynginx:/tmp/

docker cp 容器名:路径 本地文件

从容器复制文件

docker cp mynginx:/etc/nginx/nginx.conf ./

六、容器应用实战:部署 Nginx 服务

通过端口映射和目录挂载,实现宿主机与容器的资源共享,部署可持久化的 Nginx 服务。

6.1 准备工作

  1. 创建宿主机目录结构(用于挂载容器数据):
mkdir -p /root/nginx/{www,logs,conf}

     2.创建测试网页:

echo "Hello" > /root/nginx/www/index.html

    3.获取 Nginx 默认配置文件(先创建临时容器复制配置):

# 创建临时容器
docker run -itd --name tmpnginx nginx:latest
# 复制配置文件到宿主机
docker cp tmpnginx:/etc/nginx/nginx.conf /root/nginx/conf/
# 删除临时容器
docker rm -f tmpnginx

6.2 创建并启动 Nginx 容器

docker run -itd \
--name mynginx \
-p 80:80 \ # 端口映射:宿主机80 -> 容器80
-v /root/nginx/www:/usr/share/nginx/html \ # 网页目录挂载
-v /root/nginx/logs:/var/log/nginx \ # 日志目录挂载
-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \ # 配置文件挂载
nginx:latest

6.3 验证部署

  1. 查看容器状态:
docker ps | grep mynginx # 确保容器处于运行状态

     2.访问测试:

    • 通过宿主机 IP 访问:http://宿主机IP,应显示测试页面内容

    • 查看日志验证:docker logs mynginx

6.4 配置说明

  • 端口映射(-p:解决容器网络隔离问题,使外部可访问容器服务
  • 目录挂载(-v
    • 实现宿主机与容器文件共享
    • 确保容器重启后数据不丢失(如日志、配置、网页内容)
    • 便于在宿主机直接修改容器内的配置和内容

七、总结

Docker 容器技术通过封装应用及其依赖,解决了 "环境不一致" 的核心问题,大幅提升了软件交付效率。本文重点介绍:

  1. 核心概念:镜像(只读模板)与容器(运行实例)的区别与联系
  2. 架构组件:客户端、守护进程、镜像、容器、仓库的协同工作方式
  3. 操作命令:镜像的拉取、标签、删除;容器的创建、启动、进入、迁移
  4. 实战部署:通过 Nginx 案例展示端口映射和目录挂载的实际应用

掌握 Docker 基础后,可进一步学习 Docker Compose(多容器编排)、Docker Swarm(容器集群)等高级主题,构建更复杂的容器化应用架构。

posted on 2025-10-04 18:28  slgkaifa  阅读(17)  评论(0)    收藏  举报

导航