首页
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常用
关于
搜索到
29
篇与
转载微信公众号文章
的结果
2025-08-30
双向文件同步最佳工具-unison
Unison 是一款 双向文件同步工具,支持跨平台(Linux/macOS/Windows),能智能合并两端的修改,解决冲突,适合多设备间的文件同步。以下是它的核心用法和高级技巧:一、核心特点1. 双向同步:自动检测源端和目的端的更改,合并冲突。2. 跨平台:支持 Windows、Linux、macOS。3. 增量同步:仅传输变化部分,节省带宽。4. 冲突处理:提供交互式解决选项。5. 支持 SSH/RSH:加密传输,适合远程同步。二、安装方法Linux (Debian/Ubuntu)sudo apt install unisonmacOS (Homebrew)brew install unison三、基础用法1. 本地目录同步unison /path/to/local1 /path/to/local2• 首次运行会提示确认同步方向,输入 y 确认。2. 远程同步(SSH)unison /local/dir ssh://user@remote//remote/dir• 注意远程路径格式:// 后接绝对路径(如 //home/user/data)。3. 自动接受默认操作(非交互模式)unison -auto /path1 /path2• -auto:自动处理无冲突的更改。4. 忽略特定文件/目录创建配置文件 ~/.unison/default.prf:# 忽略 .git 目录和临时文件ignore = Name .gitignore = Name *.tmp然后运行:unison -batch /path1 /path2• -batch:非交互模式,依赖配置文件规则。四、高级用法1. 定时同步(结合 cron)crontab -e添加以下内容(每天凌晨 3 点同步):0 3 * * * unison -batch /local/dir ssh://user@remote//remote/dir >> /var/log/unison.log 2>&12. 强制单向同步(覆盖目标)unison -force /source /target -confirmmerge=false -prefer /source• -prefer:指定优先保留的版本。3. 同步后执行命令# 在配置文件中添加postcmd = chmod -R 755 /target/dir4. 限制带宽(避免占用网络)unison -sshargs "-o Compression=no -l 1000" /local ssh://remote//remote• -l 1000:限制 SSH 带宽为 1000 KB/s。五、配置文件示例~/.unison/myconfig.prf:# 同步目录root = /home/user/docsroot = ssh://user@server//backup/docs# 忽略规则ignore = Name *.logignore = Path /tmp# 自动合并策略auto = truebatch = true# 冲突时保留较新文件prefer = newer运行指定配置:unison myconfig六、冲突处理• 同步时若两端文件均被修改,Unison 会提示:Conflict: file.txt was modified on both hosts可选操作:- `d`:差异对比(需配置 diff 工具)。- `l`:保留左侧版本。- `r`:保留右侧版本。- `m`:手动编辑合并。七、与 Rsync 对比工具同步方向冲突处理适用场景Unison双向交互式解决多设备频繁互相同步Rsync单向覆盖目标备份或镜像(如服务器同步)八、常见问题1. SSH 连接超时增加超时时间:unison -sshargs "-o ServerAliveInterval=30" /local ssh://remote//remote2. 权限问题同步后恢复权限:# 在配置文件中添加perms = 0o7553. 大文件同步中断使用 -retry 参数:unison -retry 5 /path1 /path2总结Unison 是 双向同步的最佳工具,尤其适合:• 多台电脑同步工作文档(如笔记本 + 台式机)。• 开发团队保持代码库一致。• 需要冲突解决的复杂同步场景。通过配置文件和命令行参数,可以灵活适应各种需求!--END--觉得不错,可以关注,点赞,转发,如果需要技术援助,可以联系我们,期待您的莅临
2025年08月30日
0 阅读
0 评论
0 点赞
2025-08-30
一键拥有可视化 WireGuard VPN:用 wg-easy 打造你的轻量级远程办公利器
大家好,我是一名从一线打拼出来的老运维,十多年折腾在系统维护、故障抢修、上线发布、运维管理一线,踩过不少坑,也总结了不少实战经验。如果你喜欢这类技术文章,欢迎关注 + 转发支持!大家如果有问题,也可以问问我的智能助手,有可能在以往的文章找到答案哦:有问必答助手在上一篇《实战系列一:用 Podman + WireGuard 打造你的下一代轻量级 VPN(UI 可视化管理)》中,我们聊到如何用 Podman 打造轻量级 VPN。今天给大家带来一个更“傻瓜式”的方案 —— wg-easy。如果你想要快速拥有一套 带可视化管理界面的 WireGuard VPN,而且安装配置不要太复杂,wg-easy 就是你的不二之选。wg-easy 有什么特点?🚀 一键部署:通过 Docker 或 Docker Compose 直接拉起,几分钟即可用。🖥️ 可视化 UI 界面:再也不用手写配置文件,所有操作都能在网页端完成。👥 用户/客户端管理:支持创建多个 VPN 客户端,自动生成配置文件和二维码。📱 手机/PC 快速接入:扫描二维码即可导入 WireGuard 配置,零门槛上手。🔒 安全可靠:基于 WireGuard,性能高效,安全性有保障。🌍 适用场景广泛:远程办公、家庭快速组网、访问 NAS/智能家居,甚至自建加密代理。一句话总结:wg-easy = WireGuard + UI 管理面板 + 一键安装体验。环境准备在开始之前,确保你有以下环境:一台可以联网的 Linux 服务器已安装 Docker 和 Docker Compose一个可用的公网 IP 或 DDNS 域名安装 wg-easy1. 创建目录mkdir -p ~/wg-easy && cd ~/wg-easy2. 编写 docker-compose.yml在 ~/wg-easy 目录下新建 docker-compose.yml 文件:volumes: etc_wireguard:services:wg-easy: environment: # Optional: # - PORT=51821 # - HOST=0.0.0.0 -INSECURE=true image:ghcr.io/wg-easy/wg-easy:15 container_name:wg-easy networks: wg: ipv4_address:10.42.42.42 ipv6_address:fdcc:ad94:bacf:61a3::2a volumes: -etc_wireguard:/etc/wireguard -/lib/modules:/lib/modules:ro ports: -"51820:51820/udp" -"51821:51821/tcp" restart:unless-stopped cap_add: -NET_ADMIN -SYS_MODULE # - NET_RAW # ⚠️ Uncomment if using Podman sysctls: -net.ipv4.ip_forward=1 -net.ipv4.conf.all.src_valid_mark=1 -net.ipv6.conf.all.disable_ipv6=0 -net.ipv6.conf.all.forwarding=1 -net.ipv6.conf.default.forwarding=1networks:wg: driver:bridge enable_ipv6:true ipam: driver:default config: -subnet:10.42.42.0/24 -subnet: fdcc:ad94:bacf:61a3::/64说明:该配置启用了 IPv6,适合需要双栈网络的用户。sysctls 部分开启了 Linux 内核转发功能,保证 VPN 正常通信。volumes 挂载了 /lib/modules,避免内核模块缺失问题。默认 UI 端口是 51821,WireGuard 服务端口是 51820/udp。3. 启动服务docker-compose up -d验证服务是否启动成功:docker ps打开 UI 界面在浏览器访问:http://你的服务器IP:51821在界面中,你可以:新增/删除 VPN 客户端下载配置文件或直接扫码导入手机 WireGuard APP查看当前连接状态详细操作如下:1️⃣ 访问打开欢迎页2️⃣ 创建管理员用户3️⃣ 使用新配置4️⃣ 输入公网IP或点击自动检测选择正确IP,端口51820/UDP,请在防火墙或安全组上放行。5️⃣登录系统6️⃣默认wg-easy必须使用https登录,可以配置环境变量- INSECURE=true来使用非安全的连接,配置后重启生效。7️⃣创建客户端8️⃣ 下载配置文件或扫码连接界面清爽直观,真正做到了 零配置、零门槛、快速上手。应用场景远程办公:员工在外地也能通过 VPN 访问公司内部系统。家庭组网:随时随地访问 NAS、智能家居设备。安全上网:通过自建 VPN,避免公共 WiFi 的安全隐患。游戏加速:搭建家庭 VPN,随时回国/出国游戏。总结相比传统的 WireGuard 配置方式,wg-easy 最大的优势就是简单 + 可视化。 只需要几条命令,就能拥有一套带管理界面的 VPN 系统,特别适合:没有太多 Linux 基础的用户想快速落地远程办公/家庭组网的场景喜欢可视化操作的朋友一句话评价:wg-easy = WireGuard VPN 最优雅的打开方式。 🚀下一篇我将介绍 WireGuard VPN在家用群晖 NAS上部署组网的最佳实践,不知大家是否有需求,欢迎留言!文章中所提及的Yaml和镜像,可以留言获取。往期推荐:实战系列一:用 Podman + WireGuard 打造你的下一代轻量级 VPN(UI 可视化管理)实战系列二:WireGuard 配置优化、密钥管理与客户端接入全攻略END重点提醒因为有你们的关注和反馈,分享才更有意义 ❤️。👉 有需要的朋友可以加我 微信:jack_2013L,记得备注暗号【007】,就能入群和更多小伙伴一起交流~💬 你在日常工作中有没有遇到相同的问题?欢迎在评论区留言,我会挑选一些有意思的留言在下篇文章里展开。✨ 如果觉得内容对你有帮助,别忘了 关注 + 转发,这样你就不会错过后续的实战分享啦!
2025年08月30日
0 阅读
0 评论
0 点赞
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日
0 阅读
0 评论
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日
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 点赞
1
2
...
6