Docker从入门到实战

一、为什么需要Docker?

Docker是一个开源的容器化平台,让开发者可以打包应用及其依赖到”容器”中,实现”一次构建,到处运行”。

1.1 传统部署 vs Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
┌─────────────────────────────────────────────────────────────────┐
│ 传统部署方式 │
├─────────────────────────────────────────────────────────────────┤
│ 开发者机器: "在我电脑上能跑啊!" │
│ ↓ │
│ 测试环境: 缺少这个库、版本不对、系统不兼容... │
│ ↓ │
│ 生产环境: 又出bug了!来回切换环境搞死人 😤 │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐
│ Docker部署方式 │
├─────────────────────────────────────────────────────────────────┤
│ 开发 → 打包成镜像 → 镜像拉到任何机器都能跑 ✅ │
│ ↓ │
│ 测试: 拉镜像 → 跑起来 │
│ ↓ │
│ 生产: 拉镜像 → 跑起来 │
│ │
│ "Build once, run anywhere" 🐳 │
└─────────────────────────────────────────────────────────────────┘

1.2 核心概念

概念 说明
镜像(Image) 模板,相当于”类”
容器(Container) 镜像的实例,相当于”对象”
仓库(Repository) 存放镜像的地方,如Docker Hub

二、安装Docker

2.1 Windows安装

1
2
3
4
5
6
7
8
9
10
11
12
# 方法一:安装 Docker Desktop
# 1. 访问 https://www.docker.com/products/docker-desktop
# 2. 下载 Windows 版本
# 3. 双击安装包,按提示操作
# 4. 启动 Docker Desktop

# 验证安装
docker --version
# Docker version 24.x.x

docker run hello-world
# 如果看到 "Hello from Docker!" 说明安装成功

2.2 Ubuntu安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# Step 1: 更新apt源
sudo apt update

# Step 2: 安装依赖
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

# Step 3: 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Step 4: 添加Docker仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Step 5: 安装Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# Step 6: 启动Docker
sudo systemctl start docker
sudo systemctl enable docker

# Step 7: 验证安装
docker --version
sudo docker run hello-world

2.3 配置Docker镜像加速

国内访问Docker Hub较慢,建议配置镜像加速:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建配置目录
sudo mkdir -p /etc/docker

# 配置镜像加速(选择其中一个)
sudo tee /etc/docker/daemon.json <<EOF
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF

# 重启Docker
sudo systemctl daemon-reload
sudo systemctl restart docker

# 验证配置
docker info | grep -A 10 "Registry Mirrors"

三、Docker镜像操作

3.1 搜索镜像

1
2
3
4
5
# 搜索镜像
docker search nginx

# 搜索stars数大于1000的镜像
docker search --filter stars=1000 nginx

3.2 拉取镜像

1
2
3
4
5
6
7
8
# 拉取最新镜像
docker pull nginx

# 拉取指定版本
docker pull nginx:1.25

# 拉取指定系统
docker pull ubuntu:22.04

3.3 查看镜像

1
2
3
4
5
6
7
8
# 查看本地所有镜像
docker images

# 查看镜像详情
docker image inspect nginx:latest

# 查看镜像ID
docker images -q

3.4 删除镜像

1
2
3
4
5
6
7
8
# 删除指定镜像
docker rmi nginx:latest

# 强制删除
docker rmi -f nginx:latest

# 删除所有未使用的镜像
docker image prune -a

四、Docker容器操作

4.1 创建并运行容器

1
2
3
4
5
6
7
8
9
10
11
# 运行一个交互式容器
docker run -it --name my-ubuntu ubuntu:22.04 /bin/bash

# 运行一个守护式容器(后台运行)
docker run -d --name my-nginx nginx

# 运行并映射端口
docker run -d -p 8080:80 --name my-nginx nginx

# 运行并挂载目录
docker run -d -p 8080:80 -v /home/user/html:/usr/share/nginx/html --name my-nginx nginx

4.2 容器常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 查看运行中的容器
docker ps

# 查看所有容器(包括停止的)
docker ps -a

# 启动容器
docker start my-nginx

# 停止容器
docker stop my-nginx

# 重启容器
docker restart my-nginx

# 删除容器
docker rm my-nginx

# 强制删除运行中的容器
docker rm -f my-nginx

# 查看容器日志
docker logs my-nginx

# 实时查看日志
docker logs -f my-nginx

# 进入容器内部
docker exec -it my-nginx /bin/bash

# 查看容器详细信息
docker inspect my-nginx

4.3 容器资源限制

1
2
3
4
5
6
7
8
# 限制内存
docker run -d --memory=512m --name limited-app nginx

# 限制CPU
docker run -d --cpus=0.5 --name limited-app nginx

# 限制内存和CPU
docker run -d --memory=512m --cpus=0.5 --name limited-app nginx

五、Dockerfile构建镜像

5.1 基础语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 指定基础镜像
FROM python:3.11-slim

# 设置工作目录
WORKDIR /app

# 复制文件
COPY requirements.txt .

# 安装依赖
RUN pip install -r requirements.txt

# 复制项目文件
COPY . .

# 暴露端口
EXPOSE 8080

# 启动命令
CMD ["python", "app.py"]

5.2 实战:构建Python Web应用镜像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 1. 创建项目目录
mkdir myapp && cd myapp

# 2. 创建 app.py
cat > app.py <<EOF
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
return 'Hello Docker!'

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
EOF

