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,一经查实,立即删除!

相关文章

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

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

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

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

电梯系统的UML文档07

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

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

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

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

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

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

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

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

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

Kafka 日志存储 — 日志索引

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

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

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

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

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

Mysql InnoDB B+Tree是什么?

“mysql中常用的数据库搜索引擎InnoDB,其索引通过BTree的方式进行构建。” 实在想不起来BTree是怎么一回事了。以点带线,将涉及到的数据结构一起复习一下。 文章目录 数据结构定义红黑树定义使命 BTree定义使命 BTree定义 InnoDB BTree 旋转与调整二叉排序树插入删…

对人型机器人的研究和展望

目录 概述 1 核心软硬件部件 1.1 运动控制部分 1.1.1 减速机 1.1.2 编码器 1.1.3 直流无刷电机 1.2 智能仿生手 1.3 控制板卡 2 人型机器人的应用 3 未来展望 概述 如果现在有人问:当前那个行业最火?毫无疑问答案肯定是人型机器人了。当前各类机…

Flask:后端框架使用

文章目录 1、介绍2、demo演示3、Flask请求和响应 3.1 演示demo3.2 request获取请求体数据3.3 requests发送请求3.4 响应返回和接收 4、特殊路由 4.1 路由重定向4.2 路由拦截器 1、介绍 Flask是由python语言编写的轻量级Web应用框架,主要应用于后端框架&#xff…

递归算法学习v2.3

目标和 设置全局变量: class Solution {int ret,path,aim;public int findTargetSumWays(int[] nums, int target) {aim target;dfs(nums,0);return ret;}public void dfs(int[] nums,int pos){if(pos nums.length){if(path aim){ret ;}return;}path nums[pos…

ui设计公司分享:浅色 UI 设计

在数字化产品琳琅满目的今天,用户对于界面的要求早已不止于功能的实现,更追求一种舒适、无压的交互体验。而浅色UI设计,凭借其独特的魅力,正逐渐成为众多设计师营造优质体验的首选。 一、浅色UI设计的视觉优势 (一&a…

Nacos:使用PgSQL数据源

数据源插件开源仓库地址:nacos-datasource-extend-plugins 一、PostgreSQL数据库安装 1、本文使用Docker进行数据库的安装,使用docker命令拉取的PG14版本的数据库: docker pull postgres:14.6 2、创建PG容器并启动,映射了5432…

Linux——入门基本指令汇总

目录 1. ls指令2. pwd3. whoami指令4. cd指令5. clear指令6. touch指令7. mkdir指令8. rm指令9. man指令10. cp指令11. mv指令12. cat指令13. tac指令14. more指令15. less指令16. head指令17. tail指令18. date指令19. cal指令20. find指令21. which指令22. alias指令23. grep…

C语言之装甲车库车辆动态监控辅助记录系统

🌟 嗨,我是LucianaiB! 🌍 总有人间一两风,填我十万八千梦。 🚀 路漫漫其修远兮,吾将上下而求索。 C语言之装甲车库车辆动态监控辅助记录系统 目录 一、前言 1.1 (一)…

2024年Vue面试题汇总

流程图如下: vue核心知识——语法篇 1.请问 v-if 和 v-show 有什么区别? 相同点: 两者都是在判断DOM节点是否要显示。 不同点: a.实现方式: v-if是根据后面数据的真假值判断直接从Dom树上删除或重建元素节点。 v-…

centos搭建 Node.js 开发环境

Node.js ,通常简称为Node,是一个事件驱动 I/O 服务端 JavaScript 环境,基于 Chrome V8引擎,具备速度快、性能强等特点,可用于搭建各类网络应用,及作为小程序后端服务环境。npm 和 npx 都是和 Node.js 相关的…