Docker 命令终极指南

77 阅读5分钟

一、引言

Docker彻底改变了我们开发、交付和运行应用程序的方式。通过将软件封装在容器中,Docker确保应用程序在从开发者电脑到生产服务器的不同环境中无缝运行。这种一致性消除了“在我机器上能运行”的问题,并简化了整个软件开发生命周期。

二、Docker 安装

在开始前先确保您已正确安装和配置Docker。在Linux上安装Docker:

curl -fsSL https://get.docker.com -o get-docker.sh && sudo sh get-docker.sh

对于其他操作系统,请访问官方文档。安装完成后,验证Docker是否正常工作:

docker --version
docker run hello-world

要访问和推送镜像到Docker Hub:

docker login
docker logout # 完成后登出

三、容器管理

运行容器

  • 以后台运行模式运行容器
docker run -d --name mycontainer -p 8080:80 nginx

  • 交互式运行容器
docker run -it ubuntu /bin/bash

  • 限制资源运行容器
docker run -d --name mycontainer --cpus 0.5 --memory 512m nginx

列出容器

  • 列出正在运行的容器
docker ps

  • 列出所有容器(包括已停止的)
docker ps -a

  • 列出容器大小
docker ps -s

启动、停止和重启容器

  • 启动已停止的容器
docker start mycontainer

  • 停止正在运行的容器
docker stop mycontainer

  • 重启容器
docker restart mycontainer

  • 暂停正在运行的容器
docker pause mycontainer

  • 恢复暂停的容器
docker unpause mycontainer

  • 强制终止正在运行的容器
docker kill mycontainer

删除容器

  • 删除已停止的容器
docker rm mycontainer

  • 强制删除正在运行的容器
docker rm -f mycontainer

  • 删除所有已停止的容器
docker container prune

  • 删除所有容器(包括正在运行和已停止的)
docker rm -f $(docker ps -aq)

在容器中执行命令

  • 在运行的容器中执行命令
docker exec -it mycontainer /bin/bash

  • 以root身份在运行的容器中执行命令
docker exec -it -u root mycontainer /bin/bash

  • 在主机和容器之间复制文件
docker cp /host/path/file.txt mycontainer:/container/path/
docker cp mycontainer:/container/path/file.txt /host/path/

查看容器日志和信息

  • 查看容器日志
docker logs mycontainer

  • 跟踪容器日志
docker logs -f mycontainer

  • 查看容器日志的最后N行
docker logs --tail <number> mycontainer

  • 查看容器资源使用统计信息
docker stats mycontainer

  • 查看容器的正在运行的进程
docker top mycontainer

  • 查看容器的详细信息
docker inspect mycontainer

  • 查看容器文件系统上文件或目录的更改
docker diff mycontainer

四、镜像管理

列出和拉取镜像

  • 列出本地镜像
docker images

  • 从Docker Hub拉取镜像
docker pull nginx

构建镜像

  • 从Dockerfile构建镜像
docker build -t myimage:latest.

  • 使用特定的Dockerfile构建
docker build -f Dockerfile.dev -t myimage:dev.

  • 不使用缓存构建
docker build --no-cache

标记镜像

对镜像进行版本管理和组织:

  • 标记镜像
docker tag myimage:latest myrepo/myimage:v1.0

推送镜像

  • 将镜像推送到Docker Hub
docker push myrepo/myimage:v1.0

删除镜像

  • 删除镜像
docker rmi myimage:latest

  • 删除所有未使用的镜像
docker image prune -a

  • 删除所有镜像
docker rmi $(docker images -q)

获取镜像信息

  • 查看容器的详细信息
docker image inspect myimage:latest

  • 查看镜像的历史记录
docker history myimage:latest

保存和加载镜像

在不使用镜像仓库的情况下在系统之间传输镜像:

  • 将镜像保存为tar归档文件
docker save myimage:latest > myimage.tar

  • 从tar归档文件加载镜像
docker load < myimage.tar

五、Docker网络:连接容器

列出和创建网络

