【环境配置】ubuntu中 Docker的安装

前言

Docker的使用,一直没有系统的梳理和记录,刚好最近看视频又再次的全面介绍到docker。于是记录下方便后面自己的使用,毕竟安装过程中还是会存在小的不丝滑。

1 Docker的简单介绍

这里的介绍来自于大模型的问答(LLM时代的到来,使用起来~~)。

Docker 是一个开源的应用容器引擎,它使开发者能够打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app), 更重要的是容器性能开销极低。

传统的虚拟化技术(如 VMware,KVM 等)是在硬件层面实现虚拟化,需要模拟硬件,因此无法避免地有一些额外的性能开销。而 Docker 是在操作系统层面上实现虚拟化,Docker 容器和内核交互,几乎没有性能损耗。

Docker 的三个基本概念

  • 镜像(Image):Docker 镜像是一个只读模板,可以用来创建 Docker 容器。一个镜像可以包含一个完整的操作系统环境,里面仅安装了应用和运行时所需的依赖。镜像可以用来创建 Docker 容器。
  • 容器(Container):Docker 容器是 Docker 镜像的一个可运行实例,它包含了应用程序及其依赖项,它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
  • 仓库(Repository):仓库是集中存放镜像文件的场所。仓库分为公开仓库(Public)和私有仓库(Private)两种形式。最大的公开仓库是 Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云、网易云等。

Docker的组成

  • Docker Client客户端:用户通过DockerClient与Docker守护进程进行交互,发送请求并接收响应。
  • Docker Daemon守护进程:负责接收来自DockerClient的请求,执行诸如创建、运行、停止、删除容器等操作。
  • Docker Image镜像
  • Docker Container容器

Docker的使用

  • 安装Docker:在Linux或Windows上安装Docker引擎,并验证安装是否成功。
  • 创建和运行容器:通过Docker命令(如docker search、docker pull、docker create、docker start等)来搜索、拉取、创建和启动容器。
  • 构建和发布镜像:使用Dockerfile来定义镜像的构建过程,并通过docker build命令来构建镜像。构建完成后,可以使用docker push命令将镜像发布到Docker Hub等镜像仓库供其他人使用。
    Docker通过其强大的功能和灵活性,已经成为现代软件开发和运维中不可或缺的工具之一。

Docker的特点

  • 可移植性:Docker容器可以在任何安装了Docker的机器上运行,无需担心环境差异。
  • 隔离性:Docker容器使用沙箱机制,相互之间不会有任何接口,确保了应用程序的安全性。
  • 轻量级:Docker容器相比于虚拟机更加轻量级,因为它们共享宿主机的内核,不需要额外的操作系统。
  • 版本控制:Docker镜像可以被版本化,方便管理和追踪历史变更。

Docker的用途

  • 本地依赖:Docker可以快速搭建开发环境,节省时间,提高开发效率。
  • 搭建环境:Docker可以快速地构建源码所需的环境,无需手动安装和配置各种软件。
  • 微服务:Docker非常适合微服务架构,可以将每个服务打包为一个Docker镜像并使用docker-compose来模拟生产环境。
  • 自动测试:Docker可以将测试用例与镜像紧密运行在一起,提高测试效率和可管理性。
  • 部署过程:Docker可以简化部署过程,使得应用程序可以快速、可靠地部署到目标机器上。
  • 持续部署:Docker天生适合持续集成/持续部署,可以方便地实现应用程序的自动化更新和升级。

2 Docker的安装

第二章节,记录下ubuntu20.04下的Docker的安装。

1 安装一些依赖

sudo apt update
sudo apt install apt-transport-https ca-certificates curl gnupg-agent software-properties-common -y

2 添加docker官网 GPG 密钥、设置stable 仓库

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"

正确执行为会打印“OK”。若无问题直接到第3步骤。


过程中可能存在问题:报错

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to download.docker.com:443 
gpg: no valid OpenPGP data found.
...

这说明连接异常,更换阿里云进行配置GPG 密钥(如下图),以及设置stable仓库(未贴图)
在这里插入图片描述


