当前位置: 首页 > news >正文

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 firewalldsetenforce 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 dockersystemctl 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-reloadsystemctl 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(容器集群)等高级主题,构建更复杂的容器化应用架构。

http://www.dtcms.com/a/424723.html

相关文章:

  • 网站ico如何修改有什么做任务得佣金的网站
  • 网站建设背景公司营销策划方案案例
  • 住房和城乡建设部网站主页公司网站建设一条龙
  • 5. 软件工程基础知识
  • C++进阶(2)——多态
  • 营销网站建站开发什么是交换链接
  • 校园风险管理网站建设方案wordpress使用php版本号
  • html头部
  • 韩国网站域名分类常州seo第一人
  • 建设部网站官网办事厅音乐网站素材
  • 人工智能-机器学习day4
  • 网站建设和维护要点重庆cms建站模板
  • 做外汇需要了解的网站网页制作有什么软件
  • 做棋牌网站建设云南网站开发公司找哪家
  • 文案网站策划书织梦网站系统删除
  • Linux开发工具(一)
  • 虚拟资源站码支付wordpress合江县住房建设规划局网站
  • 国企网站建设标准房地产市场发展趋势
  • 网站 用户粘度无人区高清免费看完整版
  • 做数据可视化的网站汕头网站开发找哪里
  • 【MySQL】深分页的性能优化,游标方案和覆盖索引+延迟回表方案
  • 进入深圳市住房和建设局网站胶州市城乡建设局网站
  • 进口倾角传感器代理与水平监测传感器厂家的选择指南
  • 自定义手机网站建设图片分类展示网站源码
  • 基于python数据挖据的教学监控系统的设计与应用
  • 网络舆情监测系统:洞察网络舆论的利器
  • AI 超级智能体全栈项目阶段三:自定义 Advisor 与结构化输出实现以及对话记忆持久化开发
  • 网站后台模板夜间正能量网站入口网址不用下载
  • 主机屋建网站源码房山建站公司
  • xtuoj 整数分类