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

发布时间:2026/11/15 1:57:08

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/11/12 19:32:15

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

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

2026/11/11 22:37:06

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

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

2026/11/15 2:58:03

特种工取证保姆级教程:上岗找工作必须拿下,别再踩坑!

特种工取证保姆级教程:上岗找工作必须拿下,别再踩坑! 你现在连个工地都进不去,手里没有特种作业证,这年头找工作真不容易。特种工取证不是摆设,是实打实的通行证,尤其在建筑行业,没有低压电工证、焊工证、高处作业证,连面试资格都没有。今天我来给你…

2026/11/15 2:58:03

兆辉煌电工证怎么考 2026河南最新政策全解析

兆辉煌电工证怎么考 2026河南最新政策全解析 实操考试心里没底怕挂科,这几乎是每个准备报考电工证的考生心里的疙瘩。尤其是在2026年河南最新政策下,考试难度、考试流程、实操评分标准都有所变化,很多人担心自己跟不上节奏。如果你正在备考兆辉煌…

2026/11/15 2:58:03

在林州如何办电工证通过率揭秘,怕考不过白交培训费

在林州如何办电工证通过率揭秘,怕考不过白交培训费 怕考不过白交培训费?你不是一个人。在林州办电工证这件事,很多人因为担心考试难度、通过率、流程复杂、培训机构不靠谱,最后连报名都不敢迈出第一步。别急,咱们就来揭开【在林州如何办电工证】的真相,…

2026/11/15 2:53:03

低压电工证接线板教程图怎么报名,证书过期了不知道怎么复审延期

低压电工证接线板教程图怎么报名,证书过期了不知道怎么复审延期 证书过期了不知道怎么复审延期,这个问题其实很多人都遇到过,尤其是像我们这种在工地一线干了几年的电工。手里拿着的低压电工证,如果到期了不及时处理,等于白考,甚至可能影响项目进度和工…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/15 0:02:49

电工证考试口诉怎么准备值不值得考

电工证考试口诉怎么准备值不值得考 实操考试心里没底怕挂科,这是大多数准备考电工证的人心里最真实的感受。尤其是面对【电工证考试口诉】环节,很多人不知道该怎么准备,甚至担心自己说不好就被淘汰。其实,只要掌握方法, 值不值得考…

2026/11/15 0:02:49

桑植县考电工证千万别踩坑!报名全流程教你避坑

桑植县考电工证千万别踩坑!报名全流程教你避坑 你是不是也遇到过这种情况:想考个电工证,但不知道从哪儿下手,怕被中介坑,怕花冤枉钱,更怕考了证还不能用?别急,这正是你该看这篇文章的原因。在桑植县考电工证,确实有很多人被坑过,但只要你知道流程、…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/15 2:06:31

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

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

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