首页
Linux常用
docker常用
关于
Search
1
docker安装MDCX
244 阅读
2
麒麟KylinV10离线下载安装包及安装
173 阅读
3
iStoreOS上使用WireGuard
135 阅读
4
UNRAID增加和缩小虚拟机虚拟磁盘大小
52 阅读
5
麒麟v10系统openssh升级OpenSSH_10.0p2-OpenSSL 3.4.2
50 阅读
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
登录
Search
标签搜索
nginx
unraid
PVE
数据库
dockerfile
同步
wow服务器
装机硬件
宏
v2ray
直通
电视盒子
相册
黑裙7.0.1
远程穿透
定时
ssh
emby
symlink
软链接
奥黛丽·逐爱者
累计撰写
116
篇文章
累计收到
21
条评论
首页
栏目
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
页面
Linux常用
docker常用
关于
搜索到
116
篇与
奥黛丽·逐爱者
的结果
2025-08-30
实战系列一:用 Podman + WireGuard 打造你的下一代轻量级 VPN(UI 可视化管理)
大家好,我是一名从一线打拼出来的老运维,十多年折腾在系统维护、故障抢修、上线发布、运维管理一线,踩过不少坑,也总结了不少实战经验。如果你喜欢这类技术文章,欢迎关注 + 转发支持!大家如果有问题,也可以问问我的智能助手,有可能在以往的文章找到答案哦:有问必答助手在日常运维或个人网络环境搭建中,VPN 是一个绕不开的话题。它不仅能帮你安全访问内网,还能实现多机互联和加密通信。 传统方案很多,比如 OpenVPN、IPSec 等,但近几年一颗新星正在迅速崛起 —— WireGuard。而在容器化浪潮中,我们也有了更轻量、更安全的选择 —— Podman。本篇就是这个实战系列的第一篇:利用 Podman + Podman-Compose 部署 WireGuard 和 WireGuard-UI,快速打造一个可视化 VPN 服务。1️⃣ Podman 和 WireGuard 简介Podman Podman 是一个轻量级容器引擎,号称 “Docker 的无守护进程替代品”。它最大的亮点是 无 root 模式,同时支持 OCI 标准镜像,安全性更高。对运维工程师来说,Podman 的命令几乎完全兼容 Docker,学习成本很低。WireGuard WireGuard 是 Linux 内核中的新一代 VPN 协议,号称“快到飞起的 VPN”。它只有 4000 行左右代码,相比 OpenVPN、IPSec 的十几万行代码更简单、更安全。它采用最先进的加密算法(如 ChaCha20、Curve25519),性能表现极佳,已经成为很多企业和开发者的首选。WireGuard-UI WireGuard 本身配置比较“硬核”,但 WireGuard-UI 提供了 Web 界面,让你可以方便地管理客户端、查看配置二维码,极大降低了使用门槛。2️⃣ 安装 Podman 与 Podman-Compose首先在你的 Linux 服务器上安装 Podman。这里以 CentOS / RHEL 系为例(Ubuntu 也类似):# 更新系统sudo yum -y update# 安装 podmansudo yum -y install podman# 验证版本podman --version# 安装 podman-composepip3 install podman-compose验证安装是否成功:podman-compose version示例如下:[root@ip-172-31-6-116 bin]# pip3 install podman-composeCollecting podman-compose Downloading podman_compose-1.5.0-py3-none-any.whl (47 kB) |████████████████████████████████| 47 kB 388 kB/s Collecting python-dotenv Downloading python_dotenv-1.1.1-py3-none-any.whl (20 kB)Requirement already satisfied: pyyaml in /usr/lib64/python3.9/site-packages (from podman-compose) (5.4.1)Installing collected packages: python-dotenv, podman-composeSuccessfully installed podman-compose-1.5.0 python-dotenv-1.1.1[root@ip-172-31-6-116 bin]# podman-compose versionpodman-compose version 1.5.0podman version 5.5.23️⃣ 使用 Podman-Compose 部署 WireGuard + WireGuard-UI我们用 docker-compose.yml 格式的文件,Podman 可以直接兼容。3.1 创建工作目录mkdir -p ~/wireguard-vpn && cd ~/wireguard-vpn3.2 编写 docker-compose.yml创建 docker-compose.yml,podman-compose 是为了兼容 docker-compose 的生态,所以文件依然是docker-compose.yml:注意:服务端要开放51820/UDP(WireGuard)和5000/TCP UI管理端口version: "3.8"services:wireguard: image:linuxserver/wireguard:latest container_name:wireguard cap_add: -NET_ADMIN -SYS_MODULE environment: -PUID=1000 -PGID=1000 -TZ=Asia/Shanghai -SERVERURL=your.vpn.server.ip -SERVERPORT=51820 -PEERS=5 -PEERDNS=1.1.1.1 -INTERNAL_SUBNET=10.13.13.0 volumes: -./config:/config -/lib/modules:/lib/modules ports: -51820:51820/udp sysctls: -net.ipv4.conf.all.src_valid_mark=1 restart:unless-stoppedwireguard-ui: image:ngoduykhanh/wireguard-ui:latest container_name:wireguard-ui depends_on: -wireguard ports: -5000:5000 volumes: -./config:/data restart: unless-stopped3.3 启动服务执行:podman-compose up -d确认容器运行:podman ps4️⃣ 打开 WireGuard-UI 界面浏览器访问:http://服务器IP:5000进入 UI 界面,你可以:创建和管理客户端配置自动生成二维码,方便手机扫描接入一键导出配置文件这样,一个 Podman 驱动的 WireGuard VPN Server 就搭建完成了!5️⃣ 总结在这篇 实战系列一 中,我们完成了:认识 Podman 与 WireGuard安装 Podman + Podman-Compose使用 compose 管理 WireGuard 与 UI成功打开 Web 界面管理客户端下一篇,我们将深入讲解 WireGuard 配置优化、密钥管理、客户端接入 等实战内容,让你的 VPN 更安全、更高效。END重点提醒因为有你们的关注和反馈,分享才更有意义 ❤️。👉 有需要的朋友可以加我 微信:jack_2013L,记得备注暗号【007】,就能入群和更多小伙伴一起交流~💬 你在日常工作中有没有遇到相同的问题?欢迎在评论区留言,我会挑选一些有意思的留言在下篇文章里展开。✨ 如果觉得内容对你有帮助,别忘了 关注 + 转发,这样你就不会错过后续的实战分享啦!
2025年08月30日
1 阅读
0 评论
0 点赞
2025-08-13
测试
12345611234
2025年08月13日
7 阅读
0 评论
0 点赞
2025-08-10
海量数据库操作
海量数据库操作{collapse}{collapse-item label="备份" open}vb_dump工具备份示例vb_dump -U username -W password -h hostname -p port -F c -f /home/bak/xj_zssj_backup.dmp xj_zssj-U:数据库用户名(需有备份权限)-W:用户密码-h:数据库服务器地址(本地可省略)-p:数据库端口(默认5432可省略)-F c:指定自定义格式(压缩格式)-f:指定输出文件路径最后参数为要备份的数据库名实际操作vb_dump -U vastbase -W Xj@123456 -p 5432 -F c -f /home/vastbase/backup_test/xj_zssj_backup.dmp xj_zssj{/collapse-item}{collapse-item label="覆盖方式恢复"}默认情况下,vb_restore不会自动覆盖现有数据库如果需要完全覆盖,需要先清理目标数据库推荐的安全操作步骤:a) 首先删除现有数据库(确保已备份重要数据):vsql -U vastbase -W Xj@123456 -p 5432 -c "DROP DATABASE xj_zssj;"b) 创建新数据库:vsql -U vastbase -W Xj@123456 -p 5432 -c "CREATE DATABASE xj_zssj;"c) 执行恢复vb_restore -U vastbase -W Xj@123456 -p 5432 -F c -d xj_zssj /home/vastbase/backup/xj_zssj_backup.dmp# 1. 先断开所有连接到目标数据库的会话 vsql -U vastbase -W Xj@123456 -p 5432 -c "clean connection to all force for database xj_zssj;" # 2. 再删除数据库 vsql -U vastbase -W Xj@123456 -p 5432 -c "DROP DATABASE xj_zssj;" # 3. 创建新数据库 vsql -U vastbase -W Xj@123456 -p 5432 -c "CREATE DATABASE xj_zssj;" # 4. 执行恢复 vb_restore -U vastbase -W Xj@123456 -p 5432 -F c -d xj_zssj /home/vastbase/backup/xj_zssj_backup.dmp其他可能有用的参数:-e 显示执行的SQL命令-v 详细模式-c 在恢复前清理数据库对象(但不包括数据库本身){/collapse-item}{lamp/}草稿备份vb_dump -U vastbase -W Xj@123456 -p 5432 -F c -f /home/vastbase/backup_test/xj_zssj_sync_backup.dmp xj_zssj_syncvb_dump -U vastbase -W Xj@zssj123 -p 5432 -F c -f /home/vastbase/backup_test/xj_zssj_backup.dmp xj_zssj恢复vb_restore -U vastbase -W Xj@123456 -p 5432 -F c -d xj_zssj /home/vastbase/backup_test/xj_zssj_backup.dmp恢复到dockervb_restore -U vastbase -W Xj@123456 -p 5432 -F c -d xj_zssj /home/vastbase/backup/xj_zssj_backup.dmp{/collapse-item}{collapse-item label="折叠标题二"}sql黑屏执行 -- 1. 创建用户(Vastbase推荐使用CREATE USER) CREATE USER ixjkj WITH PASSWORD 'Xj@123456'; -- 2. 授予系统管理员权限(避免使用SUPERUSER,改用SYSADMIN) ALTER USER ixjkj WITH SYSADMIN; -- 3. 创建数据库并指定所有者 CREATE DATABASE xj_zssj WITH OWNER ixjkj;{/collapse-item}{/collapse}
2025年08月10日
10 阅读
0 评论
0 点赞
2025-08-06
麒麟KylinV10离线下载安装包及安装
{collapse}{collapse-item label="离线包获取和安装" open}1、应用场景服务器处于内网,需要离线安装。2、下载安装包环境先在能上网的系统上下载离线安装包。3、yum是否支持只下载不安装yum 是否支持 --downloadonly(该参数不会安装软件,只会下载软件) --downloaddir(用于指定软件包下载后存储路径)执行yum帮助命令:yum --help如果列表中出现 --downloadonly --downloaddir 参数则表示目前yum已支持只下载不安装。没有出现则还需安装一个插件yum-plugin-downloadonly安装命令如下:yum install -y yum-plugin-downloadonly4、yum离线下载vsftpd安装包命令yum install -y --downloadonly --downloaddir=. vsftpd yum 最重要的两个参数--downloadonly 该参数不会安装软件,只会下载软件。 --downloaddir 用于指定软件包下载后存储路径。5、离线安装vsftpd服务器命令一种方式: 执行命令:yum localinstall vsftpd-3.0.3-32.ky10.x86_64.rpm另一种方式:执行命令:rpm -ivh vsftpd-3.0.3-32.ky10.x86_64.rpm下载好后的软件包,使用yum localinstall即可以离线安装。注意事项:yum localinstall 后面要指定安装所需的全部rpm包[root@KylinV10 vsftpd]# yum localinstall vsftpd-3.0.3-32.ky10.x86_64.rpm vsftpd-help-3.0.3-32.ky10.x86_64.rpm除了yum localinstall命令以外,还可以使用rpm -ivh命令安装rpm包。6、验证初步安装vsftpd服务器成果①查看vsftpd服务器状态命令:systemctl status vsftpd②启动vsftpd命令:systemctl start vsftpd③查看vsftpd服务器状态命令:systemctl status vsftpd原文链接:https://blog.csdn.net/huxiaochao_6053/article/details/103661720{/collapse-item}{collapse-item label="详细配置"}配置开机启动(1)查看vsftp服务状态# 查看状态 service vsftpd status #开启 service vsftpd start #停止 service vsftpd stop #重启 service vsftpd restart(2)设置开机启动# 查看是否开机启动: systemctl is-enabled vsftpd.service # 设置开机自启动: systemctl enable vsftpd.service # 查看开机启动服务列表: systemctl list-unit-files|grep enabled # 查看启动失败的服务列表: systemctl --failed防火墙设置方式一:关闭防火墙# 1.查看防火墙状态 systemctl status firewalld.service # 2.关闭防火墙 systemctl stop firewalld.service方式二:防火墙开放端口# 暂时开放 firewall-cmd --add-service=ftp # 永久开放 firewall-cmd --add-service=ftp --permanent # 使配置生效 firewall-cmd --reload # 查看服务 firewall-cmd --list-servicevsftp.conf配置查看原始配置:cat /etc/vsftpd/vsftpd.conf |grep -v ^## vsftp.conf原始配置 anonymous_enable=YES local_enable=YES write_enable=YES local_umask=022 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES xferlog_std_format=YES listen=NO listen_ipv6=YES pam_service_name=vsftpd userlist_enable=YES tcp_wrappers=YES# 1.配置前先备份: mv /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.backup # 2.编辑内容 vi /etc/vsftpd/vsftpd.confvsftpd.conf内容(此内容仅支持本地用户)如下:#设置为NO代表不允许匿名 anonymous_enable=NO #设定本地用户可以访问 local_enable=YES #可以进行写的操作 write_enable=YES #设定上传文件的权限掩码 local_umask=022 #设定上传文件的权限掩码 dirmessage_enable=YES #设定端口20进行数据连接 connect_from_port_20=YES listen=YES listen_ipv6=NO #设定pam服务下的vsftpd验证配置文件名,文件默认地址再/etc/pam.d/vsftpd pam_service_name=vsftpd userlist_enable=NO userlist_deny=NO tcp_wrappers=YES #设定开启日志记录功能 xferlog_enable=YES #设定vsftpd服务日志保存路劲 xferlog_file=/var/log/xferlog #设定日志使用标准的记录格式 xferlog_std_format=YES配置vsftpd文件# 1.备份vsftpd文件: cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.backup # 2.编辑vsftpd文件: vi /etc/pam.d/vsftpd # 3.修改内容: pam_shells.so改为pam_nologin.so # 4.重启服务 systemctl restart vsftpd.service创建本地用户# 1.创建不需要登录的本地用户 useradd -m -s /sbin/nologin ftp1 # 2.给新建用户设置密码 passwd ftp1 # 3.查询用户 getent passwd # 4.删除用户 userdel -r user配置 SFTP 限制(可选)编辑 /etc/ssh/sshd_config,添加以下内容以限制用户仅能使用 SFTP:Match User ftp1 ForceCommand internal-sftp ChrootDirectory /home/ftp1 PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no然后重启 SSH 服务:sudo systemctl restart sshd设置目录权限(如果启用了 ChrootDirectory):sudo chown root:root /home/ftp1 # Chroot 目录必须属于 root sudo chmod 755 /home/ftp1 # 确保权限正确 sudo mkdir /home/ftp1/upload # 用户可上传的子目录 sudo chown ftp1:ftp1 /home/ftp1/upload权限错误的补充[root@KylinV10 vsftpd]# chown root:root /home/ftp1 [root@KylinV10 vsftpd]# chmod 755 /home/ftp1 [root@KylinV10 vsftpd]# chown ftp1:ftp1 /home/ftp1/upload [root@KylinV10 vsftpd]# chmod 755 /home/ftp1/upload [root@KylinV10 vsftpd]# sftp ftp1@192.168.0.204 The authenticity of host '192.168.0.204 (192.168.0.204)' can't be established. ED25519 key fingerprint is SHA256:wFf1hZrzgheDFXybazHzXFCbniJCZcOvgMmrVOfrZT0. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added '192.168.0.204' (ED25519) to the list of known hosts. Authorized users only. All activities may be monitored and reported. ftp1@192.168.0.204's password: Connected to 192.168.0.204. sftp> cd upload/ sftp> mkdir test123 sftp> ls test123 sftp> bye [root@KylinV10 vsftpd]#登录验证# 1.需要先安装ftp插件,检查 [root@localhost vsftpd]# ftp 192.168.17.88 -bash: ftp: command not found # 2.安装ftp客户端 yum install ftp -y # 3.登录 [root@CDH103 ~]# ftp 192.168.17.60 Connected to 192.168.17.60 (192.168.17.60). 220 (vsFTPd 3.0.2) Name (192.168.17.60:root): ftp1 331 Please specify the password. Password: 230 Login successful. Remote system type is UNIX. Using binary mode to transfer files. ftp> ? # 4.ftp命令输入?可以查看命令;常用命令如下: cd #切换目录 ls #查看列表 pwd #查看当前目录 get file #下载文件 put file #上传文件 mkdir file #创建文件或目录 rename file newfile #修改文件名 delete file #删除文件 quit #退出 bye #退出测试 SSH 登录(应被拒绝):根据测试结果,SFTP 用户 ftp1 的配置已经生效:SSH 登录被拒绝(显示 This service allows sftp connections only)仅允许 SFTP 连接这说明配置是正确的,用户 ftp1 只能通过 SFTP 传输文件,而无法通过 SSH 登录服务器。{/collapse-item}{/collapse}
2025年08月06日
173 阅读
2 评论
0 点赞
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日
7 阅读
0 评论
0 点赞
1
2
3
...
24