使用阿里云进行配置,具体命令如下

curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository  \
"deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

3. 安装 Docker

sudo apt-get update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

安装完成,Docker 服务将会自动启动。你可以输入下面的命令,验证它:

docker --version
sudo systemctl status docker

若成功界面如下,若无问题直接进行第四步。
在这里插入图片描述


但运行安装命令sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y,过程中可能报错如下

invoke-rc.d:syntax error: unknown option ".-skip-systemd-native"
dpkg: error processing package docker-ce(--configure):
installed docker-ce package post-installation script subprocess returned error exit status 1
Errors were encountered while processing:
docker-ce
E:Sub-process /usr/bin/dpkg returnedan error code (1)

在这里插入图片描述
则需执行以下操作:

cd /var/lib/dpkg
sudo mv info info.bak
sudo mkdir info
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y

到此,docker可以算是安装完成。后面的工作是一些版本或设置的操作。


4 查阅安装的版本(可选)

安装历史版本的docker

apt list -a docker-ce         ## 查看 Docker 软件源中所有可用的版本
sudo apt install docker-ce=<VERSION> docker-ce-cli=<VERSION> containerd.io

在这里插入图片描述


Docher 版本的固定

  1. 锁定版本
    如果你想阻止 Docker 自动更新,锁住它的版本:
    docker --version  ## 查看版本
    sudo apt-mark hold docker-ce docker-ce-cli containerd.io
    
    这里的 docker-ce 是 Docker 社区版,docker-ce-cli 是 Docker 的命令行工具,containerd.io 是容器运行时。根据安装的 Docker 版本,可能还需要锁定其他相关的包。
  2. 验证是否锁定成功
    sudo apt-mark showhold
    
    如果看到 docker-ce、docker-ce-cli 和 containerd.io 等包显示在列表中,说明已经成功锁定。
  3. 解锁版本(如果需要)
     sudo apt-mark unhold docker-ce docker-ce-cli containerd.io
    

5 设置非root用户的权限(可选)

默认情况下,只有 root 或者 有 sudo 权限的用户可以执行 Docker 命令。
想要以非 root 用户执行 Docker 命令,需要将用户添加到 Docker 用户组,该用户组在 Docker_ce 软件包安装过程中被创建。输入:

sudo usermod -aG docker $USER   ## $USER是一个环境变量,代表当前用户名。

登出,并且重新登录,以便用户组会员信息刷新。
或者直接使用命令

newgrp docker

当你将用户添加到 docker 组后(例如通过 sudo usermod -aG docker ${USER}),该更改不会立即生效,因为当前会话的用户组信息不会自动更新。newgrp 命令可以重新加载用户组信息,使你能够立即以 docker 组的身份运行 Docker 命令,而无需重新登录或重启系统。

6 安装docker-compose(了解)

这里做一个说明,

  • 推荐)在安装docker时,留意一下会看到,以插件的形式安装了docker-compose-plugin。运行时,命令为 docker compose ***,中间没有横行。
  • 也可以下载对应的源码。实际上就是从github的releases中下载对应系统版本的docker-compose程序文件,授予执行权限即可。
    sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-$(uname -m)" -o /usr/local/bin/docker-compose
    chmod +x /usr/local/bin/docker-compose
    docker-compose --version 
    
    在这里插入图片描述

7 Docker的测试

Docker Hub是一个云端服务,主要用来储存 公有和私有源中的 Docker 镜像。默认情况下,Docker可以从 从 Docker Hub 拉取镜像。
运行个docker的hello-word,执行docker命令如下:

docker container run hello-world

第一次云运行时本地没有该镜像,这个命令将会下载测试镜像,在容器中运行它,打印出 “Hello from Docker”,并且退出。
在这里插入图片描述


7.1 阿里云镜像加速器的配置

拉取 hub.docker.com 的镜像,会发现速度很慢,是因为有墙。可以配置阿里云镜像加速器。
修改Docker配置文件。对于系统系统为Ubuntu 16.04+、Debian 8+、CentOS 7、Fedora 24+、RedHat 7+等,可修改/etc/docker/daemon.json文件(可能不存在)

