首页
Linux常用
docker常用
关于
Search
1
docker安装MDCX
212 阅读
2
麒麟KylinV10离线下载安装包及安装
110 阅读
3
iStoreOS上使用WireGuard
78 阅读
4
UNRAID增加和缩小虚拟机虚拟磁盘大小
50 阅读
5
unraid添加iSCSI 发起程序
39 阅读
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
登录
Search
标签搜索
nginx
unraid
PVE
数据库
dockerfile
同步
wow服务器
装机硬件
宏
v2ray
直通
电视盒子
相册
黑裙7.0.1
远程穿透
定时
ssh
emby
symlink
软链接
奥黛丽·逐爱者
累计撰写
113
篇文章
累计收到
10
条评论
首页
栏目
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
页面
Linux常用
docker常用
关于
搜索到
7
篇与
Docker学习
的结果
2025-08-06
编写 Dockerfile:从入门到精通
引言Dockerfile 是容器化技术的核心组成部分,它能让开发者和 DevOps 工程师将应用程序及其所有依赖项打包成轻量级、可移植的容器。本指南将全面讲解 Dockerfile,从基础概念到高级技巧,最终使您掌握编写高效、安全且适合生产环境的 Dockerfile 所需的技能。1. 什么是 Dockerfile?Dockerfile 是一个纯文本文件,包含一系列用于构建 Docker 镜像的指令。Dockerfile 中的每一行都代表镜像构建过程中的一个步骤。创建的镜像是一个轻量级、可移植且自给自足的环境,包含运行应用程序所需的一切,包括库、依赖项和应用程序代码本身。Dockerfile 的关键组件:基础镜像: 你的 Docker 镜像构建起点。例如,如果你正在构建一个 Python 应用程序,可能会选择 python:3.9 作为基础镜像。应用程序代码与依赖项: 将代码添加到镜像中,并安装依赖项以确保应用程序能正确运行。命令与配置项: 执行命令、设置环境变量以及暴露端口的相关指令。为什么 Dockerfile 很重要?一个 Dockerfile:标准化应用程序的构建和部署方式。确保在不同环境(开发、测试、生产)中的一致性。使应用程序具有可移植性且更易于管理。2. 为什么要学习 Dockerfile?Dockerfile 是容器化的基础,也是 DevOps 工程师的关键技能。以下是学习 Dockerfile 的必要性:1. 跨环境可移植性通过 Dockerfile,您可以一次构建镜像,随处运行。这解决了"在我机器上能运行"的难题。2. 简化的 CI/CD 管道在 Jenkins、GitHub Actions 或 Azure DevOps 等 CI/CD 管道中使用 Dockerfile,实现应用程序构建、测试和部署的自动化。3. 基础设施版本控制如同代码一样,Dockerfile 也可以进行版本控制。基础设施的变更可以被追踪,必要时还能回滚。4. 增强的协作能力团队可以共享 Dockerfile 来确保所有人都在相同的环境中工作。这简化了新开发者或贡献者的上手流程。5. 资源效率与传统虚拟机相比,通过优化 Dockerfile 创建的 Docker 镜像更加轻量化,资源消耗更低。示例:假设一个运行在 Node.js 上的 web 应用。使用 Dockerfile 可以将应用与其所需的 Node.js 特定版本打包在一起,无需开发者在本地安装 Node.js,从而确保所有环境的一致性。3. Dockerfile 基础掌握 Dockerfile 的基础知识对于编写高效实用的文件至关重要。让我们一起来探索这些基础要素。3.1 Dockerfile 语法Dockerfile 包含简单的指令,其中每个指令执行特定的操作。其语法通常为:INSTRUCTION arguments例如:FROM ubuntu:20.04COPY . /appRUN apt-get update && apt-get install -y python3CMD ["python3", "/app/app.py"]关键要点:像 FROM、COPY、RUN 和 CMD 这样的指令是区分大小写的,必须用大写字母书写。每条指令都会在 Docker 镜像中创建一个新的层 。3.2 常用指令让我们分解一些最常用的指令:FROM FROM python:3.9指定构建的基础镜像。示例:Dockerfile 必须从 FROM 指令开始,多阶段构建除外。COPY COPY requirements.txt /app/将文件或目录从主机系统复制到容器中。示例:RUN RUN apt-get update && apt-get install -y curl在构建过程中执行命令。常用于安装软件包。示例:CMD CMD ["python3", "app.py"]指定容器启动时运行的默认命令。示例:WORKDIR WORKDIR /usr/src/app设置容器内部的工作目录。示例:EXPOSE EXPOSE 8080记录容器监听的端口。示例:4. 中级 Dockerfile 概念掌握基础知识后,就可以开始使用 Dockerfile 的高级功能来优化和增强构建过程。4.1 构建多阶段 Dockerfile多阶段构建允许您通过分离构建和运行时环境来创建精简的生产镜像。阶段 1(构建器): 安装依赖项、编译代码并构建应用程序。阶段 2(生产环境): 仅从构建阶段复制必要的文件。示例:# Stage 1: Build the applicationFROM node:16 AS builderWORKDIR /appCOPY package.json .RUN npm installCOPY . .RUN npm run build# Stage 2: Run the applicationFROM nginx:alpineCOPY --from=builder /app/build /usr/share/nginx/htmlEXPOSE 80CMD ["nginx", "-g", "daemon off;"]优势:更小的生产环境镜像。将构建工具排除在运行时环境之外,提升安全性。4.2 使用环境变量环境变量使 Dockerfile 更具灵活性和可复用性。示例:ENV APP_ENV=productionCMD ["node", "server.js", "--env", "$APP_ENV"]使用 ENV 来定义变量。使用 docker run -e 在运行时覆盖变量: docker run -e APP_ENV=development myapp4.3 添加健康检查HEALTHCHECK 指令定义了检查容器健康状态的命令。示例:HEALTHCHECK --interval=30s --timeout=10s --retries=3 CMD curl -f http://localhost:8080/health || exit 1作用: 确保容器内的应用程序按预期运行。自动重启: 如果健康检查失败,Docker 可以重启容器。5. Dockerfile 高级技巧高级技巧可以帮助你创建经过优化、安全且可用于生产环境的镜像。5.1 优化镜像大小使用更小体积的基础镜像 FROM python:3.9-alpine用最小化镜像替代默认镜像,例如 alpine最小化层数 RUN apt-get update && apt-get install -y curl && apt-get clean合并命令以减少层数:5.2 使用构建参数构建参数(ARG)允许在构建期间动态配置镜像。示例:ARG APP_VERSION=1.0RUN echo "Building version $APP_VERSION"在构建时传递值:docker build --build-arg APP_VERSION=2.0 .5.3 实施安全最佳实践避免使用 root 用户: 创建并使用非 root 用户以增强安全性。 RUN adduser --disabled-password appuser USER appuser使用可信的基础镜像: 坚持使用官方或经过验证的镜像,以降低漏洞风险。 FROM nginx:stable扫描镜像漏洞: 使用 Trivy 或 Snyk 等工具扫描镜像: trivy image myimage6. Dockerfile 调试与故障排除在使用 Dockerfile 时,镜像构建或运行时遇到错误是很常见的情况。掌握有效的调试和故障排除技巧可以节省时间并快速定位问题。调试 Dockerfile 的步骤增量构建镜像 docker build --target builder -t debug-image .使用 --target 标志来构建多阶段 Dockerfile 中的特定阶段。这可以帮助你隔离构建过程中不同阶段出现的问题。检查中间层 docker history <image_id>使用 docker history 查看镜像层并识别不必要的命令或问题:使用 RUN 进行调试 RUN echo "File exists:" && ls /path/to/file在 RUN 指令中添加调试命令。例如,添加 echo 语句可以帮助验证文件路径或配置:日志文件 docker logs <container_id>容器内运行的服务产生的日志文件或输出可以帮助发现运行时错误。使用 docker logs 命令:检查构建上下文确保不会将不必要的文件发送到构建上下文,这可能导致构建时间增加并引发意外问题。使用 .dockerignore 文件来过滤文件。常见错误及修复方法错误:文件未找到原因: 使用 COPY 或 ADD 命令复制的文件在指定路径中不存在。解决方法: 检查文件路径并使用 WORKDIR 设置正确的目录。错误:依赖项未安装原因: 缺少依赖项或安装命令不正确。解决方法: 安装软件前使用 RUN 更新包列表(apt-get update)。权限错误原因: 以错误的用户身份运行进程或访问文件。解决方案: 使用 USER 指令切换到非 root 用户。7. 编写 Dockerfile 的最佳实践要创建简洁、高效且安全的 Dockerfile,请遵循这些行业公认的最佳实践:1. 固定镜像版本避免使用 latest 标签作为基础镜像,因为当新版本发布时可能导致环境不一致问题。 FROM python:3.9-alpine2. 优化分层合并指令以减少层数。每个 RUN 指令都会创建新层,最小化层数有助于优化镜像体积。 RUN apt-get update && apt-get install -y curl && apt-get clean3. 使用 .dockerignore 文件通过创建 .dockerignore 文件来防止不必要的文件(例如 .git、日志或大型数据集)被包含在构建上下文中: node_modules *.log .git4. 保持镜像轻量使用最小化的基础镜像(如 alpine 或特定语言的 slim 版本)来减小镜像体积。 FROM node:16-alpine5. 添加元数据使用 LABEL 指令为镜像添加元数据,例如版本、作者和描述: LABEL maintainer="yourname@example.com" LABEL version="1.0"6. 使用非 root 用户以 root 身份运行容器存在安全风险。应创建并切换至非 root 用户: RUN adduser --disabled-password appuser USER appuser7. 清理临时文件安装完成后移除临时文件以减少镜像大小: RUN apt-get install -y curl && rm -rf /var/lib/apt/lists/*8. 常见错误避免如果编写不当,Dockerfile 会很快变得低效且不安全。以下是一些常见错误及规避方法:1. 使用大型基础镜像问题: 使用大型基础镜像会增加构建时间和磁盘占用。解决方案: 使用轻量级基础镜像,例如 alpine 或语言镜像的精简版。 FROM python:3.9-alpine2. 未能利用多阶段构建问题: 在最终镜像中包含构建工具会不必要的增加镜像体积。解决方案: 使用多阶段构建,仅将必要文件复制到生产镜像中。 FROM golang:1.16 AS builder WORKDIR /app COPY . . RUN go build -o app FROM alpine:latest COPY --from=builder /app/app /app CMD ["/app"]3. 硬编码敏感信息问题: 在 Dockerfile 中存储敏感数据(如 API 密钥或密码)存在安全风险。解决方案: 使用环境变量或密钥管理工具: ENV DB_PASSWORD=${DB_PASSWORD}4. 安装后未清理问题: 残留的缓存文件或安装包会导致镜像臃肿。解决方案: 在同一条 RUN 指令中清理安装残留: RUN apt-get install -y curl && rm -rf /var/lib/apt/lists/*5. 未对 Dockerfile 添加说明问题: 缺少注释使得他人难以理解特定命令的用途。解决方案: 添加有意义的注释来解释命令: # Set working directory WORKDIR /usr/src/app9. 结论Dockerfile 是构建高效安全容器的基石。通过掌握 Dockerfile 语法、理解最佳实践并避开常见陷阱,您能简化应用程序容器化流程,实现跨环境的一致部署。关键要点:从最小化基础镜像开始,以减小体积并提升性能。利用多阶段构建来生成生产级镜像。始终测试与调试你的 Dockerfile 以确保可靠性。实施安全最佳实践 ,例如使用非 root 用户和密钥管理。使用 .dockerignore 排除不必要的文件,优化构建上下文。Todo:为你的项目尝试编写基础和多阶段的 Dockerfile。应用最佳实践并将调试技术集成到你的工作流程中。与团队分享你的 Dockerfile 以促进协作和反馈。遵循这份全面指南,你将不仅能构建稳健的 Dockerfile,还能提升作为 DevOps 专业人员的技能,从而为高效的 CI/CD 工作流和可扩展系统做出贡献。
2025年08月06日
4 阅读
0 评论
0 点赞
2025-08-05
Docker 安装 Oracle 11G
镜像docker pull swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/akaiot/oracle_11g:latestdocker tag swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/akaiot/oracle_11g:latest docker.io/akaiot/oracle_11g:latest创建并启动容器mkdir -p /home/oracle/app/oracle11g/oradata# 容器内端口默认1521,且通过 -p 参数修改不成功,所以只能修改外部的端口docker run -itd --name oracle11g --restart=always -p 1523:1521 -v /home/oracle/app/oracle11g/oradata:/home/oracle/app/oracle11g/oradata docker.io/akaiot/oracle_11g:latest查看日志docker logs -f --tail 100 oracle11g/home/oracle/app/oracle/product/11.2.0/dbhome_2Processing Database instance "helowin": log file /home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.logFixed Size 2213776 bytesVariable Size 402655344 bytesDatabase Buffers 1174405120 bytesRedo Buffers 24137728 bytesDatabase mounted.Database opened.SQL> Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing options/home/oracle/app/oracle/product/11.2.0/dbhome_2/bin/dbstart: Database instance "helowin" warm started.tail: unrecognized file system type 0x794c7630 for `/home/oracle/app/oracle/product/11.2.0/dbhome_2/startup.log'. Reverting to polling.登录到容器内docker exec -it oracle11g bash配置环境变量su rootPassword: helowinvi /etc/profileexport ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2export ORACLE_SID=helowinexport PATH=$ORACLE_HOME/bin:$PATHsource /etc/profilevi /home/oracle/.bashrcexport ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2export ORACLE_SID=helowinexport PATH=$ORACLE_HOME/bin:$PATHsource /home/oracle/.bashrc登录# 必须要切到 oracle 用户su oraclesqlplus / as sysdba查询数据库状态SELECT status FROM v$instance;STATUS------------OPEN连接验证• SID 和 Service Name 均为 helowin• 用密码密码: sys/oracle修改密码alter user system identified by test123;alter user sys identified by test123;异常记录ORA-00205: error in identifying control file, check alert log for more info异常原因:运行容器是指定的目录为 /home/oracle/app/oracle/oradata ,该目录是容器内安装Oracle自带的目录,换一个别的新建目录即可删除 Docker 容器docker stop oracle11gdocker rm oracle11g相关阅读• Docker 安装 Oracle 12C 🧐 分享、点赞、在看,给个3连击呗!👇
2025年08月05日
5 阅读
0 评论
0 点赞
2025-07-17
100个Docker容器操作命令实战大全!
容器化部署已成为现代运维的核心技能,掌握这些命令让你轻松驾驭从开发到生产的全流程。一、容器生命周期管理(18个)1. 运行容器:docker run -d --name web nginx:latest 后台启动Nginx容器2. 启动已停止容器:docker start web3. 停止运行中容器:docker stop web(发送SIGTERM信号)4. 强制停止容器:docker kill web(发送SIGKILL信号)5. 重启容器:docker restart web6. 暂停容器进程:docker pause web(冻结进程树)7. 恢复暂停容器:docker unpause web8. 删除停止的容器:docker rm web9. 强制删除运行中容器:docker rm -f web(生产环境慎用)10. 批量删除停止容器:docker container prune11. 创建容器不启动:docker create --name temp alpine sleep 360012. 容器重命名:docker rename old_name new_name13. 更新运行参数:docker update --memory 512m web 动态调整内存限制14. 设置重启策略:docker run --restart=always nginx 崩溃后自动重启15. 容器自愈检测:docker run --health-cmd="curl -f http://localhost || exit 1" --health-interval=30s nginx16. 查看健康状态:docker inspect --format='{{.State.Health.Status}}' web17. 资源限制(CPU):docker run --cpus=1.5 app 限制使用1.5核CPU18. 资源限制(内存):docker run -m 2g --memory-swap=3g app 内存+Swap限制二、容器操作与调试(15个)19. 进入交互终端:docker exec -it web /bin/bash20. 后台执行命令:docker exec -d web touch /tmp/test.log21. 查看实时日志:docker logs -f --tail 100 web(追踪最后100行)22. 查看进程列表:docker top web23. 容器详情查看:docker inspect web | jq .(配合jq解析JSON)24. 端口映射检查:docker port web25. 文件复制到容器:docker cp app.conf web:/etc/nginx/conf.d/26. 从容器复制文件:docker cp web:/var/log/nginx/error.log ./27. 查看资源统计:docker stats --no-stream(显示当前状态)28. 实时监控资源:docker stats web mysql(监控特定容器)29. 容器差异检查:docker diff web(查看文件系统变更)30. 容器提交为镜像:docker commit -c 'CMD ["nginx"]' web nginx:v2(慎用,推荐Dockerfile)31. 容器导出快照:docker export web > web.tar32. 挂载调试工具:docker run --cap-add SYS_PTRACE --security-opt seccomp=unconfined debug_tool33. 使用nsenter调试:nsenter --target $(docker inspect -f {{.State.Pid}} web) --mount --uts --ipc --net --pid三、镜像管理(12个)34. 拉取镜像:docker pull alpine:3.18(指定版本避免latest风险)35. 查看本地镜像:docker images --filter "dangling=false"(过滤悬空镜像)36. 删除镜像:docker rmi alpine:3.1737. 强制删除镜像:docker rmi -f redis(被容器使用时需加-f)38. 清理悬空镜像:docker image prune39. 导出镜像存档:docker save -o nginx.tar nginx:latest40. 导入镜像存档:docker load -i nginx.tar41. 查看镜像历史:docker history nginx42. 镜像标签管理:docker tag nginx:latest myreg.com/nginx:v143. 推送镜像到仓库:docker push myreg.com/nginx:v144. 构建镜像:docker build -t myapp:v1 --build-arg ENV=prod .45. 多阶段构建:Dockerfile中:COPY --from=builder /app/bin /usr/bin四、存储管理(10个)46. 创建匿名卷:docker run -v /data mysql(自动创建)47. 绑定主机目录:docker run -v /host/path:/container/path nginx48. 创建命名卷:docker volume create app_data49. 使用命名卷:docker run -v app_data:/var/lib/mysql mysql50. 查看卷详情:docker volume inspect app_data51. 清理未使用卷:docker volume prune52. 查看挂载点:docker inspect -f '{{ .Mounts }}' web53. 临时文件系统:docker run --tmpfs /tmp:size=100m app54. 只读挂载:docker run -v /conf:/etc/nginx:ro nginx(生产安全必备)55. 共享存储卷:docker run --volumes-from db_storage backup_tool五、网络管理(12个)56. 查看网络列表:docker network ls57. 创建自定义网络:docker network create --driver bridge my_net58. 指定容器网络:docker run --network=my_net web59. 容器别名访问:docker run --network=my_net --name web --network-alias website nginx60. 查看网络详情:docker network inspect my_net61. 连接运行中容器:docker network connect my_net existing_container62. 断开容器网络:docker network disconnect my_net container63. 端口随机映射:docker run -P nginx(自动绑定随机主机端口)64. 指定端口映射:docker run -p 8080:80 -p 443:443 nginx65. 主机模式网络:docker run --network=host nginx(共享主机网络栈)66. 容器间直连:docker run --link redis:db app(传统方式,推荐使用自定义网络)67. DNS配置覆盖:docker run --dns 8.8.8.8 --dns-search example.com alpine六、生产运维实践(15个)68. 日志驱动设置:docker run --log-driver=json-file --log-opt max-size=10m nginx69. 日志标签添加:docker run --log-opt tag="{{.Name}}/{{.ID}}" nginx70. 环境变量注入:docker run -e TZ=Asia/Shanghai -e APP_ENV=prod app71. 时区同步配置:docker run -v /etc/localtime:/etc/localtime:ro app72. 容器自启策略:docker run --restart=on-failure:5 app(失败时最多重启5次)73. 内核参数调整:docker run --sysctl net.core.somaxconn=1024 app74. 容器资源限制:docker run --cpus=".5" -m 500m --blkio-weight=500 app75. OOM优先级设置:docker run --oom-score-adj=500 app(值越高越易被kill)76. 容器用户隔离:docker run --user 1000:1000 app(避免root运行)77. 只读文件系统:docker run --read-only app(需配合tmpfs使用)78. 能力控制:docker run --cap-add NET_ADMIN --cap-drop SYS_ADMIN app79. 安全加固:docker run --security-opt no-new-privileges app(禁止提权)80. AppArmor配置:docker run --security-opt apparmor=my_profile app81. SELinux标签:docker run --security-opt label=type:container_t app82. 设备访问授权:docker run --device=/dev/snd:/dev/snd:rw audio_app七、集群与编排(10个)83. 初始化Swarm:docker swarm init --advertise-addr 192.168.1.10084. 加入Swarm集群:docker swarm join --token SWMTKN... 192.168.1.100:237785. 部署Stack服务:docker stack deploy -c docker-compose.yml myapp86. 查看服务列表:docker service ls87. 服务伸缩操作:docker service scale web=588. 滚动更新配置:docker service update --image nginx:1.23 web89. 回滚服务版本:docker service rollback web90. 查看服务日志:docker service logs -f web91. 节点状态检查:docker node ls92. 服务约束部署:docker service create --constraint 'node.role==worker' nginx八、系统维护与监控(8个)93. 查看Docker版本:docker version94. 系统全局信息:docker info95. 磁盘空间清理:docker system prune -af(慎用!清理所有未用资源)96. 事件实时监控:docker events --filter 'event=die'(捕获容器退出事件)97. 构建缓存清理:docker builder prune98. 检查容器配置:docker config ls(Swarm模式)99. 容器漏洞扫描:docker scan nginx:latest(需登录Docker Hub)100. 资源使用报告:docker system df -v(详细磁盘占用分析)生产环境五大黄金法则1. 镜像版本固化:禁止使用latest标签,必须明确版本号(如nginx:1.25.3)2. 资源硬性限制:所有容器必须设置--memory和--cpus限制3. 日志轮转机制:通过max-size和max-file防止日志撑爆磁盘4. 非root用户运行:使用--user指定非特权用户(UID>1000)5. 只读文件系统:配合tmpfs实现写入路径最小化重要提醒:永远不要在容器内存储重要数据!所有持久化数据必须通过:• 绑定挂载(Bind Mounts)• 命名卷(Named Volumes)• 分布式存储(NFS/Ceph等)掌握这100个命令只是起点,真正的容器高手深谙以下原则:✅ 容器即不可变基础设施(Immutable Infrastructure)✅ 日志输出到stdout/stderr而非文件✅ 单容器单进程模型(Sidecar模式除外)✅ 镜像构建遵循最小化原则(如Alpine基础镜像)记住: 最危险的Docker命令不是rm -f,而是缺乏生产级意识的随意操作。 以上,既然看到这里了,如果觉得不错,随手点个赞、在看、转发三连吧,如果想第一时间收到推送,也可以给我个星标⭐~谢谢你看我的文章,我们,下次再见。
2025年07月17日
6 阅读
0 评论
0 点赞
2025-07-10
【Docker学习】100条常用命令整理,运维必备
一、服务管理命令systemctl start docker:启动 Docker 服务。在安装好 Docker 后,首次使用或服务停止后需要启动时使用该命令。systemctl stop docker:停止 Docker 服务。当需要对 Docker 进行维护、更新或临时停止使用时,可执行此命令。systemctl restart docker:重启 Docker 服务。常用于使新的配置生效,比如修改了 Docker 的配置文件后,需要重启服务。systemctl status docker:查看 Docker 服务状态。可以了解 Docker 服务是否正在运行,以及运行状态的详细信息,如启动时间、进程 ID 等。systemctl enable docker:设置 Docker 服务开机自启。确保每次系统启动时,Docker 服务都能自动运行,方便后续使用。systemctl disable docker:取消 Docker 服务开机自启。如果不想让 Docker 在开机时自动启动,可使用此命令。docker info:查看 Docker 的系统信息,包括镜像和容器的数量、存储驱动、运行时等详细信息。有助于了解当前 Docker 环境的整体情况。docker --help:查看 Docker 的帮助文档。当对某个 Docker 命令的用法不确定时,可通过此命令获取详细的帮助信息。docker version:查看 Docker 的版本信息,包括客户端和服务端的版本号。在排查一些与版本相关的问题时非常有用。二、镜像管理命令docker images:列出本地所有镜像。展示镜像的仓库名称、标签、镜像 ID、创建时间和大小等信息,方便管理和查看本地镜像资源。docker search [镜像名称]:在 Docker Hub 上搜索指定名称的镜像。可根据搜索结果选择合适的镜像进行拉取和使用,例如docker search nginx。docker pull [镜像名称[:标签]]:从 Docker Hub 或其他镜像仓库拉取指定镜像到本地。若不指定标签,默认拉取最新版本(latest),如docker pull ubuntu:20.04。docker rmi [镜像名称或ID]:删除本地指定的镜像。注意,若镜像正在被容器使用,则无法删除,需先停止并删除相关容器。可同时删除多个镜像,如docker rmi ubuntu:20.04 nginx:latest。docker build -t [目标镜像名称:标签] [Dockerfile所在路径]:根据指定路径下的 Dockerfile 构建镜像。-t参数用于指定目标镜像的名称和标签,构建过程会根据 Dockerfile 中的指令逐步创建镜像。docker tag [源镜像名称:标签] [目标镜像名称:标签]:为镜像添加标签。可用于给镜像打上新的版本号或别名,方便区分和管理不同版本的镜像,例如docker tag ubuntu:20.04 ubuntu:latest。docker push [镜像名称:标签]:将本地镜像推送到 Docker Hub 或其他远程镜像仓库。需先登录到对应的仓库,如docker push myusername/nginx:latest。docker history [镜像名称或ID]:查看镜像的构建历史。展示每一层镜像的创建信息,包括创建时间、执行的命令等,有助于了解镜像的构建过程和内容。docker inspect [镜像名称或ID]:查看镜像的详细信息,以 JSON 格式输出。包含镜像的配置、环境变量、挂载点等各种详细信息,对于排查镜像相关问题非常有帮助。docker save -o [保存文件名.tar] [镜像名称或ID]:将镜像保存为一个 tar 文件,便于在不同环境中传输和使用。例如docker save -o ubuntu_20.04.tar ubuntu:20.04。docker load -i [保存文件名.tar]:从 tar 文件中加载镜像到本地。与docker save命令相对应,用于在新环境中恢复镜像。docker import [容器归档文件路径] [目标镜像名称:标签]:从容器的归档文件创建镜像。可将容器的当前状态保存为一个新的镜像,常用于自定义镜像的制作。三、容器管理命令docker run [选项] [镜像名称[:标签]] [容器启动命令]:创建并启动一个容器。常见选项包括-d(后台运行)、-p(端口映射)、-v(卷挂载)等,例如docker run -d -p 80:80 nginx,表示在后台运行一个 nginx 容器,并将宿主机的 80 端口映射到容器的 80 端口。docker ps:列出当前正在运行的容器。显示容器的 ID、名称、使用的镜像、运行状态、端口映射等信息。docker ps -a:列出所有容器,包括已停止的容器。方便查看所有创建过的容器记录。docker start [容器名称或ID]:启动一个已停止的容器。例如docker start mynginx,可将名为 mynginx 的容器启动。docker stop [容器名称或ID]:停止一个正在运行的容器。通过向容器发送停止信号,让容器正常停止运行。docker restart [容器名称或ID]:重启一个容器。先停止容器,然后再启动它,常用于使容器内的新配置生效。docker rm [容器名称或ID]:删除一个已停止的容器。若容器正在运行,需先停止后才能删除,也可使用-f参数强制删除运行中的容器。docker kill [容器名称或ID]:强制终止一个正在运行的容器。通过发送 SIGKILL 信号立即停止容器,可能导致数据丢失,一般在容器无法正常停止时使用。docker exec -it [容器名称或ID] [要执行的命令]:在一个正在运行的容器内执行命令。例如docker exec -it mynginx bash,可进入 mynginx 容器的 bash 终端,进行交互式操作。docker attach [容器名称或ID]:连接到一个正在运行的容器的标准输入、输出和错误输出流。与docker exec不同,docker attach会直接进入容器的主进程,退出时可能会导致容器停止。docker diff [容器名称或ID]:查看容器内文件系统的变化。显示容器内新增、修改和删除的文件和目录,有助于了解容器运行过程中的文件操作情况。docker commit -m "[提交信息]" -a "[作者信息]" [容器名称或ID] [目标镜像名称:标签]:从一个运行中的容器创建一个新的镜像。-m参数用于添加提交信息,-a参数指定作者信息,例如docker commit -m "updated nginx config" -a "John Doe" mynginx mynewnginx:1.0。docker pause [容器名称或ID]:暂停容器内的所有进程。容器状态变为暂停,但资源仍被占用,可通过docker unpause恢复。docker unpause [容器名称或ID]:恢复暂停的容器内的所有进程,使容器继续正常运行。docker top [容器名称或ID]:查看容器内正在运行的进程信息,类似于在宿主机上使用top命令查看进程。docker stats [容器名称或ID]:实时查看容器的资源使用情况,包括 CPU、内存、网络、磁盘 I/O 等指标。docker cp [容器名称或ID]:[容器内文件路径] [宿主机目标路径]:从容器内复制文件或目录到宿主机。也可反向操作,将宿主机文件复制到容器内,例如docker cp mynginx:/etc/nginx/nginx.conf /tmp/。docker logs [容器名称或ID]:查看容器的日志输出。可用于排查容器内应用程序的运行问题,例如查看 Web 服务器的访问日志或应用程序的错误日志。docker logs -f [容器名称或ID]:实时跟踪容器的日志输出,类似于在 Linux 系统中使用tail -f命令查看日志文件,方便实时监控容器的运行状态。docker logs --tail=[行数] [容器名称或ID]:查看容器日志的最后指定行数,例如docker logs --tail=100 mynginx,可查看 mynginx 容器日志的最后 100 行。四、网络管理命令docker network ls:列出所有 Docker 网络。展示网络的名称、ID、驱动类型、子网等信息,方便管理和查看当前的网络配置。docker network create [网络名称]:创建一个新的 Docker 网络。默认创建的是桥接网络,也可通过指定--driver参数创建其他类型的网络,如docker network create --driver=overlay myoverlaynet。docker network inspect [网络名称或ID]:查看指定 Docker 网络的详细信息,以 JSON 格式输出。包含网络的配置、连接的容器、子网掩码、网关等详细信息,有助于排查网络相关问题。docker network rm [网络名称或ID]:删除指定的 Docker 网络。注意,若网络中还有容器连接,则无法删除,需先断开容器与网络的连接。docker network connect [网络名称或ID] [容器名称或ID]:将容器连接到指定的网络。使容器能够与该网络中的其他容器进行通信,例如docker network connect mynet mynginx。docker network disconnect [网络名称或ID] [容器名称或ID]:将容器从指定的网络中断开连接。容器将无法再与该网络中的其他容器通信,但仍可通过其他网络进行通信。docker run --network=[网络名称或ID] [镜像名称[:标签]]:在创建容器时指定容器使用的网络。例如docker run --network=mynet -d nginx,创建一个使用 mynet 网络的 nginx 容器。五、数据卷管理命令docker volume ls:列出所有 Docker 数据卷。展示数据卷的名称、驱动、挂载点等信息,方便管理和查看数据卷资源。docker volume create [数据卷名称]:创建一个新的 Docker 数据卷。数据卷用于在容器之间或容器与宿主机之间共享数据,可持久化保存数据。docker volume inspect [数据卷名称]:查看指定 Docker 数据卷的详细信息,以 JSON 格式输出。包含数据卷的创建时间、挂载路径、使用的驱动等详细信息。docker volume rm [数据卷名称]:删除指定的 Docker 数据卷。注意,若数据卷正在被容器使用,则无法删除,需先停止并删除相关容器。docker run -v [数据卷名称]:[容器内挂载路径] [镜像名称[:标签]]:在创建容器时挂载数据卷到容器内。例如docker run -v myvolume:/data -d mysql,将名为 myvolume 的数据卷挂载到 mysql 容器的 /data 目录。docker run -v [宿主机路径]:[容器内挂载路径]:在创建容器时将宿主机的目录挂载到容器内。实现容器与宿主机之间的数据共享,如docker run -v /hostdata:/containerdata -d ubuntu。docker run -v [宿主机路径]:[容器内挂载路径]:ro:在创建容器时将宿主机的目录以只读方式挂载到容器内。容器只能读取挂载目录中的数据,无法进行写入操作,例如docker run -v /hostdata:/containerdata:ro -d ubuntu。六、其他常用命令docker system df:查看 Docker 系统的磁盘使用情况,包括镜像、容器、数据卷占用的磁盘空间。有助于了解系统资源的使用情况,及时清理不必要的资源。docker system prune:清理 Docker 系统中未使用的资源,包括未使用的镜像、容器、网络和数据卷。释放磁盘空间,优化系统性能。docker builder prune:清理 Docker 构建缓存。在构建镜像过程中,会产生一些缓存文件,使用此命令可清理这些缓存,减少磁盘占用。docker swarm init:初始化一个 Docker Swarm 集群,将当前节点作为管理节点。用于搭建分布式容器编排环境,实现容器的集群化管理。docker swarm join --token [令牌] [管理节点地址]:将当前节点加入到指定的 Docker Swarm 集群中。需要从管理节点获取加入令牌,实现集群的扩展。docker stack deploy -c [docker-compose.yml文件路径] [堆栈名称]:使用 docker - compose 文件部署一个堆栈到 Docker Swarm 集群。方便在集群环境中部署和管理多个相关的容器服务。docker-compose up:在当前目录下根据 docker - compose.yml 文件启动并运行所有服务容器。常用于本地开发和测试环境中,一键启动多个相关的容器服务。docker-compose down:停止并删除由 docker - compose.yml 文件定义的所有服务容器、网络和数据卷。用于清理环境,停止相关服务的运行。docker-compose build:根据 docker - compose.yml 文件构建镜像。如果镜像已经存在,会根据文件中的定义更新镜像。docker-compose ps:列出由 docker - compose.yml 文件定义的所有服务容器的运行状态,方便查看当前启动的容器情况。docker-compose logs:查看由 docker - compose.yml 文件定义的所有服务容器的日志输出,方便排查多个容器服务的运行问题。docker-compose restart:重启由 docker - compose.yml 文件定义的所有服务容器,使新的配置生效。docker-compose stop:停止由 docker - compose.yml 文件定义的所有服务容器,但保留容器的状态和数据。docker-compose start:启动之前停止的由 docker - compose.yml 文件定义的所有服务容器。docker secret create [秘密名称] [文件路径]:在 Docker Swarm 集群中创建一个秘密,用于存储敏感信息,如密码、密钥等。通过文件路径指定要存储的秘密内容。docker config create [配置名称] [文件路径]:在 Docker Swarm 集群中创建一个配置,用于存储应用程序的配置文件。通过文件路径指定要存储的配置内容。docker service create --name [服务名称] --replicas [副本数量] [镜像名称[:标签]]:在 Docker Swarm 集群中创建一个服务,指定服务名称、副本数量和使用的镜像。例如docker service create --name mynginx --replicas 3 nginx,创建一个名为 mynginx 的服务,包含 3 个 nginx 容器副本。docker service update --replicas [新副本数量] [服务名称]:更新 Docker Swarm 集群中服务的副本数量。例如docker service update --replicas 5 mynginx,将 mynginx 服务的副本数量更新为 5 个。docker service rm [服务名称]:删除 Docker Swarm 集群中的指定服务,停止并删除服务的所有容器副本。docker service scale [服务名称]=[副本数量]:调整 Docker Swarm 集群中服务的副本数量,与docker service update --replicas命令功能类似。例如docker service scale mynginx = 4,将 mynginx 服务的副本数量调整为 4 个。往期推荐【K8s学习】常用命令 100 条,建议收藏!【Windows学习】整理100条命令大全,效率拉满【网络学习】display查看命令大全
2025年07月10日
2 阅读
0 评论
0 点赞
2025-07-10
如何减少 Docker 日志大小,有效节省磁盘空间
Docker 是一个强大的容器化平台,它允许开发者在一个独立的环境中运行应用程序。虽然 Docker 提供了很多便利,但在实际使用过程中,日志文件可能会迅速增长,占用大量的磁盘空间。本文将详细介绍如何减少 Docker 日志大小,从而有效节省磁盘空间。Docker 日志机制Docker 使用日志驱动程序来管理和存储容器日志。默认情况下,Docker 使用 json-file 日志驱动程序,它将所有容器的标准输出和标准错误日志记录到 JSON 文件中。这些日志文件会不断增长,尤其是在高负载或长时间运行的容器中。检查当前日志设置在优化 Docker 日志之前,首先需要了解当前的日志设置。可以使用以下命令来查看当前 Docker 守护进程的配置:docker info | grep "Logging Driver"这将显示当前使用的日志驱动程序。默认情况下,通常是 json-file。日志轮转(Log Rotation)日志轮转是一种有效的减少日志大小的方法。它通过限制日志文件的大小和数量来防止日志文件无限制地增长。可以通过以下步骤来配置 Docker 的日志轮转。修改 Docker 守护进程配置编辑 Docker 守护进程的配置文件(通常位于 /etc/docker/daemon.json),添加以下内容:{ "log-driver": "json-file", "log-opts": { "max-size": "10m", "max-file": "3" }}默认的是:在这个示例中,max-size 设置为 10MB,max-file 设置为 3,这意味着每个日志文件最大为 10MB,最多保留 3 个文件。重新启动 Docker配置文件修改后,需要重新启动 Docker 守护进程以使更改生效:sudo systemctl restart docker使用其他日志驱动程序除了 json-file,Docker 还支持多种日志驱动程序,如 syslog、journald、gelf 等。选择适合的日志驱动程序可以更有效地管理日志。Syslog 日志驱动程序syslog 是一个常用的日志系统,可以集中管理和存储日志。使用 syslog 作为日志驱动程序可以将日志发送到集中式的日志服务器。在 /etc/docker/daemon.json 中配置 syslog:{ "log-driver": "syslog", "log-opts": { "syslog-address": "tcp://localhost:514", "tag": "{{.Name}}" }}重启 Docker 以应用更改:sudo systemctl restart docker使用 Docker Compose 配置日志对于使用 Docker Compose 管理的应用,可以在 docker-compose.yml 文件中配置日志选项:version: '3.8'services: web: image: nginx logging: driver: "json-file" options: max-size: "10m" max-file: "3"这种方法可以为每个服务单独配置日志策略,提供更灵活的日志管理。清理旧日志即使配置了日志轮转,仍可能需要手动清理旧日志以释放磁盘空间。以下是一些常用的日志清理方法。使用 docker system prunedocker system prune 命令可以清理未使用的容器、网络、图像和构建缓存:docker system prune -f手动删除日志文件可以手动删除 Docker 日志文件来释放空间。Docker 日志文件通常位于 /var/lib/docker/containers/<container-id>/ 目录下。使用以下命令找到并删除日志文件:sudo rm /var/lib/docker/containers/*/*.log日志聚合和外部存储将日志发送到外部存储或日志聚合系统(如 ELK Stack、Splunk)可以减少本地磁盘空间的占用。使用 ELK StackELK Stack(Elasticsearch, Logstash, Kibana)是一个常用的日志聚合和分析工具。可以通过以下步骤将 Docker 日志发送到 ELK Stack:安装并配置 ELK Stack。使用 gelf 日志驱动程序将日志发送到 Logstash:{ "log-driver": "gelf", "log-opts": { "gelf-address": "udp://logstash-server:12201", "tag": "{{.Name}}" }}在 logstash.conf 中配置 Logstash 以接收并处理 Docker 日志:input { gelf { port => 12201 }}output { elasticsearch { hosts => ["localhost:9200"] index => "docker-logs-%{+YYYY.MM.dd}" }}通过这种方法,可以将 Docker 日志集中存储和分析,而不占用本地磁盘空间。实时日志监控实时监控日志可以帮助快速发现和解决问题,避免日志文件无限制增长。常用的监控工具包括 Prometheus 和 Grafana。使用 Prometheus 和 Grafana安装并配置 Prometheus 和 Grafana。使用 node-exporter 收集 Docker 主机的系统指标,包括磁盘使用情况。在 Grafana 中配置仪表板,监控 Docker 日志文件的大小和增长率。通过实时监控,可以及时采取措施,防止日志文件过大。
2025年07月10日
1 阅读
0 评论
0 点赞
1
2