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 |
设置工作目录:指定容器内部的默认工作目录,后续的 CMD 或 ENTRYPOINT 指令会在此目录下执行。 |
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