Docker 容器使用(快速上手)

Docker 容器使用入门:从零开始掌握现代开发的核心工具

在当今的软件开发环境中,Docker 已经成为不可或缺的一部分。无论你是刚入门的编程新手,还是已有几年经验的中级开发者,掌握 Docker 容器使用,都意味着你离“高效、一致、可复现”的开发环境更近了一步。

想象一下,你写的代码在本地运行得好好的,一部署到服务器就报错。问题出在环境差异上:你的电脑装的是 Python 3.9,而服务器用的是 Python 3.6。这种“在我机器上跑得好好的”尴尬,正是 Docker 要解决的核心痛点。

Docker 通过容器化技术,把应用及其依赖打包成一个独立的、可移植的单元——容器。这个容器就像一个“微型虚拟机”,但比传统虚拟机更轻量、启动更快、资源占用更少。你只需要在任何地方运行同一个镜像,就能保证应用行为完全一致。

接下来,我们就从安装、基本操作到实战部署,一步步带你掌握 Docker 容器使用的核心技能。


安装与环境准备

在开始之前,你需要确保系统已安装 Docker。Docker 官方提供了 Windows、macOS 和 Linux 的安装包,安装过程非常简单。

在 Linux 系统(以 Ubuntu 为例)上,你可以通过以下命令安装:

sudo apt update

sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

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

sudo apt update

sudo apt install -y docker-ce docker-ce-cli containerd.io

sudo usermod -aG docker $USER

安装完成后,重启终端或执行 newgrp docker 使用户组生效。

验证安装是否成功:

docker --version

docker run hello-world

💡 小提示:hello-world 是 Docker 官方提供的测试镜像,它会打印一条欢迎信息。这个命令也帮你验证了 Docker 引擎是否能拉取并运行容器。


镜像与容器:理解 Docker 的“蓝图”与“实例”

在 Docker 中,有两个核心概念:镜像(Image)容器(Container)

  • 镜像:可以理解为“应用的蓝图”或“模板”。它包含了运行应用所需的所有文件、依赖、环境变量和启动命令。
  • 容器:是镜像的“运行实例”。你可以把镜像想象成一张 DVD 光盘,而容器就是把这张光盘放进光驱播放出来的视频。

例如,我们要运行一个简单的 Nginx Web 服务器:

docker pull nginx:latest

docker images

输出示例:

REPOSITORY    TAG       IMAGE ID       CREATED         SIZE
nginx         latest    abc123def456   2 days ago        141MB

现在,我们基于这个镜像启动一个容器:

docker run -d -p 8080:80 --name my-nginx nginx:latest

打开浏览器访问 http://localhost:8080,你应该能看到 Nginx 的欢迎页面。

📌 提示:如果你运行时提示“port already in use”,说明端口被占用,可以改用 -p 8081:80 试试。


常用容器操作命令详解

掌握常用命令,是你日常使用 Docker 容器使用的核心。下面是一些最实用的命令,配合注释帮你理解。

docker ps

docker ps -a

docker stop my-nginx

docker start my-nginx

docker rm my-nginx

docker rmi nginx:latest

docker logs my-nginx

docker exec -it my-nginx bash

🔍 重要:docker exec -it 命令中:

  • -i:保持标准输入打开(允许交互)
  • -t:分配一个伪终端(TTY)
  • bash:进入容器后执行的命令

当你执行 docker exec -it my-nginx bash,你就进入了容器内部,可以像在 Linux 服务器上一样操作文件、查看进程、调试应用。


构建自己的 Docker 镜像:从代码到容器

光用现成的镜像不够,我们往往需要将自己写的代码打包进容器。这就要用到 Dockerfile

假设你有一个简单的 Python Web 项目,结构如下:

my-flask-app/
├── app.py
├── requirements.txt
└── Dockerfile

app.py 内容:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return '<h1>Hello from Docker!</h1>'

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

requirements.txt

Flask==2.3.3

现在,创建 Dockerfile

FROM python:3.11-slim

WORKDIR /app

COPY requirements.txt .

RUN pip install -r requirements.txt

COPY app.py .

EXPOSE 5000

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

✅ 注释说明:

  • FROM:指定基础镜像,相当于“起点”
  • WORKDIR:设置容器内的工作路径,类似 cd 命令
  • COPY:将本地文件复制到容器中
  • RUN:在构建镜像时执行命令(如安装包)
  • EXPOSE:声明容器运行时监听的端口(不自动映射)
  • CMD:容器启动时默认执行的命令

构建镜像:

docker build -t my-flask-app:1.0 .
  • -t:给镜像打标签(命名:版本)
  • .:表示当前目录为上下文(Dockerfile 所在位置)

构建成功后,运行容器:

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

访问 http://localhost:5000,你应该能看到 “Hello from Docker!” 的页面。


实战案例:部署一个前后端分离项目

我们来模拟一个真实场景:一个前端 Vue 3.0 项目 + 后端 Flask 项目,用 Docker 容器化部署。

项目结构:

full-stack-app/
├── backend/
│   ├── app.py
│   ├── requirements.txt
│   └── Dockerfile
├── frontend/
│   ├── src/
│   ├── package.json
│   └── Dockerfile
└── docker-compose.yml

我们使用 docker-compose.yml 来统一管理多个容器。

version: '3.8'

services:
  backend:
    build:
      context: ./backend
    ports:
      - "5000:5000"
    restart: unless-stopped

  frontend:
    build:
      context: ./frontend
    ports:
      - "8080:80"
    restart: unless-stopped

✅ 说明:

  • version: '3.8':指定 Compose 文件版本
  • services:定义要运行的服务
  • build.context:指定构建上下文路径
  • restart: unless-stopped:容器异常退出后自动重启

frontend/Dockerfile 中:

FROM node:18-alpine

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 80

CMD ["npm", "run", "serve"]

backend/Dockerfile 中(已定义,略)。

最后,运行:

docker-compose up -d

-d:后台运行所有服务

访问 http://localhost:8080,前端页面加载,http://localhost:5000 返回 JSON 数据,前后端通信正常。


总结:Docker 容器使用的核心价值

通过本文,你已经掌握了 Docker 容器使用的关键技能:从安装、运行、管理容器,到构建自定义镜像,再到多服务协同部署。

Docker 容器使用,不仅仅是一个“技术工具”,更是一种开发思维的转变:将环境与代码解耦,实现“一次构建,处处运行”

无论是团队协作、CI/CD 流水线,还是云原生部署,Docker 都是绕不开的基础。对初学者而言,它是快速验证想法的利器;对中级开发者,它是提升开发效率、减少环境问题的“安全带”。

别再为“在我机器上能跑”的问题烦恼了。现在,就动手试试吧,用 Docker 容器使用你的第一个完整项目。