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
配置代理(如需要)

一般来说,宿主的代理地址为 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地址
内容示例:

# 这里只能使用 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 代理。

6. 验证 Docker 安装

运行以下命令验证 Docker 和 Docker Compose 是否正确安装:

docker run hello-world
docker compose version

三、Docker 日常维护

清理 Docker 缓存

定期清理不再使用的 Docker 镜像、容器、网络和缓存,以释放系统资源:

docker system prune -af

注意:此命令将删除所有未使用的容器、网络、镜像和构建缓存,请谨慎使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/893220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《AI赋能光追:开启图形渲染新时代》

光线追踪技术是图形渲染领域的重大突破,能够通过模拟光的传播路径,精准渲染反射、折射、阴影和间接光照等效果,实现高度逼真的场景呈现。而人工智能的加入,更是为光线追踪技术带来了前所未有的变革,主要体现在以下几个…

MongoDB单机版安装

MongoDB单机版安装 在CentOS Linux release 7.9.2009 (Core)下安装MongoDB的步骤如下: 1 创建用户和组(可选,根据需要) 如果您希望以非root用户运行MongoDB服务,可以创建一个专用的用户和组。 groupadd mongodb us…

js常见的使用方法

数组 1.反转数组 reverse()方法可以反转数组,但是会改变元素,想要不改变可以这样子写slice().reverse() let arr [1,2,3] arr.slice().reverse() 2.数组过滤 filter是一个方法,并且条件满足的情况下,是过滤数组出来 e.attrib…

【数据分享】1929-2024年全球站点的逐月平均气温数据(Shp\Excel\免费获取)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据!本次我们为大家带来的就是具体到气象监…

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正

Kotlin Bytedeco OpenCV 图像图像54 透视变换 图像矫正 1 添加依赖2 测试代码3 测试结果 在OpenCV中,仿射变换(Affine Transformation)和透视变换(Perspective Transformation)是两种常用的图像几何变换方法。 变换方…

代码中使用 Iterable<T> 作为方法参数的解释

/*** 根据课程 id 集合查询课程简单信息* param ids id 集合* return 课程简单信息的列表*/ GetMapping("/courses/simpleInfo/list") List<CourseSimpleInfoDTO> getSimpleInfoList(RequestParam("ids") Iterable<Long> ids); 一、代码解释&…

电梯系统的UML文档07

从这个类中得到的类图&#xff0c;构划出了软件的大部分设计。 系统结构视图提供软件和整个系统结构最复杂的也是最优雅的描述。和通常的软件系统相比&#xff0c;在分布式嵌入系统中了解系统组件如何协同工作是非常重要的。毕竟&#xff0c;每个类图仅仅是一个系统的静态设计…

Kotlin基础知识学习(三)

函数使用 基本用法 函数声明变化 如果函数是公开的&#xff0c;则public关键字可以省略。用fun关键字表示函数的定义。如果函数没有返回值可以不用声明。如果函数表示重载&#xff0c;直接在fun同一行用override修饰。函数参数格式是变量名&#xff1a;变量类型。函数参数允…

C++: Dtrees:load(constg String filepath, const String nodeName)中nodeName参数含义

1. nodeName 的作用 当你保存模型时&#xff0c;整个决策树会被序列化到一个 XML 或 YAML 文件中。nodeName 是加载时指定的一个逻辑路径&#xff0c;用于从文件中找到某个节点或子结构&#xff0c;而不是存储在文件中的字段。如果你不指定 nodeName&#xff0c;OpenCV 默认会…

文本摘要研究:从统计方法到大型语言模型

论文地址&#xff1a;https://arxiv.org/pdf/2406.11289 &#x1f4d6; 文本摘要研究&#xff1a;从统计方法到大型语言模型 近年来&#xff0c;文本摘要研究经历了多次重大变革&#xff0c;从深度神经网络的出现到预训练语言模型&#xff08;PLMs&#xff09;&#xff0c;再到…

MYSQL 5.7数据库,关于1067报错 invalid default value for,解决方法!

