当前位置: 首页 > news >正文

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 代理配置
  1. 方法一:/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
    
  2. 方法二:/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_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例子

首先是绑定一个属性&#xff0c;属性名称无所谓。到时候看属性设置的啥&#xff0c;可能要改。 <DataGrid ItemsSource"{Binding Index_instance}"/> 然后创建INotifyPropertyChanged的类&#xff0c;并把相关固定的代码粘贴上去。 然后把这个目录类建好&am…...

总结6..

背包问题的解决过程 在解决问题之前&#xff0c;为描述方便&#xff0c;首先定义一些变量&#xff1a;Vi表示第 i 个物品的价值&#xff0c;Wi表示第 i 个物品的体积&#xff0c;定义V(i,j)&#xff1a;当前背包容量 j&#xff0c;前 i 个物品最佳组合对应的价值&#xff0c;同…...

复位信号的同步与释放(同步复位、异步复位、异步复位同步释放)

文章目录 背景前言一、复位信号的同步与释放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年网络治理、风险与合规战略路线图

新型网络风险和合规义务&#xff0c;日益成为网络治理、风险与合规实践面临的问题。安全和风险管理领导者可以参考本文&#xff0c;实现从被动、专注于合规的方法到主动、进一步自动化方法的转型。 主要发现 不断变化的监管环境和不断扩大的攻击面&#xff0c;使企业机构难以实…...

基于STM32的智能空气质量监测与净化系统设计

目录 引言系统设计 硬件设计软件设计 系统功能模块 空气质量检测模块自动净化模块数据显示与用户交互模块远程监控与数据上传模块 控制算法 空气质量检测与判断算法净化设备控制算法数据记录与远程反馈算法 代码实现 空气质量检测与显示代码自动净化与调节代码数据上传与远程控…...

人工智能之数学基础:线性代数中的线性相关和线性无关

本文重点 在线性代数的广阔领域中,线性相关与线性无关是两个核心概念,它们对于理解向量空间、矩阵运算、线性方程组以及人工智能等问题具有至关重要的作用。 定义与直观理解 当存在一组不全为0的数x1,x2,...,xn使得上式成立的时候,那么此时我们可以说向量组a1,a2...,an…...

08 工欲善其事必先利其器—常用类

1 字符串相关 1.1 String 所属包&#xff1a;java.lang 代表不可变的字符序列 注意&#xff1a;Java中&#xff0c;String是一个final类 1&#xff09;创建字符串方式 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 过期时间 如有侵权&#xff0c;请联系&#xff5e; 如有错误&#xff0c;也欢迎批评指正&#xff5e; 本篇文章大部分是来…...

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----有效三角形个数

又是一篇算法题&#xff0c;今天早上刚做的热乎的~ 其实我是想写博客但不知道写些什么&#xff08;就水一下啦&#xff09; -------------------------------------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里创建虚拟环境&#xff0c;比如 conda create --prefix E:/projects/myenv python3.8然后激活 conda activate E:/projects/myenv往里面安装点自己的包&#xff0c;比如 conda install pytorch1.7.1 torchvision0.8.2 -c pytorch打开pycharm 注意&#x…...

UML-对象图(Object Diagram)

一、定义 UML对象图用于描述系统中对象的状态和相互关系,是类图的一个实例化版本,主要展示了类图中定义的关系在特定时间点的实际体现。它帮助开发者在设计阶段理解对象之间的实际关系、属性值和状态,从而支持系统设计的准确性与有效性。 二、组成要素 UML对象图主要由以…...

Jmeter 动态参数压力测试时间段预定接口

&#x1f3af; 本文档详细介绍了如何使用Apache JMeter进行压力测试&#xff0c;以评估预定接口在高并发场景下的性能表现。通过创建线程组模拟不同数量的用户并发请求&#xff0c;利用CSV文件动态配置时间段ID和用户token&#xff0c;确保了测试数据的真实性和有效性。文档中还…...

超大型集团合并报表数智管理转型

摘要&#xff1a;数字经济时代&#xff0c;数字化技术已成为驱动财务管理价值释放的重要引擎&#xff0c;数智化能力的提升是当前一流财务信息化建设的最新趋势。财务部门是企业的“数据交汇中心”和“信息加工中心”&#xff0c;通过对企业各项财务数据的分类、汇总和清晰呈现…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录

ASP.NET Core 是一个跨平台的开源框架&#xff0c;用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录&#xff0c;以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

零基础设计模式——行为型模式 - 责任链模式

第四部分&#xff1a;行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习&#xff01;行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想&#xff1a;使多个对象都有机会处…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

C#学习第29天:表达式树(Expression Trees)

目录 什么是表达式树&#xff1f; 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持&#xff1a; 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...