管理Docker网络以实现容器通信:

  • 列出网络
docker network ls

  • 创建网络
docker network create mynetwork

连接和断开容器

管理容器网络连接:

  • 将容器连接到指定网络
docker network connect mynetwork mycontainer

  • 从网络断开容器连接
docker network disconnect mynetwork mycontainer

检查网络

获取Docker网络的详细信息:

  • 检查网络
docker network inspect mynetwork

删除网络

清理未使用的网络:

  • 删除网络
docker network rm mynetwork

六、卷管理:持久数据存储

列出和创建卷

管理Docker卷以实现持久数据存储:

  • 列出卷
docker volume ls

  • 创建卷
docker volume create myvolume

使用卷与容器

演示如何在容器中使用卷:

  • 运行带有卷的容器
docker run -d --name mycontainer -v myvolume:/app/data nginx

检查卷

获取卷的详细信息:

  • 检查卷
docker volume inspect myvolume

删除卷

清理未使用的卷:

  • 删除卷
docker volume rm myvolume

  • 删除所有未使用的卷
docker volume prune

七、Docker Compose

  • 启动docker-compose.yml中定义的服务
docker-compose up -d

  • 停止docker-compose.yml中定义的服务
docker-compose down

  • 查看服务日志
docker-compose logs

  • 扩展服务
docker-compose up -d --scale web=3

  • 重建服务
docker-compose build

  • 列出由Compose管理的容器
docker-compose ps

  • 在服务容器中运行命令
docker-compose exec <service_name> <command>

九、资源管理与监控

监控和管理Docker环境中的资源使用情况:

  • 查看Docker磁盘使用情况
docker system df

  • 查看详细的容器资源使用情况
docker stats

  • 更新容器的资源限制
docker update --memory <limit> <container_name>

十、清理和修剪

通过定期清理维护健康的Docker环境:

  • 删除所有未使用的容器、网络、镜像和卷
docker system prune -a

  • 删除所有已停止的容器
docker container prune

  • 删除所有未使用的镜像
docker image prune -a

  • 删除所有未使用的卷
docker volume prune

  • 删除所有未使用的网络
docker network prune

十一、安全与扫描

识别和解决Docker镜像中的安全漏洞:

  • 扫描镜像中的漏洞
docker scan myimage:latest

  • 查看镜像漏洞详细信息
docker scout cves myimage:latest

  • 比较两个镜像的漏洞
docker scout compare --to myimage:latest myimage:v2

十二、高级Docker技术

多阶段构建

使用多阶段构建创建更小、更高效的镜像:

  • 构建阶段
FROM node:14 AS build
WORKDIR /app
COPY package*.json./
RUN npm install
COPY..
RUN npm run build

  • 生产阶段
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

跨平台构建

为多个架构构建镜像:

docker buildx build --platform linux/amd64,linux/arm64 -t myapp:latest.

健康检查

在Dockerfile中实现健康检查以确保容器正确运行:

HEALTHCHECK --interval=30s --timeout=3s \
CMD curl -f http://localhost/ || exit 1

使用Docker作为开发环境

创建一个一次性的开发环境:

docker run -it --rm -v $(pwd):/app -w /app node:14 bash

十三、故障排除与调试

用于解决Docker相关问题的宝贵命令:

  • 实时查看Docker事件
docker events

  • 获取容器退出代码
docker wait <container>

  • 运行网络故障排除工具包
docker run --net=host --privileged -it nicolaka/netshoot

  • 调试容器文件系统
docker export <container> > container.tar
docker import container.tar

  • 以调试模式运行Docker守护进程
dockerd --debug

十四、Docker最佳实践

  1. 使用官方基础镜像

  2. 最小化Dockerfile中的层数

  3. 使用多阶段构建来减小镜像大小

  4. 实施适当的标记策略

  5. 定期更新和修补镜像

  6. 对多容器应用程序使用Docker Compose

  7. 实施日志记录和监控解决方案

  8. 定期对镜像进行安全扫描

  9. 使用卷存储持久数据

  10. 对容器实施资源限制