这是一个非常全面的 Docker 新手入门指南,从核心概念到常用命令,再到实战流程,帮你快速上手。

一、 Docker 核心概念

在学命令之前,先理解三个关键概念:

  1. 镜像

    • 类比:一个软件的安装包(比如 mysql.msi)。它是一个只读的模板,包含了运行软件所需的所有内容(代码、运行时、库、环境变量和配置文件)。

    • 例如:nginx:latestmysql:8.0ubuntu:20.04

  2. 容器

    • 类比:一个软件的运行实例。它是镜像运行时的实体。

    • 容器可以被创建、启动、停止、删除。每个容器都是相互隔离、安全的平台。

    • 镜像 和 容器 的关系,就像  和 对象实例 的关系。

  3. 仓库

    • 类比:手机的应用商店。用于存放镜像的地方。

    • Docker Hub 是官方的公共仓库,任何人都可以下载上面的镜像。你也可以搭建私有的仓库。


二、 Docker 安装

1、Windows / macOS:

访问 Docker 官网 https://www.docker.com/ 下载并安装 Docker Desktop

安装后,在终端(Windows 上用 CMD 或 PowerShell,macOS 上用 Terminal)输入 docker --version 验证是否成功。

2、Linux (以 Ubuntu 为例):

# 更新软件包索引
sudo apt update

# 安装依赖包
sudo apt install apt-transport-https ca-certificates curl software-properties-common

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

# 设置稳定版仓库
echo "deb [arch=amd64 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

# 安装 Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

# 启动 Docker 服务并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

# 将当前用户加入 docker 用户组(避免每次使用 sudo)
sudo usermod -aG docker $USER
# 执行后需要**重新登录**终端才能生效

三、 常用 Docker 命令

1. 镜像相关

搜索镜像docker search <镜像名>

docker search nginx

拉取(下载)镜像docker pull <镜像名>[:标签]

docker pull nginx:latest
docker pull ubuntu:20.04

列出本地镜像docker images 或 docker image ls

删除本地镜像docker rmi <镜像ID或名称>

docker rmi nginx:latest
# 强制删除(如果镜像正在被容器使用)
docker rmi -f nginx:latest
2. 容器相关

创建并启动容器docker run [选项] <镜像名> [命令]

这是最核心、最复杂的命令。

# 最基本运行(前台运行)
docker run nginx

# -d: 后台运行(守护进程)
docker run -d --name my_nginx nginx

# -p: 端口映射 [主机端口]:[容器端口]
docker run -d -p 8080:80 --name my_web nginx

# -v: 数据卷映射 [主机目录]:[容器目录] (持久化数据)
docker run -d -p 8080:80 -v /home/user/html:/usr/share/nginx/html --name my_web nginx

# -e: 设置环境变量
docker run -d -e MYSQL_ROOT_PASSWORD=my-secret-pw --name my_mysql mysql:8.0

# --rm: 容器停止后自动删除(常用于测试)
docker run --rm -it ubuntu:20.04 /bin/bash

# -it: 交互式终端(进入容器)
docker run -it ubuntu:20.04 /bin/bash

列出容器

docker ps          # 查看正在运行的容器
docker ps -a       # 查看所有容器(包括已停止的)

启动/停止/重启容器

docker start <容器名或ID>
docker stop <容器名或ID>     # 优雅停止
docker restart <容器名或ID>
docker kill <容器名或ID>     # 强制立即停止

进入正在运行的容器docker exec [选项] <容器名或ID> <命令>

# 在容器中执行一个命令
docker exec my_nginx ls /etc/nginx

# -it: 进入容器的交互式终端(最常用)
docker exec -it my_nginx /bin/bash

查看容器日志docker logs <容器名或ID>

docker logs my_nginx
docker logs -f my_nginx  # -f: 持续跟踪日志输出(类似 tail -f)

删除容器docker rm <容器名或ID>

docker rm my_nginx
# 强制删除运行中的容器
docker rm -f my_nginx
# 删除所有已停止的容器
docker container prune

查看容器信息docker inspect <容器名或ID>

四、 实战流程:以 Nginx 为例

假设你想在宿主机(你的电脑)的 8080 端口运行一个 Nginx 服务器,并且用你本地的网页文件替换 Nginx 默认的首页。

1、拉取镜像

docker pull nginx:latest

2、准备本地文件

在宿主机上创建一个目录,比如 /home/user/my_website,在里面放一个 index.html 文件。

3、运行容器(关键步骤)

docker run -d \
  --name my_nginx_container \
  -p 8080:80 \
  -v /home/user/my_website:/usr/share/nginx/html \
  nginx:latest

    -d: 后台运行。

    --name: 给容器起个好记的名字。

    -p 8080:80: 将宿主机的 8080 端口映射到容器的 80 端口。

    -v ...: 将宿主机的 /home/user/my_website 目录挂载到容器的 Nginx 默认网页目录。

    4、测试访问

    打开浏览器,访问 http://localhost:8080,你应该能看到你写的 index.html 内容。

    5、查看和管理

    docker ps                      # 查看容器是否在运行
    docker logs my_nginx_container # 查看 Nginx 访问日志
    docker exec -it my_nginx_container /bin/bash # 进入容器内部看看

    6、停止和清理

    docker stop my_nginx_container # 停止容器
    docker rm my_nginx_container   # 删除容器
    # 镜像可以保留,下次可以直接使用

    五、 使用 Dockerfile 构建自定义镜像

    当官方镜像不能满足需求时,你需要自己构建镜像。

    1、创建一个项目目录,并进入。

    2、创建一个名为 Dockerfile 的文件(无后缀)。

    3、编写 Dockerfile 内容

    # 使用官方 Python 运行时作为父镜像
    FROM python:3.9-slim
    
    # 设置工作目录为 /app
    WORKDIR /app
    
    # 将当前目录内容复制到容器的 /app 下
    COPY . /app
    
    # 安装 requirements.txt 中指定的任何所需包
    RUN pip install --no-cache-dir -r requirements.txt
    
    # 使端口 80 可供此容器外的环境使用
    EXPOSE 80
    
    # 定义环境变量
    ENV NAME World
    
    # 在容器启动时运行 app.py
    CMD ["python", "app.py"]

    4、构建镜像

    docker build -t my-python-app .
    # -t: 给镜像打标签,命名为 my-python-app
    # . : 表示当前目录是构建上下文

    5、运行自定义镜像

    docker run -d -p 4000:80 --name my-running-app my-python-app

    六、 使用 docker-compose 管理多容器应用

    当你的应用需要多个服务(如 Web 服务器 + 数据库)时,使用 docker-compose 可以简化管理。

    1、安装 Docker Desktop 自带 docker-compose。Linux 用户可能需要单独安装。

    2、创建 docker-compose.yml 文件

    version: '3.8'
    services:
      web:
        image: nginx:latest
        ports:
          - "8080:80"
        volumes:
          - ./html:/usr/share/nginx/html
        depends_on:
          - db
    
      db:
        image: mysql:8.0
        environment:
          MYSQL_ROOT_PASSWORD: secret
          MYSQL_DATABASE: myapp

    3、启动所有服务

    docker-compose up -d

    4、停止并移除所有服务

    docker-compose down

    总结

    1. 安装 Docker

    2. 从 docker pull 和 docker run 开始,这是最常用的命令。

    3. 理解 镜像(模板)和 容器(实例)的区别。

    4. 掌握三个核心概念:端口映射 (-p)数据卷 (-v)环境变量 (-e)

    5. 需要自定义环境时,学习 Dockerfile

    6. 需要管理复杂应用时,学习 docker-compose

    更多推荐