Docker 提供了大量的命令来管理容器、镜像、网络和数据卷等。以下是一些常用的 Docker 命令及其示例:
1. 查看 Docker 版本信息:
docker version
1. 查看 Docker 系统信息:
docker info
1. 列出所有镜像:
docker images
1. 拉取镜像:
docker pull [镜像名称:标签]
例如,拉取官方的 Nginx 镜像:
docker pull nginx:latest
1. 删除镜像:
docker rmi [镜像ID或名称]
例如,删除名为 nginx
的镜像:
docker rmi nginx
1. 列出所有运行的容器:
docker ps
1. 列出所有容器(包括已停止的):
docker ps -a
1. 创建并启动容器:
docker run [选项] [镜像名称] [命令]
例如,使用 Nginx 镜像创建一个名为 my-nginx
的容器:
docker run --name my-nginx -d nginx
1. 停止容器:
docker stop [容器ID或名称]
例如,停止名为 my-nginx
的容器:
docker stop my-nginx
1. 启动已停止的容器:
docker start [容器ID或名称]
1. 重启容器:
docker restart [容器ID或名称]
1. 删除容器:
docker rm [容器ID或名称]
1. 进入正在运行的容器:
docker exec -it [容器ID或名称] /bin/bash
1. 从容器复制文件到主机:
docker cp [容器ID或名称]:[容器内路径] [主机路径]
1. 将主机文件复制到容器:
docker cp [主机路径] [容器ID或名称]:[容器内路径]
1. 查看容器的日志:
docker logs [容器ID或名称]
1. 查看容器的详细信息:
docker inspect [容器ID或名称]
1. 创建自定义镜像: 使用 Dockerfile
文件构建镜像,然后使用以下命令:
docker build -t [镜像名称:标签] [Dockerfile所在的目录路径]
1. 导出镜像为文件:
docker save -o [输出文件名.tar] [镜像名称:标签]
1. 从文件导入镜像:
docker load -i [输入文件名.tar]
1. 创建网络:
docker network create [网络名称]
1. 删除网络:
docker network rm [网络ID或名称]
1. 查看所有网络:
docker network ls
1. 创建数据卷:
docker volume create [数据卷名称]
1. 查看所有数据卷:
docker volume ls
1. 删除数据卷:
docker volume rm [数据卷名称]
1. 设置容器环境变量:
docker run -e "VARIABLE_NAME=value" [镜像名称]
1. 设置容器端口映射:
docker run -p [宿主机端口]:[容器端口] [镜像名称]
例如,将容器的 80 端口映射到宿主机的 8080 端口:
docker run -p 8080:80 nginx
1. 设置容器名称:
docker run --name [容器名称] [镜像名称]
1. 在后台运行容器并输出容器 ID:
docker run -d [镜像名称]
1. 显示容器进程信息:
docker top [容器ID或名称]
1. 查看容器的资源使用情况:
docker stats [容器ID或名称]
1. 修改容器的配置:
docker update [选项] [容器ID或名称]
例如,限制容器的内存使用:
docker update --memory="1g" [容器ID或名称]
1. 将容器保存为镜像:
docker commit [容器ID或名称] [新镜像名称:标签]
1. 运行 Docker 守护进程:
systemctl start docker
1. 停止 Docker 守护进程:
systemctl stop docker
1. 重启 Docker 守护进程:
systemctl restart docker
1. 查看 Docker 守护进程状态:
systemctl status docker
1. 设置 Docker 开机自启:
systemctl enable docker
1. 禁止 Docker 开机自启:
systemctl disable docker
1. 清理不再使用的镜像、容器、网络和卷:
docker system prune
此命令会清理所有未使用的资源,要小心使用,因为它会删除所有未关联的镜像、容器、网络和卷。
1. 清理悬挂的镜像(即无标签的镜像):
docker image prune
1. 清理已停止的容器:
docker container prune
1. 清理未使用的网络和卷:
docker network prune
docker volume prune
1. 设置 Docker 仓库地址:
Docker 默认使用 Docker Hub 作为镜像仓库,但你可以通过配置 /etc/docker/daemon.json
文件来更改仓库地址或添加私有仓库。
{
"registry-mirrors": ["https://your-mirror-address.com"]
}
修改完文件后,需要重启 Docker 服务使配置生效。
1. 使用 Docker Compose 管理多容器应用:
Docker Compose 是一个工具,用于定义和运行多容器的 Docker 应用程序。通过编写 docker-compose.yml
文件,你可以轻松启动、停止和重启多个容器。
docker-compose up # 启动服务
docker-compose down # 停止并删除服务
1. 将容器导出为 tar 包:
docker export [容器ID或名称] > [文件名].tar
这会将容器的文件系统导出为一个 tar 包,不包含 Docker 的元数据和配置信息。
1. 从 tar 包导入为镜像:
cat [文件名].tar | docker import - [镜像名称:标签]
使用导入的 tar 包创建一个新的 Docker 镜像。
1. 标签镜像:
docker tag [源镜像名称:标签] [目标镜像名称:标签]
为已有的镜像添加一个新的标签。
1. 查看镜像的创建历史:
docker history [镜像名称:标签]
显示镜像的创建历史,包括每一层的创建命令和大小。
1. 设置容器的存储驱动:
Docker 支持多种存储驱动,如 overlay2、devicemapper 等。你可以通过修改 Docker 的配置文件来设置默认的存储驱动。
1. 在容器中执行多条命令:
docker exec -it [容器ID或名称] /bin/sh -c "命令1; 命令2; 命令3"
使用 /bin/sh -c
可以在容器内执行多条命令。
1. 限制容器的 CPU 和内存使用:
在 docker run
命令中使用 --cpus
来限制容器的 CPU 使用,使用 --memory
来限制容器的内存使用。
docker run --cpus="1.5" --memory="2g" [镜像名称]
1. 设置容器的 IP 地址:
使用 --ip
选项可以为容器指定一个静态 IP 地址。这通常与自定义网络一起使用。
1. 设置容器的 DNS:
使用 --dns
选项可以为容器指定自定义的 DNS 服务器。
docker run --dns=8.8.8.8 --dns=8.8.4.4 [镜像名称]
1. 挂载卷并设置权限:
在 docker run
命令中使用 --mount
选项可以挂载卷,并通过 ro
或 rw
设置卷的读写权限。
docker run --mount type=volume,src=<卷名称>,dst=<容器内路径>,readonly [镜像名称]
1. 为容器设置健康检查:
使用 --health-cmd
、--health-interval
、--health-timeout
和 --health-retries
选项可以为容器设置健康检查。
docker run --health-cmd="curl --fail http://localhost:80/ || exit 1" --health-interval=5s [镜像名称]
1. 使用 secret 管理敏感信息:
Docker secret 可以用于在 swarm 模式下管理敏感信息,如密码、密钥等。
docker secret create [secret名称] [文件路径]
1. 在 swarm 模式下部署服务:
Docker swarm 是 Docker 的容器编排工具,允许你定义和运行一个服务,该服务由多个容器实例组成。
docker stack deploy -c [docker-compose.yml文件路径] [服务名称]
1. 滚动更新服务:
在 swarm 模式下,你可以使用 docker service update
命令来滚动更新服务,而无需停机。
docker service update --image [新镜像名称:标签] [服务名称]
这只是 Docker 的一部分高级命令和功能。Docker 生态系统非常庞大,还包括很多与之集成的工具和平台,如 Docker Compose、Docker Swarm、Kubernetes 等,它们提供了更强大的容器编排和管理能力。为了充分利用 Docker 的功能,建议继续深入学习和实践。