前言真的感觉有很久没有写过博客了距离上一次发博客居然都已经过去快 5 年了。重新想起发一篇博客主要是因为最近忙着给香橙派配置 Docker 以及拉取镜像时的代理众所周知因为魔法的原因国内的镜像站貌似都不能用了Docker 的拉取又是走的自己后台的dockerd守护进程执行的所以给终端配置代理也没作用所以只能给 Docker 守护进程单独配置代理踩了不少坑而且感觉还怪麻烦的所以想给未来的自己或者其他人记录一下。Docker 的安装对于 Ubuntu 甚至 Linux 来说大多数软件都是通过 apt 来安装并且管理的。1. 前置准备如果之前安装过 Docker 的话得先卸载避免冲突。可以去 Docker 官网找卸载的指令或者直接运行sudo apt remove docker docker-engine docker.io containerd runc如果之前没安装过就跳过这一步即可。2. 导入 Docker 官方密钥这一步主要是将 Docker 官方的密钥下载保存到/usr/share/keyrings/docker-archive-keyring.gpg防止下载的软件被恶意篡改。在终端运行curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg其中curl下载选项的含义是不显示进度条、连接日志-s但如果遇到下载失败的情况比如网络断了、链接失效会明确输出错误-S。若链接返回 4xx/5xx 错误直接返回失败状态-f不会把错误页面传给gpg避免gpg解析无效内容报错。若 Docker 官方的 GPG 密钥链接有重定向自动跟随到最终地址-L确保下载到完整的密钥文件。3. 配置 Docker 官方仓库这一步是最重要的因为要将 Docker 的官方仓库添加到apt的下载源中从而保证能通过apt下载 Dockerecho deb [arch$(dpkg --print-architecture) signed-by/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable | sudo tee /etc/apt/sources.list.d/docker.list /dev/nullsigned-by/usr/share/keyrings/docker-archive-keyring.gpg就是刚刚导入的软件包签名验证密钥如果没有这个密钥apt会提示签名无效拒绝安装。stable的含义是仓库的分支Docker 的仓库分stable稳定版、edge测试版等这里选稳定版。sudo tee /etc/apt/sources.list.d/docker.list的含义是写入配置文件。不用sudo echo ... 文件名是因为重定向是 shell 处理的sudo只给echo提权不给 shell 提权会提示权限不足而tee是在sudo权限下执行能正常写入系统目录。/etc/apt/sources.list.d/docker.list是目标配置文件路径其中文件名必须以.list结尾并且放在sources.list.d文件夹下。因为/etc/apt/sources.list是主配置文件里面是系统默认的软件源比如 Ubuntu 官方的基础软件仓库。而/etc/apt/sources.list.d/是扩展目录用于存放自定义的软件源配置文件所有.list后缀的文件都会被apt自动读取。4. 安装 Docker首先先更新apt索引sudo apt update然后直接安装最新版 Docker 即可sudo apt install -y docker-ce docker-ce-cli containerd.io5. 验证安装运行官方的hello-world容器测试 Docker 是否正常工作sudo docker run hello-world若输出以下信息说明安装成功Hello from Docker! This message shows that your installation appears to be working correctly. ...Docker 代理的配置当我们执行docker pull ...想要去拉取镜像的时候会发现提示连接超时这是因为一些不可言说的原因导致的。之前还能够通过国内的一些镜像站去拉取但是 24 年 6 月之后国内比较大的镜像站都不能正常访问了小的镜像站感觉稳定性一般所以最终的方法就只有自己配置代理了。因为 Docker 的拉取是走的自己后台的dockerd守护进程所以给终端配置代理也没作用只能给 Docker 守护进程单独配置代理。1. 创建 Docker 代理配置文件Docker 的代理配置文件路径是/etc/systemd/system/docker.service.d/proxy.conf。我当时配置的时候甚至连system文件夹都没有但是没关系自己创建对应的文件夹和文件就行了。# 先创建目录如果目录已经存在就不用了 # -p 的作用是确保目标目录及其所有缺失的父目录都能被创建且如果目录已存在也不会报错。 sudo mkdir -p /etc/systemd/system/docker.service.d # 创建并编辑代理配置文件 sudo vim /etc/systemd/system/docker.service.d/proxy.conf2. 写入代理配置在打开的proxy.conf文件中粘贴以下内容代理地址和端口替换成自己的[Service] EnvironmentHTTP_PROXYhttp://127.0.0.1:7890 EnvironmentHTTPS_PROXYhttp://127.0.0.1:7890替换说明把http://127.0.0.1:7890改成实际代理地址。若代理需要认证比如用户名:密码格式是http://用户名:密码代理地址:端口例http://user:pass123127.0.0.1:7890。3. 重启 Docker 服务让代理配置生效运行# 重新加载systemd配置识别新的proxy.conf文件 sudo systemctl daemon-reload # 重启Docker守护进程 sudo systemctl restart docker然后重新docker pull一下看是否生效。