# 3. 创建 requirements.txt
cat > requirements.txt <<EOF
flask==3.0.0
EOF

# 4. 创建 Dockerfile
cat > Dockerfile <<EOF
FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .
RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

COPY . .

EXPOSE 5000

CMD ["python", "app.py"]
EOF

# 5. 构建镜像
docker build -t my-flask-app .

# 6. 运行容器
docker run -d -p 5000:5000 --name flask-app my-flask-app

# 7. 访问测试
curl http://localhost:5000
# 输出: Hello Docker!

5.3 Dockerfile最佳实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ❌ 不好:层层叠加导致镜像过大
FROM ubuntu
RUN apt-get update
RUN apt-get install -y python
RUN apt-get install -y python-pip
RUN pip install flask
# ... 更多RUN指令

# ✅ 好:减少层数,清理缓存
FROM ubuntu
RUN apt-get update && \
apt-get install -y python3 python3-pip && \
rm -rf /var/lib/apt/lists/*

# ✅ 更好:使用轻量级基础镜像
FROM python:3.11-slim
RUN pip install --no-cache-dir flask

六、Docker Compose编排

6.1 安装Docker Compose

1
2
3
4
5
6
7
# 方法一:安装Docker Desktop(自带)
# 方法二:手动安装
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# 验证
docker-compose --version

6.2 docker-compose.yml语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '3.8'

services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
environment:
- FLASK_ENV=development
depends_on:
- redis

redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- redis-data:/data

volumes:
redis-data:

6.3 常用命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启动所有服务
docker-compose up -d

# 停止所有服务
docker-compose down

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 构建并启动
docker-compose up -d --build

# 重启单个服务
docker-compose restart web

七、实战案例

7.1 搭建MySQL服务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 1. 创建数据目录
mkdir -p ~/mysql/data

# 2. 启动MySQL容器
docker run -d \
--name mysql-server \
-e MYSQL_ROOT_PASSWORD=root123 \
-e MYSQL_DATABASE=myapp \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=user123 \
-p 3306:3306 \
-v ~/mysql/data:/var/lib/mysql \
mysql:8

# 3. 等待MySQL启动(约30秒)
docker logs -f mysql-server

# 4. 连接测试
docker exec -it mysql-server mysql -uroot -proot123

7.2 搭建Redis缓存

1
2
3
4
5
6
7
8
9
10
# 启动Redis
docker run -d \
--name redis-server \
-p 6379:6379 \
-v ~/redis/data:/data \
redis:7-alpine \
redis-server --appendonly yes

# 连接Redis
docker exec -it redis-server redis-cli

7.3 搭建Nginx反向代理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# 1. 创建配置文件
mkdir -p ~/nginx/conf
cat > ~/nginx/conf/nginx.conf <<EOF
server {
listen 80;
server_name localhost;

location / {
proxy_pass http://web:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
EOF

# 2. 创建docker-compose.yml
cat > ~/nginx/docker-compose.yml <<EOF
version: '3.8'

services:
web:
image: python:3.11-slim
working_dir: /app
command: python -m http.server 5000
volumes:
- ./app:/app

nginx:
image: nginx:alpine
ports:
- "8080:80"
volumes:
- ./conf/nginx.conf:/etc/nginx/conf.d/default.conf
depends_on:
- web
EOF

# 3. 启动
cd ~/nginx && docker-compose up -d

八、常用命令速查

8.1 镜像命令

命令 说明
docker images 查看本地镜像
docker pull <image> 拉取镜像
docker rmi <image> 删除镜像
docker build -t <name> . 构建镜像

8.2 容器命令

命令 说明
docker ps 查看运行中的容器
docker ps -a 查看所有容器
docker run -d <image> 后台运行容器
docker run -it <image> 交互式运行
docker start <container> 启动容器
docker stop <container> 停止容器
docker rm <container> 删除容器
docker logs <container> 查看日志
docker exec -it <container> bash 进入容器

8.3 Docker Compose命令

命令 说明
docker-compose up -d 启动所有服务
docker-compose down 停止所有服务
docker-compose ps 查看服务状态
docker-compose logs -f 查看日志

九、常见问题

9.1 端口占用

1
2
3
4
5
# 查看端口占用
netstat -tlnp | grep 8080

# 找到占用进程并杀死
kill -9 <PID>

9.2 磁盘空间不足

1
2
3
4
5
# 清理无用数据
docker system prune -a

# 清理构建缓存
docker builder prune

9.3 容器内无法访问网络

1
2
3
4
5
# 检查DNS配置
docker exec <container> cat /etc/resolv.conf

# 使用host网络模式
docker run --network=host <container>

十、进阶学习路线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────────────────────────────────────────────────────────┐
│ Docker学习路线 │
├─────────────────────────────────────────────────────────────────┤
│ │
│ 入门 ──→ 镜像操作 ──→ 容器操作 ──→ Dockerfile ──→ Compose │
│ │
│ ↓ │
│ │
│ 进阶 │
│ ├── Docker Swarm / Kubernetes 容器编排 │
│ ├── CI/CD 持续集成/部署 │
│ ├── 安全加固与优化 │
│ └── 微服务架构 │
│ │
└─────────────────────────────────────────────────────────────────┘

参考资料


持续更新中…欢迎收藏!

#Docker #容器 #DevOps #教程 #虚拟化


Docker从入门到实战
https://r0f2.my/post/34-docker-getting-started/
作者
JA
发布于
2026年2月13日
许可协议