docker入门教程

下面我给你一套**“最小但完整的 Docker 实战流程”**,只基于:

  • 你现在 已经有:

    • 一台服务器

    • 一个 conda 环境

    • 一份 Python 代码

  • 目标:

    • 不依赖 conda

    • 用 Docker 从「代码 → 镜像 → 容器 → 运行 → 调试 → 清理」走一遍


一、整体流程先给你一张“脑图”

你现在要走的完整闭环是:

Python 代码
   ↓
Dockerfile(定义环境)
   ↓
docker build(做镜像)
   ↓
docker run(跑容器)
   ↓
docker exec(进容器调试)
   ↓
docker logs / stop / rm

conda 只是参考环境,不参与 Docker 运行

二、准备一个最小 Python 示例(非常重要)

先假设你有一个最简单的脚本:

📄 hello.py

import time

print("Hello from Docker!")
for i in range(5):
    print(f"Step {i}")
    time.sleep(1)
👉 这个文件必须在服务器上一个独立目录里
 
mkdir docker_demo
cd docker_demo

三、从 conda 环境「迁移思维」到 Docker

1️⃣ 在 conda 里确认 Python 版本(仅用于参考)

conda activate your_env
python --version
pip list > requirements.txt

📄 生成一个:

requirements.txt

👉 这一步是“抽离依赖”,不是复制环境

四、写你的第一个 Dockerfile(核心)

📄 Dockerfile

# 1. 基础镜像(不使用 conda)
FROM python:3.10-slim

# 2. 容器内工作目录
WORKDIR /app

# 3. 拷贝依赖文件
COPY requirements.txt .

# 4. 安装依赖
RUN pip install --no-cache-dir -r requirements.txt

# 5. 拷贝代码
COPY hello.py .

# 6. 容器启动时执行的命令
CMD ["python", "hello.py"]
📌 这里你要理解的 6 件事:
含义
FROM Docker 里的“系统 + Python”
WORKDIR 容器里的当前目录
COPY 从宿主机拷贝
RUN 构建时执行
CMD 容器启动后执行
conda ❌ 完全不用

五、构建镜像(第一次最关键)

docker build -t hello_docker:v1 .

你应该看到:

  • pip 安装依赖

  • 最后一行 Successfully built ...

查看镜像:

docker images

六、运行容器(真正跑起来)

docker run --name hello_test hello_docker:v1

你会看到输出:

Hello from Docker!
Step 0
Step 1
...

👉 到这里,你已经完成了 60% 的 Docker 学习

七、进容器「手动调试」(极其重要)

1️⃣ 先启动一个不自动退出的容器

docker run -it --name hello_debug hello_docker:v1 bash

如果 CMD 是 python,会覆盖,所以你可以:

docker run -it --entrypoint bash hello_docker:v1

2️⃣ 在容器里做这些事

pwd
ls
python --version
pip list
python hello.py
👉 你现在看到的是一个“和宿主机完全隔离”的系统

八、理解 Docker 生命周期(必须会)

查看状态

docker ps        # 运行中
docker ps -a     # 所有

停止 / 删除

docker stop hello_test
docker rm hello_test

删除镜像

docker rmi hello_docker:v1

九、学会“挂载代码”(开发必备)

让你改代码不用重建镜像

docker run -it \
  -v $(pwd):/app \
  --name hello_mount \
  hello_docker:v1

📌 原理:

左边右边
宿主机目录 容器目录
实时同步 覆盖 COPY

十、你现在已经走完 Docker 全流程

你已经掌握了:

  • ✅ Dockerfile 编写

  • ✅ 镜像构建

  • ✅ 容器运行

  • ✅ 进入容器调试

  • ✅ 挂载代码

  • ✅ 容器 & 镜像清理

  • ✅ 与 conda 的本质区别

posted @ 2026-01-04 10:14  实数集  阅读(226)  评论(0)    收藏  举报