vim /etc/docker/daemon.json

然后添加如下内容

  • 下面第一行的的阿里镜像是我网上找其他人的,不是自己的,可能不生效。建议自己申请个。
  • 其它的的镜像,是我在使用docker时拉取总存在问题,然后各种搜索一通乱试,如下的设置可以很好的解决。
{
  "log-level": "debug",
  "log-driver": "json-file",
  "log-opts": {
  "max-size": "100m",
  "max-file": "3"
  },
  "registry-mirrors": ["https://b2w3942q.mirror.aliyuncs.com",
  						"https://docker.registry.cyou",
  						"https://docker-cf.registry.cyou",
  						"https://dockercf.jsdelivr.fyi",
 						"https://docker.jsdelivr.fyi",
  						"https://dockertest.jsdelivr.fyi",
  						"https://mirror.aliyuncs.com",
  						"https://dockerproxy.com",
  						"https://mirror.baidubce.com",
  						"https://docker.m.daocloud.io",
 						"https://docker.nju.edu.cn",
  						"https://docker.mirrors.sjtug.sjtu.edu.cn",
  						"https://docker.mirrors.ustc.edu.cn",
  						"https://mirror.iscas.ac.cn",
  						"https://docker.rainbond.cc"],
  "runtimes": {
       "nvidia": {
       "path": "nvidia-container-runtime",
       "runtimeArgs": []
       }
   }
}

查看json文件格式是否正确

sudo apt-get install jq  # Debian/Ubuntu
sudo jq . /etc/docker/daemon.json

若异常,会将告知问题行数,修正即可。
然后重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

7.2 设置镜像下载的默认路径

查看本身默认路径:

docker info | grep "Docker Root Dir"

在这里插入图片描述
修改默认路径,在【/etc/docker/daemon.json】添加内容:

{
  "data-root": "/mnt/docker"
}

然后重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker

8 卸载 Docker

在卸载 Docker 之前,最好移除所有的容器,镜像,卷和网络。
运行下面的命令停止所有正在运行的容器,并且移除所有的 docker 对象:

docker container stop $(docker container ls -aq)
docker system prune -a --volumes

使用apt像卸载其他软件包一样来卸载 Docker:

sudo apt-get purge docker-ce docker-ce-cli containerd.io
sudo apt autoremove
### 解决 VSCode 中 JSON 文件只读问题的方法 当遇到在 VSCode 编辑器中无法编辑 JSON 文件的情况时,这通常是因为文件被标记为只读。为了取消这种状态并允许正常编辑,可以通过调整设置来解决问题。 对于因权限或环境配置引起的只读情况,建议按照如下方式处理: 通过修改VSCode的特定设置选项能够有效解决该类问题,在VSCode内依次执行以下命令可达到目的:点击左下角齿轮图标进入设置界面;利用搜索栏查找`Shebang`相关配置项;找到名为`Run Code Configuration: Respect Shebang`的选择框,并确保其处于启用状态[^4]。不过需要注意的是,上述操作主要是针对由插件引发的只读状况,而并非操作系统层面设定的真正意义上的只读属性。 另外一种常见的情形是由于文件本身或者所在磁盘分区设置了只读标志位所造成的。此时应当检查目标JSON文档以及它所在的存储设备的状态,确认是否有外部因素干扰写入权限。如果是这种情况,则需前往资源管理器或者其他相应工具里解除对应的限制条件后再尝试编辑。 最后值得注意的一点是在某些特殊环境下(比如使用PlatformIO开发框架配合SDCC编译器),可能还会碰到因为IDE未能正确解析自定义语法而导致误报只读警告的现象。对此可通过适当调整预处理器宏定义的方式绕过此类伪异常,例如向项目源码引入`__SDCC_SYNTAX_FIX`参数以便让VSCode更好地理解非标准C语言结构[^2]。 尽管以上措施有助于缓解大多数场景下的只读难题,但在实际应用过程中仍应具体情况具体分析,必要时查阅官方文档获取更详尽的帮助信息。
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值