Docker教程从入门到精通(0基础)

发布时间:2026/9/24 2:31:43

Docker教程从入门到精通(0基础) 第一部分核心概念与原理1.1 什么是容器为什么需要它简单来说容器就是将应用及其所有依赖如库、配置文件等打包在一起的标准化单元。它解决了环境不一致带来的“在我的机器上能运行在服务器上就不行”的经典难题。容器与虚拟机的关键区别在于虚拟机模拟整个操作系统包括硬件资源占用大启动慢。容器共享宿主机操作系统内核只隔离应用进程轻量、快速启动时间仅秒级。对比维度传统虚拟机Docker 容器启动速度分钟级秒级资源占用几个GB几十MB隔离性强隔离完全虚拟化进程级隔离内核每个VM有独立内核共享宿主机内核1.2 Docker的三大核心组件理解Docker关键是记住这三个“零件”镜像Image一个只读的模板好比是安装程序的“快照”。它包含了运行一个应用所需的一切。容器Container从镜像运行起来的实例。你可以把它看作是一个“轻量级的虚拟机”可以被启动、停止、删除。仓库Repository集中存放镜像的地方。最著名的是官方的Docker Hub你可以从那里拉取pull镜像也可以推送push自己的镜像。1.3 Docker是如何工作的Docker利用了Linux内核的底层技术来实现隔离和资源控制Namespace命名空间为容器创建独立的“视图”让容器内的进程“看”不到也影响不了宿主机或其他容器实现了隔离。Cgroups控制组限制一个容器可以使用的CPU、内存等资源防止某个容器耗尽宿主机资源实现了资源限制。Union File System联合文件系统允许镜像分层构建使镜像更轻量、传输更快。️ 第二部分安装与环境配置2.1 Linux安装以CentOS为例卸载旧版本如果有sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine [citation:9]安装依赖并添加Docker官方仓库bash sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo [citation:9]安装Docker引擎bash sudo yum install -y docker-ce docker-ce-cli containerd.io [citation:9]启动Docker并设置开机自启bash sudo systemctl start docker sudo systemctl enable docker [citation:9]验证安装bash sudo docker run hello-world看到欢迎信息即为成功。可选让普通用户不用sudo运行dockerbash sudo groupadd docker sudo usermod -aG docker $USER newgrp docker [citation:5][citation:9]2.2 配置镜像加速器国内必备由于网络原因直接拉取镜像可能很慢需要配置国内加速器。创建或修改/etc/docker/daemon.json文件json { registry-mirrors: [https://registry.docker-cn.com] }保存后重启Docker服务sudo systemctl restart docker。⌨️ 第三部分核心命令实战Docker的大部分操作都通过命令行CLI完成掌握以下几组命令就掌握了80%的日常操作。3.1 镜像管理对“模板”的操作命令说明示例docker pull从仓库拉取镜像docker pull nginx:latestdocker images列出本地所有镜像docker imagesdocker rmi删除指定镜像docker rmi IMAGE_IDdocker tag给镜像打标签通常用于版本管理或推送到私有仓库docker tag nginx:latest myrepo/nginx:v1docker build根据Dockerfile构建镜像docker build -t my-app .3.2 容器生命周期管理对“实例”的操作命令说明示例docker run最核心的命令创建并启动一个容器docker run -d --name web -p 80:80 nginxdocker ps列出当前正在运行的容器docker psdocker ps -a列出所有容器包括已停止的docker ps -adocker stop停止一个运行中的容器docker stop webdocker start启动一个已停止的容器docker start webdocker restart重启容器docker restart webdocker rm删除一个已停止的容器docker rm webdocker exec进入正在运行的容器执行命令常用于调试docker exec -it web /bin/bashdocker logs查看容器的输出日志docker logs -f webdocker run常用参数详解bash docker run -d \ # -d: 后台运行detach --name web \ # 给容器起个名字 -p 8080:80 \ # 端口映射宿主机的8080映射到容器内的80 -v /data:/usr/share/nginx/html \ # 数据卷挂载将宿主机目录挂载到容器内 -e MYSQL_PASSWORD123 \ # 设置环境变量 --restartalways \ # 自动重启策略 nginx:latest # 使用的镜像名和标签 [citation:9]3.3 常用辅助命令docker stats实时查看所有容器的资源占用CPU、内存等。docker inspect查看一个容器或镜像的详细配置信息IP地址、挂载卷等。docker system df查看Docker占用的磁盘空间情况。docker network ls列出Docker的网络环境。docker volume ls列出数据卷列表。 第四部分使用Dockerfile定制镜像Dockerfile是一个文本文件包含了构建镜像所需的全部指令。通过它你可以将应用容器化实现环境一致性。4.1 基本结构与指令以一个Python Flask应用为例Dockerfile可以这样写dockerfile # 1. 指定基础镜像Base Image FROM python:3.11-slim # 2. 设置环境变量 ENV PYTHONDONTWRITEBYTECODE1 \ PYTHONUNBUFFERED1 # 3. 设置工作目录 WORKDIR /app # 4. 先复制依赖文件利用Docker缓存提高构建效率 COPY requirements.txt . # 5. 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 6. 复制应用代码 COPY . . # 7. 创建并使用非root用户运行提高安全性 RUN adduser --disabled-password --gecos appuser USER appuser # 8. 声明容器运行时监听的端口 EXPOSE 5000 # 9. 指定容器启动时运行的命令 CMD [python, app.py] [citation:6]4.2 多阶段构建优化镜像大小多阶段构建可以在一个Dockerfile中使用多个FROM指令最终只将必要的运行文件复制到最终镜像从而极大减小体积。这对于编译型语言如Java、Go、Rust特别有用。以Rust应用为例 dockerfile # 阶段1构建阶段 FROM rust:1.75-slim AS builder WORKDIR /app COPY . . RUN cargo build --release # 阶段2运行阶段 FROM alpine:latest WORKDIR /app # 只从构建阶段复制编译好的二进制文件 COPY --frombuilder /app/target/release/myapp . CMD [./myapp] [citation:6] 第五部分数据持久化Volumes容器是“无状态”的容器一旦删除内部的数据也会丢失。为了持久化数据如数据库文件需要将数据存储在容器外部。Docker提供了三种方式Volume数据卷由Docker管理存储在宿主机特定目录下。最推荐的生产环境方式。Bind Mount挂载宿主目录直接将宿主机上的某个目录挂载到容器内。非常适合开发环境因为代码更改可以实时反映在容器内。tmpfs Mount数据存储在宿主机内存中不会持久化到磁盘。用于存放临时敏感信息。例子使用具名Volume运行MySQLbash docker volume create mysql-data docker run -d --name mysql-db \ -e MYSQL_ROOT_PASSWORD123456 \ -v mysql-data:/var/lib/mysql \ mysql:8.0 [citation:6][citation:9]即使删除了容器mysql-data卷中的数据依然安全。 第六部分网络配置Docker容器需要与外界或容器间通信主要网络模式如下Bridge桥接模式Docker默认模式。容器连接到虚拟网桥docker0上通过NAT端口映射-p访问外部。适合单机容器通信。Host主机模式容器直接使用宿主机的网络栈性能最好但失去了网络隔离性。None无网络模式容器有自己的Network Namespace但不进行任何网络配置。需要用户手动配置用于高度自定义的场景。自定义Bridge网络强烈推荐它提供了内置DNS解析容器之间可以通过容器名直接通信。bash # 创建自定义网络 docker network create my-net # 运行容器并连接到该网络 docker run -d --name web --network my-net nginx docker run -d --name app --network my-net my-app # app容器中可以直接通过 ping web 来访问nginx容器 [citation:5][citation:12] 第七部分多容器编排Docker Compose微服务通常由多个容器组成如App、MySQL、Redis。docker-compose.yml文件允许你定义和运行多个容器作为一个项目。实战示例部署Spring Boot MySQL Redisyaml # docker-compose.yml version: 3.8 services: mysql: image: mysql:8.0 container_name: mysql-db environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: demo_db ports: - 3306:3306 volumes: - mysql-data:/var/lib/mysql redis: image: redis:alpine container_name: redis-cache ports: - 6379:6379 app: build: ./app # 从当前目录的Dockerfile构建 container_name: springboot-app depends_on: - mysql - redis environment: SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/demo_db?useSSLfalse SPRING_REDIS_HOST: redis ports: - 8080:8080 volumes: mysql-data: [citation:10]常用Compose命令docker-compose up -d在后台启动所有服务。docker-compose down停止并移除所有容器、网络。docker-compose logs -f查看聚合日志。
延伸阅读

更多相关文章

2026/9/20 0:40:30

AI Agent自主编程:GitHub Copilot Workspace引爆开发者社区

引言:从辅助到主导,AI编程的范式革命 2023年,GitHub Copilot 的出现让“AI写代码”从科幻走进现实。而今天,随着 GitHub Copilot Workspace 的正式发布,我们正见证一个更根本的转变:AI编程助手正从幕后的“…

2026/9/22 1:39:47

智能车竞赛十字路口与斜入十字识别算法与稳定通过策略详解

1. 项目概述与核心挑战 “十字路口”和“斜入十字”,这两个词对于刚接触智能车循迹竞赛的新手来说,往往是第一个让人头疼的“拦路虎”。赛道上的十字交叉线,看似简单,却能让一辆在直道和弯道上跑得飞快的智能车瞬间“迷失自我”&a…

2026/9/24 8:30:43

研一新生学习生活全指南 快速适应研究生阶段实用攻略汇总

每次找到心仪的外国文献,却被付费墙冷冷地挡在外面,是不是感觉科研的热情瞬间被浇灭?作为学生党,我太懂这种无力感了。但好消息是,通过几个合法且免费的“通道”和技巧,我们完全能实现“文献自由”。今天分…

2026/9/24 8:30:43

TLS + Web API 安全 · 01 · TLS 原理与握手

一、先看问题:HTTP 是"明信片"HTTP(超文本传输协议)是浏览器和网站之间说话的语言。它的特点就一个字:明文。也就是说,你发出去的内容,在网络上经过的每一台设备(路由器、交换机、Wi-…

2026/9/24 8:25:43

RLHF、InstructGPT 与 DPO:大模型对齐训练全面解析

本文系统讲解大模型对齐训练的核心方法:RLHF(基于人类反馈的强化学习)、InstructGPT 的三步对齐流程,以及 DPO(直接偏好优化)。从原理、步骤、优缺点到实践细节,一篇讲透。一、什么是 RLHF&…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/24 0:00:21

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:21

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:21

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码