docker

docker

使用 Docker Compose 查看日志

基本用法

运行以下命令可以查看所有服务的日志:

docker compose logs

如果只想查看特定服务的日志,可以指定服务名称:

docker compose logs [service-name]

实时查看日志

使用 –follow 参数可以实时跟踪日志输出:

docker compose logs –follow [service-name]

显示时间戳

通过 -t–timestamps 参数,可以在日志中显示时间戳:

docker compose logs -t [service-name]

查看最新日志

使用 –tail 参数可以限制显示的日志行数,例如查看最近的 10 行日志:

docker compose logs --tail=10 [service-name]

综合示例

以下命令将实时查看某服务的最新 20 行日志,并显示时间戳:

docker compose logs –follow -t --tail=20 [service-name]


Docker run 命令详解

docker run 命令是 Docker 中最核心、最强大的命令之一。它基于指定的镜像创建一个新的容器,并启动它。这个命令提供了丰富的参数,允许我们对容器的运行环境进行精细化的配置,从网络、存储到资源限制和安全策略。

语法结构

docker run 的基本命令结构如下:

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
  • OPTIONS: 配置容器运行的参数,例如 -d (后台运行), -p (端口映射) 等。
  • IMAGE: 创建容器所依赖的镜像名称。
  • TAG | @DIGEST: 镜像的标签或摘要,默认为 latest
  • COMMAND & ARG: 在容器启动后,需要执行的命令及其参数 (如果镜像没有默认的启动命令)。

实用案例:部署一个 NGINX 网站服务器

让我们通过一个常见的例子来拆解 docker run 命令的用法。下面的命令会创建一个配置好的 NGINX 容器:

docker run -d \
  --name my_nginx \
  -p 8080:80 \
  -v /path/to/nginx/html:/usr/share/nginx/html \
  -v /path/to/nginx/conf:/etc/nginx/conf.d \
  --restart unless-stopped \
  nginx:latest

命令拆解:

  • docker run: Docker 的运行容器命令。
  • -d: 后台运行 (Detached)。让容器在后台以守护进程模式运行,而不是占据当前的终端。
  • --name my_nginx: 指定名称。为容器赋予一个易于识别的名称 my_nginx,方便后续管理。
  • -p 8080:80: 端口映射 (Port Mapping)。将主机的 8080 端口映射到容器的 80 端口。这样,访问主机的 8080 端口就相当于访问容器内的 NGINX 服务。
  • -v /path/to/nginx/html:/usr/share/nginx/html: 挂载数据卷 (Volume)。将主机上的网站文件目录 (/path/to/nginx/html) 挂载到容器内的 NGINX 网站根目录。这使得我们可以在主机上直接修改网页内容,并且数据得以持久化。
  • -v /path/to/nginx/conf:/etc/nginx/conf.d: 挂载配置文件。同理,将主机的 NGINX 配置文件目录挂载进去,方便我们自定义 NGINX 的配置。
  • --restart unless-stopped: 重启策略 (Restart Policy)。除非手动停止,否则在容器退出或 Docker 服务重启时,该容器会自动重启,保证了服务的高可用性。
  • nginx:latest: 指定镜像。告诉 Docker 使用名为 nginx 且标签为 latest 的镜像来创建容器。

常用参数分类详解

为了便于理解和查阅,我们将众多参数分为以下几类:

1. 容器运行模式

参数 长格式 描述 示例
-d --detach 后台模式运行:将容器作为守护进程在后台运行。 docker run -d redis
-it 交互模式运行-i (interactive) 保持标准输入打开,-t (tty) 分配一个伪终端。通常组合使用,允许你进入容器的 shell 进行交互。 docker run -it ubuntu /bin/bash
--rm 自动删除:容器退出时自动删除容器。非常适合用于执行临时性任务。 docker run --rm ubuntu echo "Hello"

2. 容器标识与命名

参数 长格式 描述 示例
--name 指定容器名称:为容器赋予一个唯一的、易于记忆的名称。 docker run --name my-db mysql
--label 添加元数据标签:为容器添加键值对形式的标签,便于组织和筛选。 docker run --label "env=production" nginx

