目录引言一、Docker 概述与核心概念核心组件与传统虚拟机的区别二、Docker 安装与环境准备2.1 安装 Docker2.2 验证安装三、Docker 基础命令详解3.1 镜像管理命令3.2 容器管理命令四、Dockerfile 详解与最佳实践4.1 基本语法4.2 重要指令说明4.3 构建镜像五、实用案例部署 Web 应用5.1 Flask 应用示例5.2 构建和运行六、Docker Compose 简介6.1 docker-compose.yml 示例6.2 Compose 命令七、数据持久化与卷管理7.1 数据卷类型7.2 卷管理示例八、网络配置8.1 Docker 网络类型8.2 自定义网络九、安全最佳实践9.1 安全原则9.2 安全配置示例十、总结引言Docker 是现代软件开发和部署的核心技术之一它通过容器化技术彻底改变了应用程序的打包、分发和运行方式。本文将带你深入了解 Docker 的基本概念、核心组件和实际应用帮助你掌握这一重要的容器化技术。一、Docker 概述与核心概念Docker 是一个开源的容器化平台它允许开发者将应用程序及其依赖项打包到轻量级、可移植的容器中。与传统的虚拟机相比Docker 容器更加轻便启动更快资源利用率更高。核心组件Docker Engine: Docker 的核心组件负责创建和管理容器Docker Images: 只读模板用于创建容器Docker Containers: 镜像的运行实例Dockerfile: 构建镜像的脚本文件Docker Registry: 存储和分发镜像的服务与传统虚拟机的区别传统虚拟机: 应用 - 操作系统 - Hypervisor - 物理硬件 Docker容器: 应用 - Docker Engine - 操作系统 - 物理硬件二、Docker 安装与环境准备2.1 安装 Docker在 Ubuntu 上安装 Docker# 更新包索引sudoapt-getupdate# 安装必要的包sudoapt-getinstall\ca-certificates\curl\gnupg\lsb-release# 添加 Docker 官方 GPG 密钥sudomkdir-p /etc/apt/keyringscurl-fsSL https://download.docker.com/linux/ubuntu/gpg|sudogpg --dearmor -o /etc/apt/keyrings/docker.gpg# 设置仓库echo\deb [arch$(dpkg --print-architecture)signed-by/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs)stable|sudotee/etc/apt/sources.list.d/docker.list/dev/null# 安装 Docker Enginesudoapt-getupdatesudoapt-getinstalldocker-ce docker-ce-cli containerd.io docker-compose-plugin2.2 验证安装docker--versiondockerrun hello-world三、Docker 基础命令详解3.1 镜像管理命令# 搜索镜像dockersearch nginx# 拉取镜像dockerpull nginx:latest# 查看本地镜像dockerimages# 删除镜像dockerrmi nginx3.2 容器管理命令# 运行容器dockerrun -d -p8080:80 --name my-nginx nginx# 查看运行中的容器dockerps# 查看所有容器包括停止的dockerps-a# 启动、停止、重启容器dockerstart my-nginxdockerstop my-nginxdockerrestart my-nginx# 进入容器dockerexec-it my-nginx /bin/bash# 查看容器日志dockerlogs my-nginx四、Dockerfile 详解与最佳实践Dockerfile 是构建 Docker 镜像的脚本文件它包含了一系列指令来描述如何构建镜像。4.1 基本语法# 示例Node.js 应用的 Dockerfile FROM node:18-alpine # 设置工作目录 WORKDIR /app # 复制 package.json 和 package-lock.json COPY package*.json ./ # 安装依赖 RUN npm ci --onlyproduction # 复制应用源代码 COPY . . # 暴露端口 EXPOSE 3000 # 创建非 root 用户 RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 # 设置文件权限 RUN chown -R nextjs:nodejs /app USER nextjs # 启动命令 CMD [npm, start]4.2 重要指令说明FROM: 指定基础镜像RUN: 执行命令COPY: 复制文件到容器ADD: 类似 COPY但支持远程 URL 和自动解压WORKDIR: 设置工作目录EXPOSE: 声明暴露端口CMD: 指定容器启动时执行的命令ENTRYPOINT: 配置容器启动时运行的命令4.3 构建镜像# 构建镜像dockerbuild -t my-app:latest.# 指定 Dockerfile 路径dockerbuild -f Dockerfile.prod -t my-app:prod.五、实用案例部署 Web 应用5.1 Flask 应用示例创建一个简单的 Flask 应用app.pyfromflaskimportFlask appFlask(__name__)app.route(/)defhello():returnh1Hello from Docker!/h1pThis is a Flask app running in Docker./papp.route(/health)defhealth():return{status:healthy}if__name____main__:app.run(host0.0.0.0,port5000,debugTrue)requirements.txtFlask2.3.3DockerfileFROM python:3.11-slim # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 5000 # 启动命令 CMD [python, app.py]5.2 构建和运行# 构建镜像dockerbuild -t flask-app.# 运行容器dockerrun -d -p5000:5000 --name my-flask-app flask-app# 验证运行curlhttp://localhost:5000六、Docker Compose 简介Docker Compose 是用于定义和运行多容器 Docker 应用的工具。6.1 docker-compose.yml 示例version:3.8services:web:build:.ports:-5000:5000volumes:-.:/appenvironment:-FLASK_ENVdevelopmentdepends_on:-redisredis:image:redis:alpineports:-6379:63796.2 Compose 命令# 启动服务docker-composeup -d# 查看服务状态docker-composeps# 查看日志docker-composelogs# 停止服务docker-composedown七、数据持久化与卷管理7.1 数据卷类型命名卷:docker volume create my-volume绑定挂载:-v /host/path:/container/path临时文件系统:--tmpfs7.2 卷管理示例# 创建命名卷dockervolume create mysql-data# 使用命名卷运行 MySQLdockerrun -d\--name mysql-container\-eMYSQL_ROOT_PASSWORDrootpassword\-v mysql-data:/var/lib/mysql\mysql:8.0# 检查卷dockervolumelsdockervolume inspect mysql-data八、网络配置8.1 Docker 网络类型Bridge: 默认网络类型Host: 直接使用主机网络None: 无网络连接8.2 自定义网络# 创建自定义网络dockernetwork create my-network# 运行容器并连接到自定义网络dockerrun -d --network my-network --name web-server nginxdockerrun -d --network my-network --name app-server my-app# 查看网络dockernetworklsdockernetwork inspect my-network九、安全最佳实践9.1 安全原则使用非 root 用户运行容器限制容器权限定期更新基础镜像使用官方镜像9.2 安全配置示例FROM node:18-alpine # 创建应用用户 RUN addgroup -g 1001 -S appuser \ adduser -S appuser -u 1001 -G appuser WORKDIR /app COPY package*.json ./ RUN npm ci --onlyproduction \ chown -R appuser:appuser /app USER appuser COPY --chownappuser:appuser . . EXPOSE 3000 CMD [npm, start]十、总结Docker 为我们提供了一种标准化的方式来打包、分发和运行应用程序。通过掌握 Docker 的基本概念和操作你可以创建可移植的应用环境简化开发和部署流程提高资源利用率实现微服务架构随着实践经验的积累你将能够更好地利用 Docker 的强大功能来构建和管理现代化的应用程序。