Docker 容器与镜像 - 实践

news/2025/10/4 18:35:47/文章来源:https://www.cnblogs.com/slgkaifa/p/19125812

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

实用指南:babelfish for postgresql 分析--todo

实用指南:babelfish for postgresql 分析--todopre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

MySql的存储过程以及JDBC实战 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

安徽合肥建设银行招聘网站万维网包括哪些网站

springboot745简历系统 获取源码——》公主号&#xff1a;计算机专业毕设大全

做外贸营销型网站浅谈博物馆网站建设意义

目录 基本查找*&#xff1a; 二分查找*&#xff1a; 数据单调递增&#xff1a; 数据单调递减&#xff1a; 总结规律&#xff1a; 插值查找*&#xff1a; 斐波那契查找&#xff08;了解原理&#xff09;&#xff1a;以后补 分块 查找*&#xff1a; 特殊 情况&#xff0…

深圳哪家做网站最好辽宁建设工程信息网ca锁激活

本文目录 本系列文章从新开始为啥要用TypeScript官方文档程序框架从package.json开始tsconfig.jsonJest的配置 jest.config.js服务的实现自动化测试setup.ts文件夹integration 执行及测试对应代码及branch 本系列文章 SAP CAP篇一: 快速创建一个Service&#xff0c;基于Java的…

阿里云万网域名关键词优化排名软件

1. Json 数据解析和绑定 客户端传参&#xff0c;后端接收并解析到结构体 package mainimport ("github.com/gin-gonic/gin""net/http" )// 定义接收数据的结构体 type Login struct {// binding:"required"修饰的字段&#xff0c;若接收为空值…

NFC 贴卡自动拨打微信视频电话

思路来源:b站的视频教程: https://www.bilibili.com/video/BV1Vo3izgEDT/ 文字教程: 下面的操作均在需要贴卡自动拨打微信电话的手机进行:1)下载 NFC Tasks 、NFC Tools、自动脚本精灵,权限打开通知、辅助功能、…

请人建网站wordpress 不做SEO

在项目正式上线之前&#xff0c;我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug&#xff1b;压力测试&#xff08;压测&#xff09;是确保系统在高负载情况下仍能稳定运行的重要步骤。通过模拟高并发场景&#xff0c;可以评估系统的性能瓶颈、可靠…

实用指南:d-分离:图模型中的条件独立性判定准则

实用指南:d-分离:图模型中的条件独立性判定准则pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

微信嵌入手机网站浙江建设继续教育网站首页

题目背景 思路解析:很经典的贪心问题,把物品按照从便宜到贵的顺序排好序,然后按照富贵程度排人,直接暴力会tle所以这里采用双指针. #include<iostream> #include<algorithm> #include<cstring> #include<cmath> #include<string> using namesp…

win7可以做网站吗宠物网站模板下载

几年的时间&#xff0c;从OneNote到为知笔记&#xff0c;再到印象笔记&#xff0c;再回到为知笔记和OneNote&#xff0c;用下来感觉各有优势&#xff0c;也有不爽的地方。 早年间OneNote的同步很有问题&#xff0c;一次同步冲突导致失去了几乎所有笔记本。心灰意冷之下就离开了…

[MCP] 监听资源更新

有两种形式:资源列表变化 资源内容变化资源列表变化 用于监听资源目录是否发生增删改。 工作机制 当服务器上的资源列表发生变化时(例如 resources/list 中的项发生增删),服务器主动发送通知: notifications/reso…

详细介绍:Sentinel 深度解析:限流与熔断降级的微服务稳定性保障实践

详细介绍:Sentinel 深度解析:限流与熔断降级的微服务稳定性保障实践2025-10-04 18:15 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto…

GitHub 使用技巧 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

[RAG] 基础知识

RAG基础知识 基本介绍 RAG,全称 Retrieval-Augmented Generation,中文:检索增强生成 核心思想:为大模型补充来自于外部的相关数据与上下文,从而帮助大模型生成更丰富、更准确、更可靠的内容。 也就是 临时给大模型…

CF1408F Two Different

关键是要想到可以“借数”CF1408F Two Different 挺好的一道思维题。 手玩几个例子之后发现以下性质: 1、直接变的话,只能同时把 \(2^k\) 个数变成一样的,次数大概是 \(2^{k - 1} \times k\)。 2、零散的小堆可以向…

青岛住房和城乡建设部网站网站登录不了

在Cocos Creator中&#xff0c;脚本代码文件分为模块和插件两种方式&#xff1a; 模块一般就是项目的脚本&#xff0c;包含项目中创建的代码、引擎模块、第三方模块。 插件脚本&#xff0c;是指从 Cocos Creator 属性检查器中导入的插件&#xff0c;一般是引入第三方引入库文件…

区块链网站用vue.js做怎么样早8晚5双休的工作

TimeStamp 更新操作可能伴随数据冲突&#xff0c;我们可以通过并发处理妥善解决这一方面的问题。避免数据冲突比较方便的做法是自动加入字节数组&#xff08;byte[]&#xff09;类型的TimeStamp属性&#xff0c;对应到数据表中的rowvewsion类型字段&#xff0c;自动监控数据的…

数据结构 - 字典树 Trie

字典树(Trie)是一种树形数据结构,主要用于高效地存储和检索字符串集合。它通过利用字符串的公共前缀来节省存储空间,常用于词典查询、自动补全等场景。 1. 什么是字典树 字典树的每条边代表一个字符,从根节点到某…

激活函数实现

激活函数实现 1.1:创建激活函数工程目录 创建激活函数目录- src (存放源代码)- testbench (存放测试文件)- docs (存放文档)- lut_data (存放查找表数据)- python_utils (存放Python辅助脚本…