3. 端口与网络

参数 长格式 描述 示例
-p --publish 端口映射:格式为 主机端口:容器端口 docker run -p 8080:80 nginx
--network 指定网络模式:将容器连接到指定的网络。常见模式有 bridge, host, none docker run --network my-net my-app
--link 连接到其他容器:(已不推荐,建议使用 --network) 在容器之间建立网络连接。 docker run --link my-redis:redis app
--hostname 设置容器主机名:在容器内部 /etc/hostname/etc/hosts 中设置主机名。 docker run --hostname my-server ubuntu
--dns 指定DNS服务器:为容器指定自定义的DNS服务器地址。 docker run --dns 8.8.8.8 nginx
--add-host 添加hosts映射:向容器的 /etc/hosts 文件添加一条 IP-主机名 映射。 docker run --add-host db:192.168.1.10 app

4. 数据卷与挂载 (Volume & Mounts)

参数 长格式 描述 示例
-v --volume 挂载数据卷:格式为 主机路径:容器路径。用于数据持久化和文件共享。 docker run -v /data:/var/lib/mysql mysql
--read-only 只读文件系统:将容器的文件系统设置为只读模式,以增强安全性。 docker run --read-only nginx
--tmpfs 挂载临时文件系统:在容器内创建一个基于内存的临时文件系统,容器停止后数据即销毁。 docker run --tmpfs /tmp ubuntu

5. 环境变量与工作目录

参数 长格式 描述 示例
-e --env 设置环境变量:为容器内部的应用程序设置环境变量。 docker run -e MYSQL_ROOT_PASSWORD=secret mysql
--env-file 从文件读取环境变量:从一个文件批量加载环境变量。 docker run --env-file ./env.list mysql
-w --workdir 设置工作目录:指定容器内部的默认工作目录,后续的 CMDENTRYPOINT 指令会在此目录下执行。 docker run -w /app node:18 node index.js

6. 资源限制与分配

参数 长格式 描述 示例
-m --memory 内存限制:设置容器可以使用的最大内存。 docker run -m 1g nginx
--cpu-shares CPU份额:设置容器的CPU资源相对权重(默认为1024)。 docker run --cpu-shares 512 my-app
--cpu-quota CPU配额:设置容器在每个 --cpu-period 周期内可以使用的CPU时间(微秒)。 docker run --cpu-quota=50000 my-app
--cpu-period CPU周期:设置CPU配额的周期(微秒),通常与 --cpu-quota 配合使用。 docker run --cpu-period=100000 my-app
--shm-size 共享内存大小:设置容器 /dev/shm 目录的大小。 docker run --shm-size 2g my-app
--ulimit 设置资源限制:设置内核级别的资源限制,如最大文件打开数。 docker run --ulimit nofile=1024:2048 my-app

7. 安全与权限

参数 长格式 描述 示例
--privileged 特权模式:赋予容器几乎等同于主机的root权限,可以访问所有设备。请谨慎使用! docker run --privileged my-app
-u --user 指定用户:指定容器内进程运行的用户名或UID。 docker run -u "nginx" nginx
--cap-add 添加内核能力:为容器增加指定的Linux内核能力。 docker run --cap-add=SYS_ADMIN my-app
--cap-drop 移除内核能力:从容器移除指定的Linux内核能力。 docker run --cap-drop=MKNOD my-app
--security-opt 设置安全选项:配置如AppArmor, Seccomp等安全模块。 docker run --security-opt seccomp=unconfined my-app

8. 重启策略

参数 长格式 描述 示例
--restart 指定重启策略:定义容器退出时的行为。
- no: 不自动重启 (默认)。
- on-failure[:N]: 仅在非零状态退出时重启,可指定最大重启次数。
- always: 无论退出状态码是什么,总是重启。
- unless-stopped: 总是重启,除非容器被手动停止。
docker run --restart=always redis

更新: 2025-09-01 14:49:54
原文: https://www.yuque.com/duifangzhengzaishuru-rqbua/axyc58/ly9t4sat71u4evxg