Docker命令

Docker命令
容器命令
docker attach:连接到正在运行的容器。docker create:创建一个新的容器但不启动它。docker cp:在容器和主机之间复制文件和文件夹。docker diff:显示容器文件系统中的更改。docker exec:在正在运行的容器中执行新命令。docker export:将容器的文件系统导出为 tar 归档文件。docker inspect:显示有关 Docker 对象(容器、镜像、网络等)的详细信息。docker kill:终止正在运行的容器。docker logs:获取容器的日志。docker pause:暂停一个正在运行的容器。docker port:显示容器的公开端口。docker ps:列出正在运行的容器。docker restart:重启容器。docker rm:删除一个或多个容器。docker start:启动一个或多个已经创建的容器。dockerstop:停止一个或多个正在运行的容器。docker top:显示容器中正在运行的进程。docker unpause:恢复暂停的容器。docker update:更新容器配置。docker wait:阻塞直到容器停止。
** 镜像命令**
docker build:从 Dockerfile 构建镜像。docker commit:从容器创建一个新的镜像。docker history:显示镜像的历史记录。docker images:列出本地镜像。docker import:从归档文件或 URL 创建镜像。docker load:从归档文件中加载镜像。docker pull:从 Docker Hub 或其他 Docker Registry 拉取镜像。docker push:将本地镜像推送到 Docker Hub 或其他 Docker Registry。docker rmi:删除一个或多个镜像。docker save:将镜像保存为归档文件。docker tag:为镜像添加标签。
** 网络命令**
docker network:管理 Docker 网络。
** Swarm 命令**
docker node:管理 Docker 集群节点。docker service:管理 Docker Swarm 服务。docker swarm:管理 Docker Swarm。
** 系统命令**
docker info:显示 Docker 系统信息。docker login:登录到 Docker Hub 或其他 Docker Registry。docker logout:从 Docker Hub 或其他 Docker Registry 注销。docker system:管理 Docker 系统。docker version:显示 Docker 版本信息。
docker compose文件
version:指定 Compose 文件的版本。当前支持的版本为 2.x、3.x、3.1、3.2、3.3 等。services:定义要运行的服务,可以是一个或多个服务。networks:定义要使用的网络,可以是一个或多个网络。volumes:定义要使用的卷,可以是一个或多个卷。
除了上述参数外,Docker Compose 文件还支持其他参数,如 environment、ports、depends_on、restart、image、command、volumes、networks 等。这些参数的作用如下:
environment:设置环境变量,可以是一个列表或一个字典。ports:将容器端口映射到主机端口。depends_on:定义服务之间的依赖关系,以便在启动依赖服务之前启动当前服务。restart:定义容器失败时的重启策略。image:使用的镜像名称和标签。command:在容器中运行的命令,可以覆盖 Dockerfile 中的CMD。volumes:将主机路径或命名卷挂载到容器中。networks:将服务添加到指定的网络中。
除了上述参数外,Docker Compose 文件还支持其他参数,如 network_mode、container_name、links、user、working_dir、entrypoint 等。这些参数的作用如下:
network_mode:指定容器要使用的网络模式。container_name:指定容器的名称。links:链接到其他服务。user:设置容器中运行进程的用户。working_dir:设置容器工作目录。entrypoint:覆盖 Dockerfile 中的ENTRYPOINT。
Docker Compose 文件还支持通过环境变量文件或命令行参数覆盖 Compose 文件中的参数。例如,可以使用 -f 参数指定 Compose 文件的路径,使用 --project-name 参数指定项目名称,使用 --env-file 参数指定环境变量文件的路径等。
1 .env环境变量
1.1 定义
在使用 Docker 构建和运行容器时,可以通过使用
.env文件来设置环境变量和配置参数。.env文件是一个文本文件,其中包含变量和其对应的值,每行一个变量,格式为VAR_NAME=VAR_VALUE。在 Dockerfile 中,可以使用
ENV命令来设置环境变量,但如果使用.env文件,则可以在 Dockerfile 中使用${VAR_NAME}的语法来引用变量,例如:
VAR_NAME=${VAR_NAME}
在 Docker Compose 配置文件中,也可以使用
${VAR_NAME}的语法来引用.env文件中的变量。例如:
version: '3'
services:
web:
image: nginx
environment:
MY_VAR: ${VAR_NAME}
1.2 使用
# 构建镜像
docker compose --env-file .env up -d
# .env 文件中的变量仅在构建和运行Docker 容器时才会生效
# 可以在容器启动命令中使用 -e 参数来将其传递给容器
docker run -e MY_VAR=${VAR_NAME} myimage
# 查看环境变量的引用
docker-compose --env-file ../.env config
2. docker compose up
2.1 参数
-d:在后台模式下启动容器。--no-color:禁用输出的颜色。--quiet-pull:禁止输出拉取镜像的详细信息。--no-deps:不启动服务依赖的服务。--force-recreate:强制重新创建容器,即使容器已经存在。--always-recreate-deps:重新创建所有服务依赖的容器。--no-recreate:不重新创建容器,即使容器已经存在。--no-build:不构建镜像,直接使用已有的镜像。--build:在启动容器之前构建镜像。--abort-on-container-exit:当容器退出时,停止所有容器的运行。--attach-dependencies:在启动容器之前启动所有服务依赖的服务。--remove-orphans:移除无关的容器,即没有被 Compose 文件中定义的服务所依赖的容器。--timeout TIMEOUT:设置容器启动的超时时间,默认为 10 秒。--renew-anon-volumes:在启动容器之前删除匿名卷,并重新创建它们。--remove-volumes:在移除容器时同时移除关联的匿名和命名卷。--volumes:在容器之间共享命名卷。--scale SERVICE=NUM:指定要启动的服务以及要启动的容器数量,例如--scale web=2表示启动web服务的 2 个容器。--no-log-prefix:不在日志中输出服务名称的前缀。--log-level LEVEL:设置日志的级别,默认为info。--exit-code-from SERVICE:从指定的服务获取退出代码,并在所有容器停止时退出。--disable-content-trust:禁用 Docker Content Trust。--pull:在启动容器之前拉取最新的镜像。--no-healthcheck:不运行健康检查。--compose-file FILE:指定要使用的 Compose 文件,可以指定多个文件。--project-namePROJECT_NAME:指定 Compose 项目的名称。-f, --file FILE:指定要使用的 Compose 文件,可以指定多个文件。--env-file PATH:指定要使用的环境变量文件。--env, -e KEY=VALUE:设置环境变量,可以指定多个。--no-recreate:不重新创建容器,即使容器已经存在。--no-start:不启动容器,只构建镜像。--scale SERVICE=NUM:指定要启动的服务以及要启动的容器数量,例如--scale web=2表示启动web服务的 2 个容器。--remove-orphans:移除无关的容器,即没有被 Compose 文件中定义的服务所依赖的容器。--no-build:不构建镜像,直接使用已有的镜像。--build:在启动容器之前构建镜像。--always-recreate-deps:重新创建所有服务依赖的容器。--force-recreate:强制重新创建容器,即使容器已经存在。--no-deps:不启动服务依赖的服务。--abort-on-container-exit:当容器退出时,停止所有容器的运行。--attach-dependencies:在启动容器之前启动所有服务依赖的服务。--remove-orphans:移除无关的容器,即没有被 Compose 文件中定义的服务所依赖的容器。--timeout TIMEOUT:设置容器启动的超时时间,默认为 10 秒。--renew-anon-volumes:在启动容器之前删除匿名卷,并重新创建它们。--remove-volumes:在移除容器时同时移除关联的匿名和命名卷。--volumes:在容器之间共享命名卷。--no-log-prefix:不在日志中输出服务名称的前缀。--log-level LEVEL:设置日志的级别,默认为info。--exit-code-from SERVICE:从指定的服务获取退出代码,并在所有容器停止时退出。--disable-content-trust:禁用 Docker Content Trust。
2.2 举例
# 指定一个镜像
docker compose up -d redis
# 指定环境变量
docker-compose --env-file ../.env up -d
# 重新创建容器,即使容器已经存在。
docker compose up --force-recreate -d
# 构建镜像并启动容器。
docker-compose up --build
# 指定使用的 Compose 文件,默认文件名为 docker-compose.yml。
docker-compose -f filename.yml up
# 指定项目名称。
docker-compose -p projectname up
# 如果一个容器退出,则停止所有容器。
docker-compose up --abort-on-container-exit
3.docker logs
3.1参数
-f:实时输出日志,类似于tail -f命令。--tail NUM:仅输出最后 NUM 行的日志,默认为全部输出。--since TIME:仅输出从指定时间点开始的日志,例如2022-05-01T00:00:00。--until TIME:仅输出到指定时间点为止的日志,例如2022-05-01T23:59:59。--details:输出更多的容器详细信息,例如容器的标签、ID、名称等。--timestamps:在日志中显示时间戳。--follow或-f:在输出日志后保持连接,实时查看容器日志的变化。--tail或-n:指定输出日志的行数。--since:指定输出日志的起始时间。
3.2 举例
3.2.1 查看容器的所有日志:
docker logs <container_id>
3.2.2 查看容器的最后 100 行日志:
docker logs --tail 100 <container_id>
3.2.3 查看容器的实时日志:
docker logs <container_id> 2>&1 | grep "error"
3.2.4 查看容器的所有日志,并在其中搜索关键字 error:
docker logs -f <container_id>
3.2.5 查看容器的最后 100 行日志,并在其中搜索关键字 error:
docker logs --tail 100 <container_id> 2>&1 | grep "error"
3.2.6 查看容器的实时日志,并在其中搜索关键字 error::
docker logs -f <container_id> 2>&1 | grep "error"
4.Docker Inspect
docker inspect 命令用于获取 Docker 对象(容器、镜像、网络等)
4.1 参数
--format: 指定输出的格式。--type: 指定要检查的对象类型。--size: 显示对象占用的磁盘空间大小。--all: 显示所有对象的详细信息。--verbose: 显示更详细的信息。--pretty: 显示格式化的输出。--no-trunc: 显示完整的输出,而不是截断后的输出。--help: 显示帮助信息。
4.2 举例
4.2.1 检查容器的详细信息:
docker inspect <container_id>
4.2.2 检查容器 IP 地址:
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_id>
4.2.3 检查镜像信息:
docker inspect <image_id>
4.2.4 检查网络信息:
docker inspect <network_name>
4.2.5 指定输出格式:
docker inspect --format='{{.Name}} - {{.State.Status}}' <container_id>
4.2.6 按条件筛选容器:
docker inspect -f '{{.Name}} {{.State.Running}}' $(docker ps -q --filter "status=running")
4.2.7 按条件筛选镜像:
docker inspect -f '{{.RepoTags}} {{.Size}}' $(docker images -q --filter "dangling=true")
4.2.8 使用jq格式化工具
docker inspect <container_id> | jq '.[0] | {id: .Id, created: .Created, author: .Author, size: .Size, labels: .Config.Labels}'
4.2.9 查看目录挂载信息
docker inspect --format="{{json .Mounts}}" <container_id> | jq
4.2.10 查看容器网络信息
#查看完整网络信息
docker inspect --format="{{json .NetworkSettings}}" <container_id> | jq
#查看网络端口映射
docker inspect --format="{{json .NetworkSettings.Ports}}" <container_id> | jq
# 查看容器的网络ip、网关等信息
docker inspect --format="{{json .NetworkSettings.Networks}}" <container_id> | jq
4.2.11 查看容器的端口映射:
docker inspect --format='{{json .HostConfig.PortBindings}}' mycontainer
4.2.12 查看容器的环境变量:
docker inspect --format='{{json .Config.Env}}' mycontainer
5.docker exec
5.1 参数
-it: 以交互模式进入容器中执行命令,通常用于需要交互式操作的命令。-d: 让容器在后台运行。--user: 指定要执行命令的用户。--workdir: 指定命令执行的工作目录。--env: 设置环境变量。--privileged: 让容器拥有特权,可以访问主机的设备和文件系统。--name: 指定容器的名称。--detach-keys: 指定在后台运行容器时使用的键盘序列。
5.2 举例
5.2.1 进入正在运行的容器并执行命令:
docker exec -it mycontainer sh
上面的命令将以交互模式进入名为 mycontainer 的容器,并在容器中执行 sh 命令。
5.2.2 在后台运行容器并执行命令:
docker exec -d mycontainer ls
上面的命令将在名为 mycontainer 的容器中运行 ls 命令,并让容器在后台运行。
5.2.3 指定执行命令的用户:
docker exec --user=username mycontainer whoami
上面的命令将在名为 mycontainer 的容器中以 username 用户身份执行 whoami 命令。
5.2.4 指定命令执行的工作目录:
docker exec --workdir=/app mycontainer ls
上面的命令将在名为 mycontainer 的容器中以 /app 目录作为工作目录执行 ls 命令。
5.2.5 设置环境变量并执行命令:
docker exec --env MY_VAR=value mycontainer env
上面的命令将在名为 mycontainer 的容器中设置名为 MY_VAR 的环境变量为 value,并执行 env 命令。
5.2.6 让容器拥有特权并执行命令:
docker exec --privileged mycontainer ls /dev
上面的命令将在名为 mycontainer 的容器中以特权模式运行 ls /dev 命令,可以访问主机的设备和文件系统。
5.2.7 指定容器的名称并执行命令:
docker exec --name=myexec mycontainer ls
上面的命令将在名为 mycontainer 的容器中执行 ls 命令,并将执行结果输出到名为 myexec 的容器中。
5.2.8 指定在后台运行容器时使用的键盘序列:
docker exec --detach-keys="ctrl-d" mycontainer ls
上面的命令将在名为 mycontainer 的容器中运行 ls 命令,并在后台运行容器时使用 ctrl-d 键作为键盘序列。
5.2.9 在容器中查看日志:
docker exec -it mycontainer cat /var/log/mylog.log
5.2.10 查看容器内的进程:
dockerexec -it mycontainer ps -ef
6. docker cp
6.1 参数
-a, --archive: 以归档模式进行复制,包括复制文件的所有 uid/gid 信息。--follow-link: 始终跟随源路径中的符号链接。--help: 显示帮助信息。
6.2 举例
6.2.1. 从容器复制文件到主机:
docker cp mycontainer:/path/to/myfile.txt /host/path/
上面的命令将从名为 mycontainer 的容器中复制 /path/to/myfile.txt 文件到主机的 /host/path/ 目录中。
6.2.2 从主机复制文件到容器:
docker cp /host/path/myfile.txt mycontainer:/path/to/
上面的命令将从主机的 /host/path/myfile.txt 文件复制到名为 mycontainer 的容器中的 /path/to/ 目录中。
6.2.3 使用 -a 参数复制所有的文件属性:
docker cp -a mycontainer:/path/to/myfile.txt /host/path/
上面的命令将从名为 mycontainer 的容器中复制 /path/to/myfile.txt 文件到主机的 /host/path/ 目录中,并保留文件的所有属性。
6.2.4 使用 -follow-link 参数跟随符号链接:
docker cp --follow-link mycontainer:/path/to/mylink /host/path/
上面的命令将从名为 mycontainer 的容器中复制 /path/to/mylink 符号链接所指向的文件到主机的 /host/path/ 目录中。
6.2.5 使用 - 作为目标路径打印到标准输出:
docker cp mycontainer:/path/to/myfile.txt -
上面的命令将从名为 mycontainer 的容器中读取 /path/to/myfile.txt 文件的内容,并输出到标准输出。
6.2.6 从容器中复制整个目录:
docker cp mycontainer:/path/to/mydir /host/path/
上面的命令将从名为 mycontainer 的容器中复制 /path/to/mydir 目录及其下的所有文件和子目录到主机的 /host/path/ 目录中。
6.2.7 在容器中创建新文件并复制:
docker cp /host/path/myfile.txt mycontainer:/path/to/newfile.txt
上面的命令将在名为 mycontainer 的容器中创建名为 /path/to/newfile.txt 的新文件,并将主机中的 /host/path/myfile.txt 文件复制到新文件中。
这些是 docker cp 常用的参数和使用示例,可以根据具体的应用场景和需求,使用不同的参数和路径进行复制操作。