万网空间存放两个网站,百度推广费用一天多少钱,外贸阿里巴巴国际站,广州代理记账Docker 安装与配置指南
本文介绍如何在 Ubuntu 系统上安装 Docker#xff0c;解决权限问题#xff0c;配置 Docker Compose#xff0c;代理端口转发#xff0c;容器内部代理问题等并进行相关的优化设置。参考官方文档#xff1a;Docker 官方安装指南
一、安装 Docker
1…Docker 安装与配置指南
本文介绍如何在 Ubuntu 系统上安装 Docker解决权限问题配置 Docker Compose代理端口转发容器内部代理问题等并进行相关的优化设置。参考官方文档Docker 官方安装指南
一、安装 Docker
1. 卸载旧版本
在安装新版 Docker 之前建议先卸载旧版本以避免潜在的冲突。执行以下命令卸载旧版本的 Docker
sudo apt-get remove docker docker-engine docker.io containerd runc2. 更新包索引并安装必要的依赖
更新包索引并安装一些必要的依赖包
sudo apt-get update
sudo apt-get install -y ca-certificates curl3. 配置 Docker 仓库
创建 apt 密钥存储目录
确保密钥存储目录存在并设置合适的权限
sudo install -m 0755 -d /etc/apt/keyrings移除旧的 Docker 配置
删除之前所有与 Docker 相关的配置文件以确保仓库配置的干净整洁
sudo rm -rf /etc/apt/sources.list.d/docker.list
sudo rm -rf /etc/apt/keyrings/docker.asc添加 Docker 的官方 GPG 密钥
从阿里云镜像源添加 Docker 的官方 GPG 密钥
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg设置 Docker 仓库
将 Docker 仓库添加到 apt 源列表中
echo \deb [arch$(dpkg --print-architecture) signed-by/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu \$(. /etc/os-release echo $VERSION_CODENAME) stable | \sudo tee /etc/apt/sources.list.d/docker.list /dev/null4. 安装 Docker 引擎
更新包索引并安装最新版本的 Docker 引擎及相关组件
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin二、配置 Docker 权限与 Docker Compose
1. 解决 Docker 权限问题
为了避免每次使用 sudo 来运行 Docker 命令可以将当前用户添加到 docker 用户组
创建 Docker 用户组
如果 docker 组尚未存在则创建该组
sudo groupadd docker将当前用户添加到 Docker 组
执行以下命令将当前用户添加到 docker 组中
sudo usermod -aG docker $USER激活组更改
重新加载组更改使其立即生效
newgrp docker验证权限
运行一个测试镜像以验证配置是否成功
docker run hello-world
# 如果镜像拉取失败则需要配置代理请见下文2. 安装 Docker Compose
注意新版 Docker 已内置 docker compose注意中间有空格命令无需单独安装 docker-compose。推荐使用内置命令
docker compose version如果仍然需要安装独立的 docker-compose可以执行以下命令
sudo apt install docker-compose3. 启动 Docker 服务
确保 Docker 服务已经启动并设置为开机自启
启动 Docker 服务
可以使用以下任意一种方式启动 Docker 服务
sudo service docker start或
sudo systemctl start docker设置开机自启
sudo systemctl enable docker检查 Docker 服务状态
sudo systemctl status docker4. 完整的权限检查和修复
确保 Docker 套接字的权限正确并验证用户组配置
检查 Docker Socket 权限
ls -l /var/run/docker.sock修改 Socket 权限如有必要
如果权限不正确可以调整为所有用户可读写
sudo chmod 666 /var/run/docker.sock检查用户组
查看当前用户所属的组确认是否包含 docker
groups $USER重启 Docker 服务
应用权限更改
sudo systemctl restart docker5. WSL 特定设置
如果你在 Windows Subsystem for Linux 2WSL2中使用 Docker可能需要额外的配置
设置 iptables
在 WSL2 中设置 iptables 为 legacy 模式
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy重启 Docker 服务
sudo systemctl restart docker6. 配置代理如需要
一般来说宿主的代理地址为 127.0.0.1.7890, 正常情况下宿主机的ip:7890 是不能代理的这对于docker容器内部访问代理很不友好因此可以使用端口转发的方式将宿主机的某个端口映射到127.0.0.1.7890端口上这样使用http://host.docker.internal:映射端口就能访问宿主机的代理了和宿主机本身访问127.0.0.1.7890是一致的。端口映射的命令为
sudo apt-get install socat
# 假设我们映射的宿主ip的端口为7891
socat TCP-LISTEN:7891,fork TCP:127.0.0.1:7890# 映射完成后docker 通过http://host.docker.internal:7891就可以使用代理了
## 验证方法
curl -x http://host.docker.internal:7891 www.google.com # http://host.docker.internal:7891 就是使用代理拉取镜像Docker Daemon 代理配置 方法一/etc/systemd/system/docker.service.d/http-proxy.conf 当执行 docker pull 拉取镜像一般是从 DockerHub 等仓库拉取此时容易遇到网络问题。 这一拉取过程实际上是 Docker daemon 在执行而它是由 systemd 启动管理的并不直接使用我们 shell 中配置的代理环境变量。为了让其走代理需要编写其 systemd 配置。 影响范围仅影响 Docker Daemon 的网络请求如拉取镜像、推送镜像等。不影响 Docker 客户端docker 命令或容器内部的网络请求。 # 创建 Docker 服务配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 创建 HTTP 代理配置文件
sudo nano /etc/systemd/system/docker.service.d/http-proxy.conf添加以下内容 [Service]
EnvironmentHTTP_PROXYhttp://127.0.0.1:7890 或 http://host.docker.internal:7891 均可
EnvironmentHTTPS_PROXYhttp://127.0.0.1:7890 或 http://host.docker.internal:7891 均可保存配置后需要重启 Docker daemon。注意这会重启所有容器 sudo systemctl daemon-reload
sudo systemctl restart docker方法二/etc/docker/daemon.json 影响范围优先级比/etc/systemd/system/docker.service.d低设置会影响 Docker 的整体行为不会直接影响容器内部的代理设置格式是 JSON sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json添加以下内容 {proxies: {http-proxy: http://host.docker.internal:7891,https-proxy: http://host.docker.internal:7891,no-proxy: localhost,127.0.0.1}
}生效方式 # 修改后需要重启 Docker 服务sudo systemctl restart docker建议上述两个配置目录和文件都配置一下 使用过程 # 1. 创建环境变量文件 .env:
HTTP_PROXYhttp://host.docker.internal:7891
HTTPS_PROXYhttp://host.docker.internal:7891
NO_PROXYlocalhost,127.0.0.1,192.168.49.2# 在 docker-compose.yml 中使用
services:myapp:env_file:- .env
# 或在运行容器时
docker run --env-file .env image_name
# 对于 Minikube
export HTTP_PROXYhttp://host.docker.internal:7891
export HTTPS_PROXYhttp://host.docker.internal:7891
export NO_PROXYlocalhost,127.0.0.1,192.168.49.2
minikube start --container-runtimecontainerd查看代理设置
bash
docker info
bash
sudo systemctl show --propertyEnvironment docker
**注意**如果 Docker 无法通过设置的代理连接到 Docker Hub请检查代理配置是否正确并确保代理服务器正常运行。docker 容器内部代理
容器内的应用或许需要访问外部网络甚至外网我们也希望其流量通过代理。这需要在容器内配置环境变量。 可以在 Dockerfile 或者 docker run 的时候设定环境变量。host.docker.internal 是docker的特殊变量它可以动态的获取宿主机的ip地址由于上文我们已经讲宿主机ip:7891 映射本地环回 127.0.0.1:7890所以http://host.docker.internal:7891就可以做docker容器的代理地址。 内容示例
# 这里只能使用 http://host.docker.internal:7891 这种方式代理因为如果输入127.0.0.1 是容器访问自己的环回地址
docker run -e HTTP_PROXYhttp://host.docker.internal:7891 \-e HTTPS_PROXYhttp://host.docker.internal:7891 \-e NO_PROXYlocalhost,127.0.0.1 \your-container-image指定 httpProxy 属性值相当于在容器内同时设定 http_proxy 和 HTTP_PROXY 两个环境变量。
保存配置后无需重启任何服务。在保存配置之后启动的 docker 容器都会自动配置对应环境变量之前的容器不会改变。然而应用是否读取该环境变量并使用代理设置取决于应用的实现。这并不是一个标准。⚠️ 注意此处环境变量会在容器内被读取所以地址 127.0.0.1 指的是容器自身而非宿主机。
⚠️ 注意如果容器是以 root 模式启动的使用 sudo上面所述的 ~/.docker/config.json 其实指的是 /root/.docker/config.json。
⚠️ 注意curl 等工具并不支持 socks 代理只支持 http。所以建议统一配置 http 代理。7. 验证 Docker 安装
运行以下命令验证 Docker 和 Docker Compose 是否正确安装
docker run hello-world
docker compose version三、Docker 日常维护
清理 Docker 缓存
定期清理不再使用的 Docker 镜像、容器、网络和缓存以释放系统资源
docker system prune -af注意此命令将删除所有未使用的容器、网络、镜像和构建缓存请谨慎使用。