Docker 常用命令与实战:从入门到部署一个简单应用

前言

Docker 已经成为后端开发和运维的必备技能。无论是本地开发环境搭建,还是线上服务部署,掌握 Docker 都能大幅提升效率。本文从核心概念出发,整理最常用的 Docker 命令,并通过一个实战示例,带你完成"编写 Dockerfile → 构建镜像 → 运行容器 → 使用 docker-compose 编排"的完整流程。


一、Docker 核心概念

  • 镜像(Image):只读模板,包含运行应用所需的代码、运行时、库和配置。
  • 容器(Container):镜像的运行实例,相互隔离,可启动、停止、删除。
  • 仓库(Registry):存放镜像的地方,如 Docker Hub、阿里云镜像仓库。
  • Dockerfile:描述如何构建镜像的文本文件。
  • docker-compose:用于定义和运行多容器应用的工具。

二、常用命令速查

1. 镜像相关

bash 复制代码
# 拉取镜像
docker pull nginx:latest

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx:latest

# 构建镜像(-t 指定名称和标签,. 表示当前目录)
docker build -t myapp:1.0 .

2. 容器相关

bash 复制代码
# 运行容器(-d 后台运行,-p 端口映射,--name 指定名称)
docker run -d -p 8080:80 --name mynginx nginx:latest

# 查看运行中的容器
docker ps

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

# 停止 / 启动 / 重启容器
docker stop mynginx
docker start mynginx
docker restart mynginx

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

# 查看容器日志
docker logs -f mynginx

# 删除容器
docker rm -f mynginx

3. 其他常用命令

bash 复制代码
# 查看容器资源占用
docker stats

# 查看容器详细信息
docker inspect mynginx

# 清理无用镜像、容器、网络
docker system prune -a

三、实战:用 Docker 部署一个 Python Flask 应用

1. 项目结构

text 复制代码
flask-demo/
├── app.py
├── requirements.txt
└── Dockerfile

2. 编写应用代码

app.py:

python 复制代码
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)

requirements.txt:

text 复制代码
flask==3.0.0

3. 编写 Dockerfile

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"]

4. 构建并运行

bash 复制代码
docker build -t flask-demo:1.0 .
docker run -d -p 5000:5000 --name flask-demo flask-demo:1.0

浏览器访问 http://localhost:5000,看到 Hello, Docker! 即部署成功。


四、使用 docker-compose 编排多容器应用

如果应用需要依赖 MySQL、Redis 等服务,手动 docker run 会比较繁琐。这时可以使用 docker-compose.yml。

示例:Flask + Redis

yaml 复制代码
version: "3.8"

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis
  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"

启动:

bash 复制代码
docker-compose up -d

停止并删除:

bash 复制代码
docker-compose down

五、常见问题

  1. 端口被占用

    修改 -p 前面的宿主机端口,如 -p 8081:80。

  2. 容器启动后立即退出

    查看日志:docker logs 容器名,通常是启动命令写错或缺少前台进程。

  3. 构建镜像很慢

    配置国内镜像加速器,或在 Dockerfile 中合理利用缓存(先 COPY 依赖文件,再安装依赖)。

  4. 修改代码后容器内不生效

    开发阶段可以挂载目录:docker run -v $(pwd):/app ...,生产环境建议重新构建镜像。


六、总结

Docker 的核心用法可以概括为:

  • 镜像 :用 Dockerfile 定义,docker build 构建。
  • 容器 :用 docker run 启动,docker exec 进入调试。
  • 多容器:用 docker-compose 编排,一条命令启动整套环境。

掌握这些,基本可以覆盖日常开发和部署的大部分场景。建议先从部署一个简单应用开始,熟悉后再逐步深入网络、数据卷、镜像优化等高级话题。

相关推荐
吴声子夜歌1 小时前
Docker入门与实战——Docker Swarm模式(跨主机容器集群管理)
docker
flytalei4 小时前
GitOps 实战:基于 Argo CD 的 Kubernetes 应用版本回滚
云原生·容器·kubernetes
pirateeee4 小时前
在ubuntu中通过 docker 搭建 yocto 开发环境
ubuntu·docker·eureka
墨神谕4 小时前
Docker 数据卷(Volume)详解:Dockerfile 声明、Docker Compose 挂载宿主机目录及持久化实战
运维·docker·容器
zh73144 小时前
Docker Desktop docker_data.vhdx 使用时间长了过大,解决办法
运维·docker·容器
墨神谕4 小时前
Docker Compose 从入门到实战:核心概念、YAML 配置详解、常用命令与多容器部署
运维·docker·容器
Tronlong创龙4 小时前
TLT153工控机:Docker 环境部署与容器开发实践(上)
docker·嵌入式开发·硬件开发·工业控制·工业开发板
KIDULT°5 小时前
【K8s 实战】Volume 存储、PV/PVC、ConfigMap 与 Secret 完整实验
云原生·容器·kubernetes
木雷坞5 小时前
PHP两项9.2分漏洞:Docker容器更新与版本核验教程
开发语言·docker·php