???作者&#xff1a; 米罗学长 ???个人简介&#xff1a;混迹java圈十余年&#xff0c;精通Java、小程序、数据库等。 ???各类成品java毕设 。javaweb&#xff0c;ssm&#xff0c;springboot&#xff0c;mysql等项目&#xff0c;源码丰富&#xff0c;欢迎咨询。 ???…

C ++ 也可以搭建Web?高性能的 C++ Web 开发框架 CPPCMS + MySQL 实现快速入门案例

什么是CPPCMS&#xff1f; CppCMS 是一个高性能的 C Web 开发框架&#xff0c;专为构建快速、动态的网页应用而设计&#xff0c;特别适合高并发和低延迟的场景。其设计理念类似于 Python 的 Django 或 Ruby on Rails&#xff0c;但针对 C 提供了更细粒度的控制和更高效的性能。…

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用

一文大白话讲清楚webpack基本使用——2——css相关loader的配置和使用 1. 建议按文章顺序从头看是看 第一篇&#xff1a;一文大白话讲清楚啥是个webpack第二篇&#xff1a;一文大白话讲清楚webpack基本使用——1——完成webpack的初步构建然后看本篇&#xff0c;Loader的配置…

速通Docker === 网络

目录 Docker网络详解 容器之间直接通信的弊端 &#xff08;一&#xff09;启动容器 &#xff08;二&#xff09;进入容器并发起请求 &#xff08;三&#xff09;请求流程 &#xff08;四&#xff09; 弊端分析 一、Docker网络基础 &#xff08;一&#xff09;容器IP分配…

Kafka 日志存储 — 日志索引

每个日志分段文件对应两个索引文件&#xff1a;偏移量索引文件用来建立消息偏移量到物理地址之间的映射&#xff1b;时间戳索引文件根据指定的时间戳来查找对应的偏移量信息。 1 日志索引 Kafka的索引文件以稀疏索引的方式构造消息的索引。它并不保证每个消息在索引文件中都有…

空调可视化监控与管理系统

随着智能化技术的不断发展&#xff0c;空调系统作为现代建筑、工业和商业场所的核心设备&#xff0c;正在从传统管理模式向智能化管理迈进。无论是大型商业楼宇、工业厂房&#xff0c;还是数据中心的精密空调&#xff0c;如何通过智能监控和高效管理降低能耗、提升运行效率&…

3.3 OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南

OpenAI GPT-4, GPT-3.5, GPT-3 模型调用:开发者指南 OpenAI 的 GPT 系列语言模型,包括 GPT-4、GPT-3.5 和 GPT-3,已经成为自然语言处理领域的标杆。无论是文本生成、对话系统,还是自动化任务,开发者都可以通过 API 调用这些强大的模型来增强他们的应用。本文将为您详细介…

用户中心项目教程(五)---MyBatis-Plus完成后端初始化+测试方法

文章目录 1.数据库的链接和创建2.建库建表语句3.引入依赖4.yml配置文件5.添加相对路径6.实体类的书写7.Mapper接口的定义8.启动类的指定9.单元测试10运行时的bug 1.数据库的链接和创建 下面的这个就是使用的我们的IDEA链接这个里面的数据库&#xff1a; 接下来就是输入这个用户…

Azure Synapse Dedicated SQL Pool实用命令语句

一、数据管理相关命令 1. 数据加载 COPY 命令&#xff1a;用于从外部存储&#xff08;如 Azure Blob 存储&#xff09;加载数据到 Dedicated SQL Pool 中。 COPY INTO [dbo].[target_table] FROM https://<storage_account>.blob.core.windows.net/<container>/…

products页面出现多选框后,能够直接将勾选的products删除吗?而不用跳转到flow再删除。例如将勾选的products传给flow

在标准的「Opportunity Products」(机会产品) 相关列表上&#xff0c;Salesforce 并不直接支持多选后一次性删除的功能。如果你想要在“同一页面”直接勾选然后删除&#xff0c;而不跳转到单独的 Flow 界面&#xff0c;通常需要借助自定义开发的方式来实现。下面给你几种可行的…