news 2026/4/18 8:48:21

Docker 基础入门教程:容器化技术完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Docker 基础入门教程:容器化技术完全指南

目录

    • 引言
    • 一、Docker 概述与核心概念
      • 核心组件:
      • 与传统虚拟机的区别:
    • 二、Docker 安装与环境准备
      • 2.1 安装 Docker
      • 2.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-plugin

2.2 验证安装

docker--versiondockerrun hello-world

三、Docker 基础命令详解

3.1 镜像管理命令

# 搜索镜像dockersearch nginx# 拉取镜像dockerpull nginx:latest# 查看本地镜像dockerimages# 删除镜像dockerrmi nginx

3.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 --only=production # 复制应用源代码 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.py

fromflaskimportFlask app=Flask(__name__)@app.route('/')defhello():return'<h1>Hello from Docker!</h1><p>This is a Flask app running in Docker.</p>'@app.route('/health')defhealth():return{'status':'healthy'}if__name__=='__main__':app.run(host='0.0.0.0',port=5000,debug=True)

requirements.txt

Flask==2.3.3

Dockerfile

FROM 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.8'services:web:build:.ports:-"5000:5000"volumes:-.:/appenvironment:-FLASK_ENV=developmentdepends_on:-redisredis:image:redis:alpineports:-"6379:6379"

6.2 Compose 命令

# 启动服务docker-composeup -d# 查看服务状态docker-composeps# 查看日志docker-composelogs# 停止服务docker-composedown

七、数据持久化与卷管理

7.1 数据卷类型

  • 命名卷:docker volume create my-volume
  • 绑定挂载:-v /host/path:/container/path
  • 临时文件系统:--tmpfs

7.2 卷管理示例

# 创建命名卷dockervolume create mysql-data# 使用命名卷运行 MySQLdockerrun -d\--name mysql-container\-eMYSQL_ROOT_PASSWORD=rootpassword\-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 --only=production && \ chown -R appuser:appuser /app USER appuser COPY --chown=appuser:appuser . . EXPOSE 3000 CMD ["npm", "start"]

十、总结

Docker 为我们提供了一种标准化的方式来打包、分发和运行应用程序。通过掌握 Docker 的基本概念和操作,你可以:

  1. 创建可移植的应用环境
  2. 简化开发和部署流程
  3. 提高资源利用率
  4. 实现微服务架构

随着实践经验的积累,你将能够更好地利用 Docker 的强大功能来构建和管理现代化的应用程序。


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 2:34:56

花15分钟搭一套国产AI系统,把Clawdbot巨额token成本干到0

如果你已经在用 Clawdbot&#xff0c;那你大概率懂我接下来要说什么。爽是真的爽。贵&#xff0c;也是真的贵。第一次让 Clawdbot 跑复杂任务的时候&#xff0c;我是真的被惊到了。长期记忆、拆解任务、执行闭环、自我迭代——你只管说目标&#xff0c;它自己把活干完的体验&am…

作者头像 李华
网站建设 2026/4/18 2:34:58

安卓设备厂商的福利来了!ToDesk企业版移动端升级!

在零售、餐饮、医疗等行业&#xff0c;安卓终端&#xff08;自助机、PDA、广告机&#xff09;已成为运营核心。然而&#xff0c;设备分散、型号繁杂、现场人员不懂技术&#xff0c;让远程维护困难重重。为此&#xff0c;ToDesk企业版迎来移动端重大升级&#xff1a;正式推出安卓…

作者头像 李华
网站建设 2026/4/18 2:33:37

log-lottery:不只是炫酷的3D抽奖,更是学习前端开发的最佳实践

文章简介&#xff1a;年关将至&#xff0c;年会抽奖如何玩出新意&#xff1f;log-lottery 开源项目将传统抽奖升级为炫酷的3D球体视觉盛宴&#xff0c;更是一款融合 Vue3、Three.js、IndexedDB 等前沿技术的完整学习案例。它不仅支持奖品人员管理、界面定制与音乐配置&#xff…

作者头像 李华
网站建设 2026/4/18 2:28:57

实测 | FreeBuds 7i新版本默认音效,体验拉满!

华为FreeBuds 7i新版本更新后&#xff0c;默认音效优化太惊喜&#xff01;实测几首歌&#xff0c;体验直接拉满。1、《遥远的她》– 张学友 经典老歌中高频细节丰富&#xff0c;张学友的唱腔清晰细腻&#xff0c;人声气声和尾音处理特别到位。 2、《慢慢喜欢你》– 莫文蔚 这首…

作者头像 李华
网站建设 2026/4/18 2:32:50

Qoder+Skills,一个人一周完成开源官网重构

"你的官网&#xff0c;AI 能读懂吗&#xff1f;"当我第一次把 Higress 文档链接丢给 Claude&#xff0c;让它帮我写个接入 Demo 时&#xff0c;AI 的回复是&#xff1a;"抱歉&#xff0c;我无法有效解析这个页面的内容结构…"这一刻我意识到&#xff1a;我…

作者头像 李华
网站建设 2026/4/18 2:24:25

Vue 中使用 WebSocket

在 Vue 中使用 WebSocket 核心是封装通用 WebSocket 工具类&#xff08;保证复用性、统一管理连接状态&#xff09;&#xff0c;再在组件中调用&#xff0c;同时结合 Vue 生命周期管理连接的创建与销毁&#xff0c;避免内存泄漏和无效连接。以下是适配 Vue2的完整实现方案 方案…

作者头像 李华