Docker 命令终极指南

开发 前端
Docker彻底改变了我们开发、交付和运行应用程序的方式。通过将软件封装在容器中,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. 对容器实施资源限制
责任编辑:武晓燕 来源: 程序猿技术充电站
相关推荐

2023-05-05 17:20:04

2020-12-02 10:20:33

Docker命令Linux

2015-01-14 14:27:18

Docker容器镜像

2020-12-18 09:45:33

DockerLinux命令

2012-08-21 06:53:00

测试软件测试

2015-07-20 09:39:41

Java日志终极指南

2017-03-27 21:14:32

Linux日志指南

2015-11-08 14:44:48

2015-03-05 11:28:51

Linux桌面环境终极指南

2022-02-09 09:00:00

云计算BigQuerySnowflake

2022-08-12 15:58:34

Docker

2024-05-17 10:59:25

云计算谷歌云

2013-12-18 09:36:08

企业移动指南

2022-07-22 13:14:57

TypeScript指南

2020-07-19 08:15:41

PythonDebug

2022-03-28 09:52:42

JavaScript语言

2025-01-14 00:00:00

2024-07-10 09:07:09

2024-01-31 15:28:38

物联网IOT连接技术

2011-07-14 11:24:23

点赞
收藏

51CTO技术栈公众号