建设施工合同网站中企动力科技股份有限公司网站
建设施工合同网站,中企动力科技股份有限公司网站,大兵seo博客,如何让自己做的网站让别人看到1. 为什么要在龙蜥Anolis OS 8上部署Docker#xff1f;
如果你刚接触龙蜥Anolis OS 8#xff0c;可能会好奇#xff0c;为什么我要在这个系统上折腾Docker#xff1f;直接买个云服务商预装好的不香吗#xff1f;作为一个在运维和开发圈子里摸爬滚打了十来年的老手#xf…1. 为什么要在龙蜥Anolis OS 8上部署Docker如果你刚接触龙蜥Anolis OS 8可能会好奇为什么我要在这个系统上折腾Docker直接买个云服务商预装好的不香吗作为一个在运维和开发圈子里摸爬滚打了十来年的老手我告诉你自己动手部署Docker尤其是在Anolis OS这样的“潜力股”系统上好处可太多了。首先Anolis OS 8是咱们国内OpenAnolis社区推出的开源操作系统你可以把它看作是CentOS的“精神续作”完美兼容CentOS 8的生态。这意味着你在CentOS上跑的那些老应用、老脚本基本都能无缝迁移过来。但Anolis OS又不止于此它针对云场景做了很多优化内核更新性能更强。我实测过同样的应用在Anolis OS 8上跑资源开销和响应速度确实比老旧的CentOS 8要好一截。在这个系统上部署Docker相当于给你的容器化应用找了一个更稳定、更高效的“家”。其次自己部署Docker能让你对这套技术栈有绝对的控制权。从版本选择、依赖管理到后续的镜像加速、安全配置每一个环节你都能了如指掌。这尤其适合那些对生产环境有严格要求或者需要深度定制容器运行时的团队。比如你可以选择安装特定版本的Docker Engine而不是被动接受云厂商提供的默认版本。这种掌控感是直接使用托管服务很难获得的。最后也是很多新手容易忽略的一点学习成本。通过亲手在Anolis OS上走一遍Docker的安装、配置、排错流程你对Linux系统管理、软件包依赖、服务配置的理解会深刻得多。下次再遇到类似“podman和docker冲突”的问题你就能一眼看穿本质而不是到处找教程。接下来我就带你从零开始手把手走一遍这个流程我会把每一步的原理、可能遇到的坑以及我的解决方案都掰开揉碎了讲清楚。2. 部署前的关键准备清理战场与理解系统在敲下第一条安装命令之前充分的准备工作能帮你避开至少80%的麻烦。很多人一上来就照着教程yum install docker-ce结果报出一堆依赖错误瞬间就懵了。别急我们先花几分钟把“战场”打扫干净。2.1 确认你的Anolis OS 8环境首先我们得知道自己站在什么“地基”上。打开终端用这条命令看看系统详情cat /etc/os-release你会看到类似这样的输出NAMEAnolis OS VERSION8.9 IDanolis ID_LIKErhel fedora centos ...重点看VERSION_ID8.9和ID_LIKE这一行。它告诉我们这是Anolis OS 8.9并且它像RHEL、CentOS。这意味着我们可以使用CentOS的Docker仓库来安装Docker这是后续操作的关键前提。我建议全程使用root用户操作或者给普通用户加上sudo权限避免权限不足导致的各种诡异问题。2.2 彻底卸载可能冲突的旧版本这是至关重要的一步也是原始文章里提到但没展开的“坑点”。Anolis OS 8默认可能已经安装了一些容器相关的工具比如podman、buildah它们和Docker的某些组件可能存在冲突。直接安装Docker系统会报错告诉你runc版本不对或者podman冲突。所以安装前必须进行大扫除。执行下面的命令移除任何可能存在的旧版或冲突的Docker相关包yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine运行后系统可能会提示“未安装这些软件包”这很正常说明你的环境是干净的直接跳过即可。但如果有包被移除也别担心这只是清除了非官方的Docker版本。这里有个重要提示这个卸载命令不会删除你已有的镜像、容器、卷和网络配置它们都安全地躺在/var/lib/docker/目录下。如果你想全新开始可以手动备份后删除这个目录。2.3 更新系统并安装基础工具在安装新软件前更新系统仓库索引是个好习惯yum -y update-y参数表示自动回答“是”省去我们手动确认的麻烦。接着安装一些Docker所依赖的基础工具yum install -y yum-utils device-mapper-persistent-data lvm2我来解释下这几个包是干嘛的yum-utils 提供了yum-config-manager等实用工具待会儿我们用它来添加Docker的官方仓库。device-mapper-persistent-data 和 lvm2 这是Docker存储驱动devicemapper所需要的依赖。虽然现在Docker默认的存储驱动可能是overlay2但安装它们可以确保兼容性避免一些潜在的存储问题。做完这些你的系统就已经是一个准备好的“白板”了接下来我们可以正式开始安装Docker。3. 核心安装步骤详解与典型冲突解决好了基础打牢了现在进入正题安装Docker。这里我强烈推荐使用Docker官方提供的仓库进行安装好处是方便后续升级和管理。原始文章里提到了离线安装的方式那适合没有外网的环境但今天我们主要讲最通用的在线安装法。3.1 添加Docker的官方Yum仓库由于Anolis OS兼容CentOS我们直接使用为CentOS配置的Docker仓库。为了速度我们使用国内的镜像源这里用阿里云的镜像yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo这个命令会在/etc/yum.repos.d/目录下创建一个docker-ce.repo文件里面定义了Docker CE社区版的软件源地址。添加成功后我们可以让yum缓存一下新仓库的元数据这样后续搜索和安装会更快yum makecache --timer3.2 安装Docker引擎及组件现在执行安装命令。我们不仅要安装Docker引擎本身docker-ce还要安装客户端docker-ce-cli、容器运行时containerd.io以及两个非常实用的插件构建扩展插件docker-buildx-plugin和Compose插件docker-compose-plugin。yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin重点来了在Anolis OS 8上十有八九你会遇到原始文章里提到的那个经典错误。命令执行后yum会开始解析依赖然后很可能打印出一大段红色的错误信息。核心内容大概是要安装的podman包系统可能已安装或作为其他包的依赖需要某个版本的runc但当前可用的runc版本不满足要求因此产生了冲突。错误信息的最后yum非常贴心地给出了解决方案提示尝试在命令行中添加 --allowerasing 来替换冲突的软件包或 --skip-broken 来跳过无法安装的软件包或 --nobest 来不只使用软件包的最佳候选这就是我们解决问题的钥匙。--allowerasing参数的意思是“允许擦除”即允许yum为了安装我们指定的新软件包而移除那些与之冲突的旧软件包。在Anolis OS上这通常意味着要移除系统自带的podman、buildah等工具因为它们和Docker的containerd.io在runc组件上存在版本冲突。所以我们按照提示重新执行安装命令并加上这个参数yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin --allowerasing这次yum会给出一个详细的“事务摘要”列出将要安装的新包和将要移除的旧包。你会看到它计划移除podman、buildah、cockpit-podman等。确认无误后输入y并回车继续。安装过程会从镜像源下载大约100MB的软件包。期间可能会提示你导入GPG密钥用于验证软件包签名输入y确认即可。安装脚本执行时你可能会看到一些关于sss_cache的警告信息这通常与系统安全服务有关一般不影响Docker安装可以暂时忽略。3.3 验证安装并启动Docker服务安装完成后我们先检查一下Docker客户端是否安装成功docker version如果只显示Client部分的信息并提示Cannot connect to the Docker daemon...这是正常的因为Docker服务守护进程还没启动。接下来启动Docker服务并设置它开机自启systemctl enable --now dockerenable是设置开机自启--now参数表示立刻启动服务。一条命令搞定两件事非常方便。如果你不希望Docker开机自启可以分开操作systemctl start docker启动服务systemctl enable docker设置自启。现在再次运行docker version你应该能看到完整的Client和Server信息了。还可以跑一个经典的测试命令docker run hello-world如果这个命令能成功执行并打印出“Hello from Docker!”等欢迎信息恭喜你Docker引擎已经在你的Anolis OS 8上成功安装并运行起来了4. 必做配置为Docker引擎配置国内镜像加速Docker安装成功只是第一步。如果你尝试拉取一个流行的镜像比如docker pull nginx可能会发现速度慢如蜗牛甚至直接超时失败。这是因为Docker Hub的服务器在海外网络状况很不稳定。所以配置一个国内的镜像加速器是提升Docker使用体验的必选项而不是可选项。4.1 为什么镜像加速器如此重要你可以把镜像加速器理解为一个“缓存代理”或者“中转站”。当你请求拉取一个镜像时请求会先发到国内的加速器服务器。如果这个服务器上有缓存就直接返回给你速度极快如果没有它会帮你去Docker Hub拉取缓存下来再传给你并且下次别人拉取时就快了。这不仅能极大提升下载速度还能提高拉取成功率尤其是在网络高峰期。4.2 如何配置镜像加速器配置方法很简单就是创建一个Docker的守护进程配置文件。我们以配置中科大镜像源为例请注意镜像源服务状态可能变化使用时请确认其可用性# 首先创建Docker的配置目录如果不存在 mkdir -p /etc/docker # 然后创建并编辑daemon.json配置文件 tee /etc/docker/daemon.json -EOF { registry-mirrors: [https://docker.mirrors.ustc.edu.cn/] } EOF这里使用了tee命令配合Here Document-EOF来直接创建并写入文件内容非常方便。registry-mirrors这个键的值是一个数组意味着你可以配置多个加速器地址Docker会按顺序尝试。4.3 其他可选的镜像加速器除了中科大国内还有其他一些常用的镜像加速服务。需要特别注意的是镜像加速服务有时会暂停或调整使用前最好确认一下其官方公告。原始文章也提到了这一点。这里我列举几个并附上我的使用经验网易163镜像https://hub-mirror.c.163.com/。速度不错稳定性较好是我早期常用的一个。阿里云镜像https://你的ID.mirror.aliyuncs.com。你需要有一个阿里云账号在容器镜像服务控制台里可以找到为你分配的专属加速器地址。这个地址通常速度最快也最稳定毕竟是阿里云自家的服务。七牛云镜像https://reg-mirror.qiniu.com。也是一家不错的云服务商提供的。你可以选择一个添加到registry-mirrors数组中也可以添加多个用逗号隔开例如{ registry-mirrors: [ https://hub-mirror.c.163.com/, https://docker.mirrors.ustc.edu.cn/ ] }4.4 使配置生效并验证配置文件写好后需要重新加载系统守护进程并重启Docker服务才能使配置生效systemctl daemon-reload systemctl restart docker现在如何验证加速器是否生效了呢一个简单的方法是拉取一个镜像观察速度。或者可以运行docker info命令在输出结果中查找Registry Mirrors部分你会看到你刚刚配置的加速器地址。配置好镜像加速器之后你再进行docker pull操作体验会有一个质的飞跃。我自己的测试环境在配置前后拉取一个几百MB的镜像时间从十几分钟甚至失败缩短到了几十秒。这个配置一劳永逸之后所有通过docker pull命令拉取的镜像默认都会走你配置的加速器。5. 安装后的优化与基本操作指南Docker跑起来了镜像也能飞快拉取了但这还不是终点。为了让Docker用起来更顺手、更安全我们还需要进行一些基本的优化和设置。这部分内容很多教程不会细讲但却能实实在在提升你的工作效率。5.1 管理Docker服务与查看状态作为系统服务我们得知道怎么管理它。除了之前用到的systemctl enable/start/restart docker还有一些常用命令查看Docker服务状态systemctl status docker。这个命令能告诉你服务是否在运行、最近一次的日志、以及进程ID等信息排查问题时非常有用。停止Docker服务systemctl stop docker。禁止Docker开机自启systemctl disable docker。有时候修改了配置比如刚才的daemon.json或者遇到问题重启服务是常规操作systemctl restart docker。重启期间所有正在运行的容器都会短暂停止这点在生产环境操作时需要特别注意。5.2 以非root用户身份运行Docker可选但推荐默认情况下Docker命令需要root权限。这意味着每次运行docker命令都要加sudo很麻烦。我们可以将当前用户加入到docker用户组这样该用户就可以直接执行Docker命令了。# 将当前登录用户加入docker组请将 your_username 替换为你的实际用户名 usermod -aG docker your_username重要提示 将用户加入docker组等同于赋予其root权限因为Docker可以操作主机系统。所以这只建议在你个人开发或测试环境或者你完全信任该用户的环境中进行。在企业生产服务器上应谨慎使用。执行上述命令后用户需要完全退出当前会话并重新登录或者新开一个终端组权限的更改才会生效。之后你就可以不用sudo直接运行docker ps等命令了。5.3 几个必备的Docker基础命令现在Docker已经完全就绪我们来试试几个最常用的命令感受一下容器化的便利拉取镜像docker pull nginx:latest。这会从配置的镜像站拉取最新版的Nginx镜像。运行容器docker run -d -p 80:80 --name my-nginx nginx。这个命令做了几件事-d 让容器在后台运行守护进程模式。-p 80:80 将主机的80端口映射到容器的80端口。--name my-nginx 给容器起个名字方便管理。nginx 指定基于哪个镜像运行容器。 运行后你就可以在浏览器访问服务器的IP地址看到Nginx的欢迎页面了。查看运行中的容器docker ps。查看所有容器包括已停止的用docker ps -a。查看镜像列表docker images。停止容器docker stop my-nginx。删除容器docker rm my-nginx。删除镜像用docker rmi nginx。5.4 关于存储和日志的简单提醒Docker默认会把镜像、容器数据存储在/var/lib/docker目录。如果你的系统根目录空间不大可以考虑在安装前通过修改daemon.json的data-root参数将数据目录指向一个更大的磁盘分区。另外容器的日志默认也会堆积时间长了可能占满磁盘。你可以通过配置日志驱动和日志轮转策略来管理这个属于进阶话题但心里要有这根弦。6. 遇到问题怎么办常见故障排查思路即使按照步骤操作你也可能会遇到一些意外情况。别慌我把我遇到过的一些典型问题及解决思路分享给你。问题一执行docker version时Server部分显示Cannot connect to the Docker daemon。这是最常见的问题意味着Docker服务没有运行。首先检查服务状态systemctl status docker。如果服务是inactive (dead)那就启动它systemctl start docker。如果启动失败查看详细日志journalctl -xe -u docker。日志里通常会给出失败原因比如端口被占用、存储驱动加载失败、或者配置文件daemon.json有语法错误JSON格式非常严格多一个逗号都不行。问题二拉取镜像速度依然很慢或者报net/http: TLS handshake timeout。这明显是网络问题。确认加速器配置已生效运行docker info | grep -A 5 Mirrors看看你的加速器地址是否在列。尝试更换加速器如果当前加速器不稳定可以编辑/etc/docker/daemon.json换成另一个地址然后重启Docker服务。检查防火墙有些企业的防火墙可能会阻断对某些镜像站地址的访问。可以尝试暂时关闭防火墙systemctl stop firewalld测试但生产环境请谨慎操作并配置正确的防火墙规则。问题三运行容器时提示port is already allocated或Conflict. The container name is already in use。这是端口或名称冲突。端口冲突-p 80:80表示把主机80端口映射给容器。如果主机上已经有Nginx、Apache等程序占用了80端口就会冲突。你可以改用其他主机端口例如-p 8080:80然后通过主机IP:8080访问。名称冲突--name指定的名字必须是唯一的。用docker ps -a看看是不是已经有同名的容器即使是停止状态的有的话先删除旧容器或者给新容器换个名字。问题四安装时遇到其他依赖错误和原始文章里的podman冲突不一样。Anolis OS的软件仓库和更新节奏可能与CentOS有细微差别。首先尝试清理yum缓存并更新yum clean all yum makecache。查看具体错误信息 yum的错误信息通常很详细会指出是哪个包、哪个依赖出了问题。根据提示尝试使用--skip-broken跳过损坏的包或--nobest不总是选择最佳候选版本等参数。寻求社区帮助 OpenAnolis社区非常活跃遇到奇怪的问题时可以去社区论坛或搜索相关Issue很可能已经有人遇到并解决了。记住遇到报错先看日志把错误信息的关键部分复制出来搜索十有八九能找到解决方案。运维和开发的很多经验其实就是这么一点点积累起来的。