基础命令
Docker 是一种流行的容器化平台,允许开发人员在隔离的环境中构建、打包、发布和运行应用程序。下面是一些 Docker 的基础命令:
docker version:检查 Docker 版本信息。
docker info:显示 Docker 系统信息,如运行的容器数量和镜像数量等。
docker search <image>:搜索 Docker Hub 上的镜像。
docker pull <image>:从 Docker Hub 下载镜像。
docker images:列出本地已下载的镜像。
docker run <image>:在容器中运行一个镜像,例如 docker run hello-world。
docker ps:列出正在运行的容器。
docker stop <container>:停止一个正在运行的容器,其中 <container> 可以是容器的 ID 或名称。
docker rm <container>:删除一个已停止的容器。
docker rmi <image>:删除一个本地的镜像。
docker build -t <tag> <directory>:构建一个镜像,-t 选项用于指定标签(tag),<directory> 是包含 Dockerfile 的目录。
docker run -p <host-port>:<container-port> <image>:运行容器,并将容器的端口映射到主机的端口。
docker exec -it <container> <command>:在正在运行的容器中执行命令,-it 选项用于进入交互模式。
docker logs <container>:查看容器的日志输出。
docker cp <container>:<path> <host-path>:将容器内的文件复制到主机上。
docker network ls:列出 Docker 网络。
docker network create <network>:创建一个 Docker 网络。
docker volume ls:列出 Docker 数据卷。
docker volume create <volume>:创建一个 Docker 数据卷。
组合命令
Docker 提供了一些组合命令,可以通过组合多个单个命令来完成更复杂的操作。下面是一些常见的 Docker 组合命令及其作用:
创建并运行容器:
docker run -d --name mycontainer <image> <command>
这个命令会创建一个新的容器,并在容器中运行指定的命令。-d 选项表示容器以后台模式运行,--name 选项指定容器的名称。
2. 构建镜像并运行容器:
docker build -t myimage <directory> && docker run -d --name mycontainer myimage
这个命令会先构建一个镜像,然后在新构建的镜像上运行一个容器。&& 操作符用于串联两个命令,确保只有在镜像构建成功后才会运行容器。
3. 运行容器并进入交互模式:
docker run -it <image> <command>
这个命令会在容器中以交互模式运行指定的命令,并将终端连接到容器的标准输入输出。
4. 运行容器并挂载本地目录:
docker run -v <host-path>:<container-path> <image>
这个命令会运行容器,并将主机上的指定目录挂载到容器的指定路径,实现主机和容器之间的文件共享。
5. 停止并删除所有容器:
docker stop $(docker ps -aq) && docker rm $(docker ps -aq)
这个命令会停止并删除所有正在运行的容器。docker ps -aq 用于列出所有容器的 ID,并将其作为参数传递给 docker stop 和 docker rm 命令。
6. 删除所有镜像:
docker rmi $(docker images -q)
这个命令会删除所有本地的镜像。docker images -q 用于列出所有镜像的 ID,并将其作为参数传递给 docker rmi 命令。
7. 构建镜像并将其推送到 Docker Hub:
docker build -t <image> <directory> && docker push <image>
这个命令会先构建一个镜像,然后将该镜像推送到 Docker Hub,使其可供他人访问和使用。
8. 停止并删除所有容器,并删除所有镜像:
docker stop $(docker ps -aq) && docker rm $(docker ps -aq) && docker rmi $(docker images -q)
这个命令会停止并删除所有正在运行的容器,然后删除所有本地的镜像。
9. 运行容器并与主机共享网络命名空间:
docker run -it --net=host <image> <command>
这个命令会在容器中运行指定的命令,并与主机共享网络命名空间,使容器可以直接访问主机上的网络接口。
10. 运行容器并设置环境变量:
docker run -e <key>=<value> <image>
这个命令会在容器中运行,并设置一个或多个环境变量,以便应用程序在容器内部使用。
11. 在容器内部执行命令并将结果复制到主机:
docker exec <container> <command> > <host-path>
这个命令会在正在运行的容器内部执行指定的命令,并将命令的输出复制到主机上的指定路径。
12. 如果您要删除没有镜像名称(即没有标签)的镜像,可以使用以下命令:
docker image prune -a
这个命令将删除所有没有标签的镜像,包括没有关联容器的无标签镜像。这将释放磁盘空间并清理不再需要的镜像。请注意,在执行此命令之前,请确保您不再需要这些没有标签的镜像。
13. 要删除悬空镜像(即没有关联的容器的镜像),可以使用以下命令:
docker image prune
这个命令会删除所有没有被使用的镜像,释放磁盘空间。请注意,这将删除所有没有关联容器的镜像,包括不再使用的旧镜像。在执行此命令之前,请确保您不需要这些镜像,以免意外删除了需要的镜像。
在 Docker 中,有一些常用的组合命令可以帮助您更高效地管理容器、镜像和其他资源。以下是一些常见的 Docker 组合命令:
清理命令:
停止并删除所有容器,并删除所有镜像:
docker stop $(docker ps -aq) && docker rm $(docker ps -aq) && docker rmi $(docker images -q)
删除所有悬空的容器(没有关联的镜像):
docker container prune
构建和运行命令:
构建镜像并运行容器:
docker build -t <image> <directory> && docker run -d --name <container> <image>
构建镜像并运行容器,并映射端口:
docker build -t <image> <directory> && docker run -d --name <container> -p <host-port>:<container-port> <image>
数据卷命令:
创建容器并挂载数据卷:
docker run -v <host-path>:<container-path> <image>
运行容器并挂载匿名数据卷:
docker run -v <container-path> <image>
创建和管理数据卷:
docker volume create <volume> # 创建数据卷 docker volume ls # 列出数据卷 docker volume inspect <volume> # 查看数据卷详细信息 docker volume rm <volume> # 删除数据卷
网络命令:
创建自定义网络:
docker network create <network>
运行容器并连接到指定网络:
docker run --network=<network> <image>
列出网络:
docker network ls
docker inspect 命令可以与其他命令组合使用来获取更丰富的容器信息或进行更复杂的操作。以下是一些常见的与 docker inspect 命令组合使用的命令:
docker inspect + jq:
jq 是一个命令行 JSON 处理工具,可以用于过滤和提取 JSON 数据。
示例:
docker inspect <container> | jq .[0].NetworkSettings.IPAddress
这个示例使用 jq 过滤器来提取容器的 IP 地址。
docker inspect + grep:
grep 是一个文本搜索工具,用于在输出中匹配特定的模式。
示例:
docker inspect <container> | grep IPAddress
这个示例使用 grep 过滤器来查找容器的 IP 地址。
docker inspect + awk:
awk 是一个文本处理工具,可用于对输出进行分割和提取特定字段。
示例:
docker inspect <container> | awk -F'"' '/IPAddress/ {print $4}'
这个示例使用 awk 提取容器的 IP 地址。
docker inspect + shell 变量:
将 docker inspect 的输出赋值给 shell 变量,以便进一步处理和使用。
示例:
CONTAINER_INFO=$(docker inspect <container>) echo $CONTAINER_INFO
容器运行
当运行容器时,可以使用一些基本配置选项来自定义容器的行为和环境。以下是一些常用的基本配置选项及其说明:
容器名称:
--name <name>:指定容器的名称,用于识别和操作容器。例如:--name mycontainer
后台运行:
-d 或 --detach:以后台模式运行容器,使其在后台运行而不阻塞终端。例如:-d
端口映射:
-p <host-port>:<container-port>:将容器的端口映射到主机的端口,使外部可以访问容器中的服务。例如:-p 8080:80
-P 或 --publish-all:自动将容器中的所有端口映射到主机的随机端口。
环境变量:
-e <key>=<value>:设置容器中的环境变量。例如:-e ENV_VAR=example
数据卷挂载:
-v <host-path>:<container-path>:将主机的目录或文件挂载到容器的指定路径,实现主机和容器之间的文件共享。例如:-v /path/on/host:/path/on/container
工作目录:
-w <path>:设置容器的工作目录。例如:-w /app
用户和权限:
-u <user>[:<group>]:指定容器内部的用户或用户组。例如:-u 1000:1000
网络连接:
--network <network>:将容器连接到指定的 Docker 网络。例如:--network mynetwork
交互模式:
-i 或 --interactive:保持标准输入 (stdin) 打开,允许与容器进行交互。
-t 或 --tty:分配一个伪终端 (TTY)。
这些是一些常用的容器运行配置选项。请注意,<name>、<host-port>、<container-port>、<key>、<value>、<host-path>、<container-path>、<path>、<user>、<group> 和 <network> 是需要根据实际情况替换为具体值的参数。
Docker问题排查
在 Docker 运行时,可能会遇到一些常见的问题。以下是一些常用的问题排查方法和命令:
查看容器状态:
使用 docker ps 命令查看正在运行的容器。
如果容器没有正常运行,可以使用 docker ps -a 命令查看所有容器的状态,包括已停止的容器。
查看容器日志:
使用 docker logs <container> 命令查看容器的日志输出。<container> 可以是容器的 ID 或名称。
添加 -f 选项可以实时跟踪容器的日志输出。
进入容器进行调试:
使用 docker exec -it <container> <command> 命令进入正在运行的容器,并在容器内部执行特定的命令。这样可以进入容器进行调试和排查问题。
例如:docker exec -it <container> bash 或 docker exec -it <container> sh 进入容器的交互终端。
检查容器配置:
使用 docker inspect <container> 命令查看容器的详细配置信息,包括网络设置、环境变量、挂载的卷等。
检查容器资源占用:
使用 docker stats 命令查看正在运行的容器的资源占用情况,包括 CPU、内存、网络和磁盘使用情况。
重启容器或 Docker 服务:
如果容器出现问题,尝试重启容器或 Docker 服务,可能会解决一些常见的问题。
使用 docker restart <container> 命令重启容器。
使用 sudo systemctl restart docker 命令(Linux)或重新启动 Docker Desktop(Windows 或 macOS)来重启 Docker 服务。
查看 Docker 服务状态:
使用 sudo systemctl status docker 命令(Linux)或查看 Docker Desktop(Windows 或 macOS)的状态来检查 Docker 服务是否正常运行。
清理无用资源:
使用 docker system prune 命令清理无用的容器、镜像和数据卷等,以释放磁盘空间。