Docker 命令终极指南

容器数据库机器学习

一、引言

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. 对容器实施资源限制

最后欢迎加入苏三的星球,你将获得:AI开发项目课程、苏三AI项目、商城微服务实战、秒杀系统实战、商城系统实战、秒杀系统实战、代码生成工具、系统设计、性能优化、技术选型、底层原理、Spring源码解读、工作经验分享、痛点问题、面试八股文等多个优质专栏。

还有1V1答疑、修改简历、职业规划、送书活动、技术交流。

扫描下方二维码,即可加入星球:

picture.image

目前星球已经更新了5200+篇优质内容,还在持续爆肝中.....

星球已经被官方推荐了3次,收到了小伙伴们的一致好评。戳我加入学习,已有1700+小伙伴加入学习。

最后推荐一下我的技术专栏《性能优化35讲》,里面包含了:接口调用、Java、JVM、并发编程、MySQL、Redis、ElasticSearch、Spring、SpringBoot等多个性能优化技巧。无论在工作,还是在面试中,都会经常遇到,非常有参考价值。

picture.image

picture.image

0
0
0
0
关于作者
关于作者

文章

0

获赞

0

收藏

0

相关资源
vivo 容器化平台架构与核心能力建设实践
为了实现规模化降本提效的目标,vivo 确定了基于云原生理念构建容器化生态的目标。在容器化生态发展过程中,平台架构不断演进,并针对业务的痛点和诉求,持续完善容器化能力矩阵。本次演讲将会介绍 vivo 容器化平台及主要子系统的架构设计,并分享重点建设的容器化核心能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论