Docker 基础入门教程:容器化技术完全指南
目录引言一、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 的强大功能来构建和管理现代化的应用程序。

相关新闻

187.三段式状态机的第二段组合always块逻辑要用阻塞赋值=,不能用<=会出bug

187.三段式状态机的第二段组合always块逻辑要用阻塞赋值=,不能用<=会出bug

状态机有时会随机的出现乱跳的情况,需要特别注意。卡死,乱跳等

2026/7/3 14:27:52 阅读更多 →
超越ChatGPT:知识图谱如何让大模型更聪明、更可靠(必藏指南)

超越ChatGPT:知识图谱如何让大模型更聪明、更可靠(必藏指南)

大语言模型(LLM)与知识图谱(KG)的融合是AI发展的关键方向。LLM存在幻觉、黑箱等问题,而KG提供结构化知识、可解释性和领域专长。二者通过KG增强LLM可靠性和推理能力,同时LLM助力KG构建与补全,催生新一代智能问答、推荐系统等应用,…

2026/7/3 14:27:57 阅读更多 →
libarchive: 一个几乎可以解压所有压缩文件的C语言库

libarchive: 一个几乎可以解压所有压缩文件的C语言库

目录 1.简介 2.安装与集成 3.核心接口说明 4.常见使用示例 4.1.不解压读取压缩包内指定文本 / 二进制文件 4.2.遍历压缩包内所有文件 / 文件夹(仅列名,不读内容) 4.3.解压压缩包全部文件到指定目录 4.4.解压压缩包内单个文件到指定目…

2026/7/4 5:53:44 阅读更多 →

最新新闻

3步解决Navicat试用限制:macOS数据库开发者的终极方案

3步解决Navicat试用限制:macOS数据库开发者的终极方案

3步解决Navicat试用限制:macOS数据库开发者的终极方案 【免费下载链接】navicat_reset_mac navicat mac版无限重置试用期脚本 Navicat Mac Version Unlimited Trial Reset Script 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 你是否也曾…

2026/7/4 19:33:32 阅读更多 →
蓝凌EIS平台SQL注入漏洞(CVE-2025-22214)深度剖析与实战复现

蓝凌EIS平台SQL注入漏洞(CVE-2025-22214)深度剖析与实战复现

1. 项目概述:一次针对企业协同平台的SQL注入漏洞深度剖析最近在安全圈里,蓝凌EIS智慧协同平台的一个SQL注入漏洞(CVE-2025-22214)引起了我的注意。这个漏洞出在fi_message_receiver.aspx这个接口上,攻击者甚至不需要登…

2026/7/4 19:33:32 阅读更多 →
使用DALL·E 3和Python自动生成AI配图PPT

使用DALL·E 3和Python自动生成AI配图PPT

1. 为什么需要自动生成带AI配图的PPT?在商业汇报、学术展示和日常工作中,PPT制作往往占据大量时间。传统流程需要经历内容整理、版式设计、图片搜索/制作等多个环节,尤其配图部分最耗时——要么花费数小时在免费图库中寻找合适素材&#xff0…

2026/7/4 19:31:32 阅读更多 →
面向钓鱼邮件研判的智能体 AI 流水线架构与工程实践研究

面向钓鱼邮件研判的智能体 AI 流水线架构与工程实践研究

摘要 全球钓鱼攻击总量持续高速增长,2025 年全年钓鱼攻击总量突破 380 万起,仅第二季度上报钓鱼邮件数量超 110 万封,海量可疑邮件上报给安全运营中心(SOC)带来巨大人工研判压力。传统单一大模型检测方案存在可解释性差…

2026/7/4 19:31:32 阅读更多 →
反潜航空深弹命中概率问题的数学建模与优化研究

反潜航空深弹命中概率问题的数学建模与优化研究

反潜航空深弹命中概率问题的数学建模与优化研究 副标题:基于随机过程理论与 Monte Carlo 模拟的航空深弹投弹策略最优设计 竞赛:2024年高教社杯全国大学生数学建模竞赛 D题 关键词:航空深弹 命中概率 截尾正态分布 Monte Carlo模拟 阵列优化 摘要:本文针对2024年全国大…

2026/7/4 19:31:32 阅读更多 →
PCB阻抗线设计与立创EDA专业版设置指南

PCB阻抗线设计与立创EDA专业版设置指南

1. 阻抗线基础概念与设计要点在PCB设计中,阻抗线是指具有特定特性阻抗的传输线,主要用于高频信号传输(如射频、高速数字信号)。阻抗匹配是确保信号完整性的关键因素,不匹配会导致信号反射、振铃和功率损耗。阻抗线的特…

2026/7/4 19:27:31 阅读更多 →

日新闻

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 发布:关键安全修复版本,多项问题得到解决

Memcached 1.6.43 正式发布,这是一个关键的安全修复版本,修复了多个方面的问题,还对部分功能进行了优化。 安全修复亮点 此次发布在安全修复上表现突出。binprot 避免了项目引用计数溢出,mcmc 因安全问题提升了上游版本号&#xf…

2026/7/4 0:04:29 阅读更多 →
终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案

终极指南:使用HMCL启动器跨平台畅玩Minecraft的完整解决方案 【免费下载链接】HMCL A Minecraft Launcher which is multi-functional, cross-platform and popular 项目地址: https://gitcode.com/gh_mirrors/hm/HMCL HMCL(Hello Minecraft! Lau…

2026/7/4 0:06:29 阅读更多 →
KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

KMX63与PIC18F66K40在嵌入式HMI中的硬件协同与低功耗设计

1. KMX63与PIC18F66K40的硬件协同架构解析KMX63作为一款三轴加速度计和磁力计组合传感器,与PIC18F66K40微控制器的搭配堪称嵌入式HMI开发的黄金组合。这套硬件组合的核心优势在于KMX63提供的高精度运动感知能力与PIC18F66K40强大的信号处理能力形成了完美互补。KMX6…

2026/7/4 0:06:29 阅读更多 →

周新闻

月新闻