发布时间:2026/8/5 8:47:07
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/8/5 8:42:06

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

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

2026/8/5 8:42:06

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

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

2026/8/5 9:57:10

3个真实场景告诉你:为什么需要Chrome全页截图插件?

3个真实场景告诉你:为什么需要Chrome全页截图插件? 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chro…

2026/8/5 9:57:10

Elasticsearch 8.x 核心架构与实战指南

1. Elasticsearch 8.x 核心概念与架构解析 Elasticsearch作为当前最流行的分布式搜索和分析引擎,其8.x版本在性能、安全性和易用性方面都有显著提升。我们先从核心架构入手,理解其设计哲学。 Elasticsearch采用分布式文档存储架构,数据以JSO…

2026/8/5 9:57:10

终极GTA5线上小助手:免费开源游戏辅助工具完全指南

终极GTA5线上小助手:免费开源游戏辅助工具完全指南 【免费下载链接】GTA5OnlineTools GTA5线上小助手 项目地址: https://gitcode.com/gh_mirrors/gt/GTA5OnlineTools 你是否厌倦了在GTA5线上模式中重复刷任务赚钱?想要快速解锁所有服装载具却不想…

2026/8/5 9:57:10

PyQt5 UI自适应与高DPI缩放:从布局管理器到实战避坑指南

1. 项目概述:为什么UI自适应与缩放是桌面开发的“硬骨头”做桌面应用开发,尤其是用PyQt5这类框架,UI在不同屏幕和分辨率下的表现,绝对是个绕不开的“老大难”问题。你肯定遇到过:在自己24寸1080p的显示器上精心设计的界…

2026/8/5 9:57:10

三分钟批量下载:抖音下载器如何让内容采集效率提升80%

三分钟批量下载:抖音下载器如何让内容采集效率提升80% 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback suppo…

2026/8/5 9:52:10

计算机学习笔记 ArrayList和HashMap的具体用法和代码示例

import java.util.ArrayList; import java.util.HashMap;第一部分:ArrayList(动态数组)1. 核心概念与内存机制定义:ArrayList 是 List 接口的实现类,底层基于动态数组实现。与普通数组不同,它没有固定大小的…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制:SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰?想为心爱的游戏截图,却发现游戏不支持自定义分辨率…

2026/8/5 0:01:34

三升四,比成绩下滑更可怕的,是孩子开始「认命」

分水岭上,最难的不是翻过去,是孩子不想翻了。八月初了。这两个字,对三升四的家长来说,比任何闹钟都让人清醒。最近的家长群里,气氛明显不一样了。一升二的在关心兴趣班,二升三的在讨论要不要提前学英语。而…

2026/8/5 0:01:34

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:01:34

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/3 22:40:58

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/3 13:26:41

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/3 16:43:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…