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 文件