Ubuntu 安装 docker 配置环境及其常用命令
Docker 安装与配置指南
本文介绍如何在 Ubuntu 系统上安装 Docker,解决权限问题,配置 Docker Compose,代理端口转发,容器内部代理问题等并进行相关的优化设置。参考官方文档:Docker 官方安装指南
一、安装 Docker
1. 卸载旧版本
在安装新版 Docker 之前,建议先卸载旧版本以避免潜在的冲突。执行以下命令卸载旧版本的 Docker:
sudo apt-get remove docker docker-engine docker.io containerd runc
2. 更新包索引并安装必要的依赖
更新包索引并安装一些必要的依赖包:
sudo apt-get update
sudo apt-get install -y ca-certificates curl
3. 配置 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/null
4. 安装 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-compose
3. 启动 Docker 服务
确保 Docker 服务已经启动,并设置为开机自启:
启动 Docker 服务
可以使用以下任意一种方式启动 Docker 服务:
sudo service docker start
或
sudo systemctl start docker
设置开机自启
sudo systemctl enable docker
检查 Docker 服务状态
sudo systemctl status docker
4. 完整的权限检查和修复
确保 Docker 套接字的权限正确,并验证用户组配置:
检查 Docker Socket 权限
ls -l /var/run/docker.sock
修改 Socket 权限(如有必要)
如果权限不正确,可以调整为所有用户可读写:
sudo chmod 666 /var/run/docker.sock
检查用户组
查看当前用户所属的组,确认是否包含 docker:
groups $USER
重启 Docker 服务
应用权限更改:
sudo systemctl restart docker
5. WSL 特定设置
如果你在 Windows Subsystem for Linux 2(WSL2)中使用 Docker,可能需要额外的配置:
设置 iptables
在 WSL2 中设置 iptables 为 legacy 模式:
sudo update-alternatives --set iptables /usr/sbin/iptables-legacy
重启 Docker 服务
sudo systemctl restart docker
6. 配置代理(如需要)
一般来说,宿主的代理地址为 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] Environment="HTTP_PROXY=http://127.0.0.1:7890" 或 "http://host.docker.internal:7891" 均可 Environment="HTTPS_PROXY=http://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 的整体行为,不会直接影响容器内部的代理设置,格式是 JSONsudo 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_PROXY=http://host.docker.internal:7891 HTTPS_PROXY=http://host.docker.internal:7891 NO_PROXY=localhost,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_PROXY=http://host.docker.internal:7891 export HTTPS_PROXY=http://host.docker.internal:7891 export NO_PROXY=localhost,127.0.0.1,192.168.49.2 minikube start --container-runtime=containerd
查看代理设置
```bash
docker info
``````bash
sudo systemctl show --property=Environment 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_PROXY=http://host.docker.internal:7891 \-e HTTPS_PROXY=http://host.docker.internal:7891 \-e NO_PROXY=localhost,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
注意:此命令将删除所有未使用的容器、网络、镜像和构建缓存,请谨慎使用。
相关文章:
Ubuntu 安装 docker 配置环境及其常用命令
Docker 安装与配置指南 本文介绍如何在 Ubuntu 系统上安装 Docker,解决权限问题,配置 Docker Compose,代理端口转发,容器内部代理问题等并进行相关的优化设置。参考官方文档:Docker 官方安装指南 一、安装 Docker 1…...
自动化01
测试用例的万能公式:功能测试界面测试性能测试易用性测试安全性测试兼容性测试 自动化的主要目的就是用来进行回归测试 新产品--第一个版本 (具备丰富的功能),将产品的整体进行测试,人工创造一个自动化测试用例,在n个版本的时候…...
音频入门(二):音频数据增强
本文介绍了一些常见的音频数据增强方法,并给出了代码实现。 目录 一、简介 二、代码 1. 安装必要的库 2. 代码 3. 各函数的介绍 4. 使用方法 参考: 一、简介 音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。 使用数据…...
MySQL管理事务处理
目录 1、事务处理是什么 2、控制事务处理 (1)事务的开始和结束 (2)回滚事务 (3)使用COMMIT (4)使用保留点 (5)结合存储过程的完整事务例子 3、小结 …...
MySQL数值型函数详解
简介 本文主要讲解MySQL数值型函数,包括:ROUND、RAND、ABS、MOD、TRUNCATE、CEIL、CEILING、FLOOR、POW、POWER、SQRT、LOG、LOG2、LOG10、SIGN、PI。 本文所有示例中,双横杠左边为执行的SQL语句,右边为执行语句的返回值。 ROU…...
54.DataGrid数据框图 C#例子 WPF例子
首先是绑定一个属性,属性名称无所谓。到时候看属性设置的啥,可能要改。 <DataGrid ItemsSource"{Binding Index_instance}"/> 然后创建INotifyPropertyChanged的类,并把相关固定的代码粘贴上去。 然后把这个目录类建好&am…...
总结6..
背包问题的解决过程 在解决问题之前,为描述方便,首先定义一些变量:Vi表示第 i 个物品的价值,Wi表示第 i 个物品的体积,定义V(i,j):当前背包容量 j,前 i 个物品最佳组合对应的价值,同…...
复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)
文章目录 背景前言一、复位信号的同步与释放1.1 同步复位1.1.1 综述1.1.2 优缺点 1.2 recovery time和removal time1.3 异步复位1.3.1 综述1.3.2 优缺点 1.4 同步复位 与 异步复位1.5 异步复位、同步释放1.5.1 总述1.5.2 机理1.5.3 复位网络 二、思考与补充2.1 复…...
Gartner发布2025年网络治理、风险与合规战略路线图
新型网络风险和合规义务,日益成为网络治理、风险与合规实践面临的问题。安全和风险管理领导者可以参考本文,实现从被动、专注于合规的方法到主动、进一步自动化方法的转型。 主要发现 不断变化的监管环境和不断扩大的攻击面,使企业机构难以实…...
基于STM32的智能空气质量监测与净化系统设计
目录 引言系统设计 硬件设计软件设计 系统功能模块 空气质量检测模块自动净化模块数据显示与用户交互模块远程监控与数据上传模块 控制算法 空气质量检测与判断算法净化设备控制算法数据记录与远程反馈算法 代码实现 空气质量检测与显示代码自动净化与调节代码数据上传与远程控…...
人工智能之数学基础:线性代数中的线性相关和线性无关
本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...
08 工欲善其事必先利其器—常用类
1 字符串相关 1.1 String 所属包:java.lang 代表不可变的字符序列 注意:Java中,String是一个final类 1)创建字符串方式 String a "hello"; // 开辟内存空间 String b new String("hello"); String d…...
Redis实战-初识Redis
初识Redis 1、Redis简介2、 Redis数据结构简介3、 Redis命令3.1 字符串3.2 列表3.3 集合3.4 散列3.5 有序集合3.6 发布与订阅3.7 其他命令3.7.1 排序3.7.2 过期时间 如有侵权,请联系~ 如有错误,也欢迎批评指正~ 本篇文章大部分是来…...
spring boot中实现手动分页
手动分页 UserMapper.xml <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace"cn.m…...
【优选算法】5----有效三角形个数
又是一篇算法题,今天早上刚做的热乎的~ 其实我是想写博客但不知道写些什么(就水一下啦) -------------------------------------begin----------------------------------------- 题目解析: 这道题的题目算是最近几道算法题里面题目最短的&a…...
C++打字模拟
改进于 文宇炽筱_潜水 c版的打字效果_c自动打字-CSDN博客https://blog.csdn.net/2401_84159494/article/details/141023898?ops_request_misc%257B%2522request%255Fid%2522%253A%25227f97863ddc9d1b2ae9526f45765b1744%2522%252C%2522scm%2522%253A%252220140713.1301023…...
最新版pycharm如何配置conda环境
首先在conda prompt里创建虚拟环境,比如 conda create --prefix E:/projects/myenv python3.8然后激活 conda activate E:/projects/myenv往里面安装点自己的包,比如 conda install pytorch1.7.1 torchvision0.8.2 -c pytorch打开pycharm 注意&#x…...
UML-对象图(Object Diagram)
一、定义 UML对象图用于描述系统中对象的状态和相互关系,是类图的一个实例化版本,主要展示了类图中定义的关系在特定时间点的实际体现。它帮助开发者在设计阶段理解对象之间的实际关系、属性值和状态,从而支持系统设计的准确性与有效性。 二、组成要素 UML对象图主要由以…...
Jmeter 动态参数压力测试时间段预定接口
🎯 本文档详细介绍了如何使用Apache JMeter进行压力测试,以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求,利用CSV文件动态配置时间段ID和用户token,确保了测试数据的真实性和有效性。文档中还…...
超大型集团合并报表数智管理转型
摘要:数字经济时代,数字化技术已成为驱动财务管理价值释放的重要引擎,数智化能力的提升是当前一流财务信息化建设的最新趋势。财务部门是企业的“数据交汇中心”和“信息加工中心”,通过对企业各项财务数据的分类、汇总和清晰呈现…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
