> 技术文档 > Docker 学习

Docker 学习


一、Docker 是什么?

Docker 是一个容器化平台,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中。

  • 类比:就像集装箱将货物标准化运输一样,Docker 将应用标准化运行在任何环境中。

  • 核心目标:解决“在我机器上能跑,线上为什么不行?”的环境一致性问题

二、核心概念

1. 镜像(Image)
  • 是什么:一个只读的模板,包含运行应用所需的代码、库、环境等。

    • 比如:Ubuntu 镜像、MySQL 镜像、你的 Python 应用镜像。

  • 特点:镜像可以分层复用(类似洋葱,一层层叠加)。

2. 容器(Container)
  • 是什么:镜像的运行实例(类似“类”和“对象”的关系)。

    • 容器是轻量级的,共享主机操作系统内核,启动秒级完成。

  • 特点:容器是临时的,默认随命令结束而销毁(除非主动保存)。

3. 仓库(Registry)
  • 是什么:存放镜像的地方。

    • Docker Hub:官方公共仓库(类似 GitHub)。

    • 私有仓库:如阿里云容器镜像服务。

三、Docker 工作流程

  1. 开发阶段:编写Dockerfile→ 构建镜像(docker build)。

  2. 分发阶段:推送镜像到仓库(docker push)。

  3. 运行阶段:从仓库拉取镜像(docker pull)→ 启动容器(docker run)。

四、基本操作

1. 镜像操作
bashdocker pull nginx:latest # 拉取镜像docker images  # 查看本地镜像docker rmi nginx  # 删除镜像
2. 容器操作
bashdocker run -d -p 80:80 nginx # 启动容器(-d后台运行,-p端口映射)docker ps # 查看运行中的容器docker stop   # 停止容器docker rm  # 删除容器
3. 其他常用命令
bashdocker logs   # 查看容器日志docker exec -it  bash # 进入容器内部

五、Dockerfile 是什么?

  • 作用:一个文本文件,包含一组指令(Instructions),告诉 Docker 如何自动构建镜像。

  • 类比:就像做菜的食谱,Dockerfile 是“镜像的食谱”,docker build是“按食谱做菜”。

  • 关键点

    • 每一条指令都会生成一个镜像层(Layer),层是堆叠的,复用可加速构建。

    • 最终生成一个完整的、可运行的镜像。

六、Dockerfile 核心指令

以下是常用的指令(按构建顺序排列):

指令 作用 示例 FROM 指定基础镜像(必须为第一条指令) FROM ubuntu:22.04 RUN 在镜像内执行命令(安装软件、配置环境等) RUN apt-get update && apt-get install -y curl COPY 将本地文件复制到镜像中 COPY ./app /app ADD 类似 COPY,但支持自动解压或从 URL 下载 ADD https://example.com/file.tar.gz /data WORKDIR 设置后续指令的工作目录(类似 cdWORKDIR /app ENV 设置环境变量 ENV NODE_ENV=production EXPOSE 声明容器运行时监听的端口(需配合 -p 映射) EXPOSE 80 CMD 容器启动时默认执行的命令(可被 docker run 覆盖) CMD [\"python\", \"app.py\"] ENTRYPOINT 类似 CMD,但不可被覆盖(通常用于固定入口命令) ENTRYPOINT [\"nginx\", \"-g\", \"daemon off;\"] VOLUME 定义数据卷挂载点(持久化数据) VOLUME /data

七、实战:编写一个 Python 应用的 Dockerfile

假设有一个 Python Flask 应用,目录结构如下:

/myapp ├── app.py # Flask 代码 ├── requirements.txt # 依赖列表 └── Dockerfile # Dockerfile
1. 编写 Dockerfile
# 基础镜像(Python 官方镜像)FROM python:3.9-slim# 设置工作目录WORKDIR /app# 复制依赖文件并安装COPY requirements.txt .RUN pip install --no-cache-dir -r requirements.txt# 复制应用代码COPY . .# 声明暴露的端口EXPOSE 5000# 启动命令CMD [\"python\", \"app.py\"]

2. 构建镜像

docker build -t my-flask-app:1.0 .

3. 运行容器

docker run -d -p 5000:5000 my-flask-app:1.0

 八、学习心得

本周主要是跟着训练营那边进行docker相关知识的学习,由于本人愚钝,课上的内容未能及时消化,因此有部分内容未能完全理解,因此借助deepseek,chatgpt等大模型进行了进一步的学习。进度较慢,目前完成的内容为基础阶段的练习一与练习二。下周我将投入更多的学习时间,将此内容学懂学精。