DockerHub: https://hub.docker.com/

# 配置

安装 Docker

curl -fsSL https://get.docker.com -o install-docker.sh
sudo sh install-docker.sh
# 或者
sudo curl -fsSL https://get.docker.com| bash -s docker --mirror Aliyun

启动 Docker

sudo systemctl start docker
sudo systemctl enable docker

# 镜像

# 拉取镜像

# 完整格式
docker pull docker.io/library/nginx:latest
# 若是官网渠道下的镜像则可省略
docker pull library/nginx:latest
docker pull nginx:latest
# latest 为版本号 不填则默认最新版本
docker pull nginx

docker.io/library/ 为 docker 官方的公共仓库 library 可省略

# 管理镜像

  • docker images : 列出本地存储的所有镜像
  • docker rmi (IMAGE ID) : 删除镜像
  • docker ps : 列出当前正在运行的容器
  • docker rm (CONTAINER ID 或 NAMES) : 删除 (运行) 容器,可选参数 -f 强制删除容器
  • docker restart (CONTAINER ID 或 NAMES) : 重启容器
  • docker stop (CONTAINER ID 或 NAMES) : 停止已启动的容器
  • docker start (CONTAINER ID 或 NAMES) : 启动已停止的容器

对于已停止的容器而言,需要通过 docker ps -a 查看所有容器 (包括停止与开启)

# 镜像网络

用于容器之间的通信,容器间可使用 NAMES 代替 IP 地址

  • docker network ls : 列出所有网络
  • docker network create (network) : 创建一个新的网络 (Bridge 网络)
  • docker network rm (network) : 删除指定的网络
  • docker network connect (network) (container) : 连接容器到网络
  • docker network disconnect (network) (container) : 断开容器与网络的连接

# 容器

# 运行容器

docker run nginx : 启动容器并运行命令

若不存在镜像,则 run 命令会先拉取镜像再启动新的容器

常用参数:

  • -d : 后台运行容器并返回容器 ID
  • -p (host_port:container_port) : 端口映射 宿主机端口:容器内端口;将本地端口映射到容器端口
  • -v (host_dir:container_dir) : 挂载卷 宿主机目录:容器内目录;将主机目录挂载到容器目录
  • -e (ENVIRONMENT=value) : 设置环境变量
  • -it : 交互式运行容器,即进入容器内部命令行
  • --name (docker_name) : 设置容器名称
  • --rm : 容器停止后自动删除容器
  • --network (网络模式 或 连接网络) : 指定容器的网络模式 ;默认 Bridge 模式
  • --restart [always、unless-stopped] : 容器的重启策略

always : 容器停止就立刻重启 ;unless-stopped : 除手动停止的容器外,容器停止就立刻重启

# 容器内管理

docker exec [OPTIONS] (CONTAINER ID 或 NAMES) (COMMAND) : 于运行中的容器内执行命令

# 容器内执行 LinuxShell
docker exec my_container ps -ef
# 参数 `-it` 可在容器里启动交互式的 Shell (指定 /bin/bash)
docker exec -it my_container /bin/sh

# 制作

# 配置文件

新建 Dockerfile 文件,这是一个用来构建镜像的文本文件
常用指令:

  • FROM (nginx:latest) : 指定基础镜像,以基础镜像为模板构建 (例如 Python)
  • WORKDIR (/Directory) : 设置指令工作目录
  • COPY (当前目录 工作目录) : 复制文件或目录到镜像
  • RUN (ShellCommand) : 构建镜像过程中执行命令,执行终端 Shell 命令
  • ENV (key1=value1 key2=value2) : 设置环境变量
  • EXPOSE (8080) : 声明容器运行时监听的端口;实际端口以创建容器 -p 参数为主
  • CMD (["可执行文件或命令","..."]) : 容器创建时的默认命令;命令可以被其他命令覆盖
  • ENTRYPOINT (["可执行文件或命令","..."]) : 容器创建时的主要命令;命令不会被覆盖,且一定会执行
FROM python:3.13-slim
# 设置工作目录
WORKDIR /app
# 复制 当前目录 至 当前工作目录 /app下
COPY . .

RUN pip install -r requirements.txt

ENTRYPOINT ["python3","main.py"]

# 推送镜像

# 登录 DockerHub
docker login
# 参数 `-t` 指定镜像名称;若不推送,则 username 可省略;`.` 表示当前目录下
docker build -t (username/docker_name:latest) .
# 推送镜像
docker push (username/docker_name:latest)

# Docker Compose

# 格式

docker network create docker_network
docker run -d \
--name docker_name_1 \
-e ENVIRONMENT_1=value_1 \
-e ENVIRONMENT_2=value_2 \
-v /my/data:/data \
image_1:latest
docker run -d \
--name docker_name_2 \
-p 8099:8099 \
image_2

其对应的 Compose 文件为:

docker-compose.yml

# 自动创建子网络
services:
    docker_name_1:
        image: image_1:lates
        environment:
            ENVIRONMENT_1: value_1
            ENVIRONMENT_2: value_2
        volumes:
            - /my/data:/data
            
    docker_name_2:
        image: image_2
        ports:
            - 8099:8099
        # 先启动 `docker_name_1`, 再启动 `docker_name_2`
        depends_on:
            - docker_name_1

小技巧:可用 AI 进行解析转换

# 运行

启动项目

# 参数 `-d` 表示后台运行
docker compose up -d

关闭项目

# 停止并删除容器
docker compose down
# 停止容器 但不删除
docker compose stop
# 启动停止的容器
docker compose start

参数 -f File.yml 可指定 Compose 配置文件;默认识别 docker-compose.yml 文件