Linux下的docker环境搭建

随笔7小时前发布 是我
3 0 0

Linux下的docker环境搭建

1、更新包索引&安装需要的依赖包

1.1 更新包索引

切换为管理员或者附带sudo都可以。

切换为管理员

sudo su -
 apt-get update

直接附带sudo

sudo apt-get update

注:后面都是以第二种方式执行的命令。

了解:

 执行 apt-get update 更新索引包主要有以下作用:

获取最新软件信息:它会从软件源服务器获取最新的软件包列表、版本、依赖关系等信息,确保系统了解到当前可用软件的最新状态。
同步本地和服务器端:使本地的软件包索引与服务器端保持一致,这样在后续安装、升级软件包时可以基于准确和最新的信息进行操作。

1.2 安装必要的依赖包
# 允许apt使用https
sudo apt-get install 
    apt-transport-https 
    ca-certificates 
    curl 
    gnupg-agent 
    software-properties-common

其中 是续行符。

使用续行符可以将一条较长的命令行在视觉上拆分成多行,以提高可读性,但在实际执行时会被视为一条完整的命令。

2、添加docker官方的GPG密钥

阿里云镜像:下面的地址中包含了ubuntu/centos关于docker的安装。

https://developer.aliyun.com/mirror/docker-ce?spm=a2c6h.13651102.0.0.4e021b11O3g8A1

https://developer.aliyun.com/article/110806

# 默认是使用国外镜像,很慢!
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 推荐使用国内镜像
sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 淘宝镜像
sudo curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

如果我们想要看已经添加的GPG密钥,可以通过下列指令:

apt-key list

3、添加docker的稳定版本仓库

# 默认是国外源,慢!
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
# 推荐使用国内仓库
sudo add-apt-repository 
      "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu 
      $(lsb_release -cs) 
      stable"
# 淘宝仓库
sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

4、再次更新软件包索引

sudo apt-get update

在使用 apt 添加了 docker 官方的 GPG 密钥和稳定版本仓库后再次更新索引包,主要是为了让系统能够识别和获取到新添加的 docker 相关资源信息。

通过更新索引包,系统会将新添加的仓库信息整合进来,这样在后续安装或管理 docker 软件包时,系统就能准确地知道这些新资源的存在并根据需要进行操作,比如可以顺利地从新添加的仓库中安装 docker 及其相关组件等。

5、安装docker

# 第一种安装:直接安装 docker的社区版本就可以了
sudo apt-get install docker-ce
# 第二种安装
sudo apt-get install docker-ce docker-ce-cli containerd.io

下面的包根据自己的需求再安装

docker-ce:这是 Docker 社区版的主要软件包,包含了 Docker 引擎的核心功能和相关组件,用于创建、管理容器等。
docker-ce-cli:它是 Docker 命令行工具的包,提供了用于和 Docker 引擎交互的命令行界面,通过命令行操作来执行各种容器相关任务。(一般来说,docker-ce中已经包含了常用的cli,所以不需要再安装这个包了)
containerd.io:containerd 是一个工业级标准的容器运行时,主要负责容器的运行、管理容器的生命周期等底层任务。

6、验证docker是否安装成功并运行

6.1 几种验证方式
sudo systemctl status docker
# or
docker --version
# run hello-world
docker run hello-world	# 需要有root权限
6.2 让非root用户运行docker命令

如果你想让非root用户也能够运行docker命令,你看也将该用户添加到docker组中:

sudo usermod -aG docker ${USER}

你需要注销并重新登录,或者重新启动系统,以便组变更生效。

解释

sudo:以超级用户权限运行命令,允许执行者以其他身份来执行命令,此处以root身份运行。
usermod:用于修改用户账户的工具。
-aG:选项,-a代表追加,-G代表指定用户组。
$USER:当前登录用户的用户名环境变量。

举例,如果你想要将用户名为john的用户添加到docker组中,你可以执行以下命令:

sudo usermod -aG docker john

这个命令的意思是将用户john添加到docker组中。

如果你想要自动化这个过程,你可以写一个shell脚本,例如:

 #!/bin/bash
USERNAME="john"
sudo usermod -aG docker $USERNAME

这个脚本将用户名john添加到docker组中。

7、遇到的问题

7.1 找不到对应源

Linux下的docker环境搭建

问题:这里显示的错误原因是访问“https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu bionic Release”时返回了 404(未找到)状态码,这意味着在该地址找不到对应资源,可能是该镜像源上对应的 release 文件不存在或路径不正确。

解决方式:不在https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu上找,忽略掉它。

步骤

找到文件/etc/apt/sources.list
找到对应的镜像源地址,将其删除或者注释。

Linux下的docker环境搭建

将框选的内容删除或者注释即可。

cd /etc/apt/
sudo vim sources.list	# 一定要root用户权限,否则文件只读不可修改
7.2 docker守护进程通信没有足够权限

错误详情如下

xxxx@ubuntu:/etc/apt$ docker run hello-world
docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/create": dial unix /var/run/docker.sock: connect: permission denied.
See 'docker run --help'.

报错解释

这个错误表明你在尝试与Docker守护进程通信时没有足够的权限。Docker守护进程默认只允许root用户访问,而且通常Docker socket文件(/var/run/docker.sock)的权限是设置为只允许root用户访问的。

解决方法

使用sudo命令来执行Docker命令。例如,如果你想要运行一个容器,你可以使用sudo docker run ...
将用户添加到docker组。这样做可以省去每次使用Docker命令时都要使用sudo。首先,你可以使用sudo usermod -aG docker $USER命令将当前用户添加到docker组。之后,你可能需要注销并重新登录,或者重新启动系统,以便更改生效。
修改Docker socket文件的权限。这种方法不推荐,因为它会降低系统的安全性。你可以使用sudo chmod命令修改权限,但这样做会使任何用户都能访问Docker守护进程,这可能会导致安全问题。

通常推荐使用第二种方法,因为它既安全又方便,不会影响系统的其他部分。

7.3 docker拉取hello-world失败
问题的分析和解决

Linux下的docker环境搭建

关于上面的问题,可能发生了如下情况:

网络连接问题。
Docker镜像名称或标签错误
Docker 配置问题
Docker 版本问题。

解决问题

我们可以对上面可能出现问题的方面一个个进行排除。(一般来说,大部分是因为网络问题)

注意:如果不是网络问题,可以按上面所提排除问题。如果解决不了,可以试着在Docker 社区、论坛或 Stack Overflow 等地方寻求帮助。

ping一下对应的108.160.169.181:443地址,看是否有响应。

这是美国的一个ip地址,结果很大几率是ping不上的,要想得到响应大家也应该是懂得 => FQ。

docker的镜像源默认是国外ip,在拉取镜像的时候很大概率会因为网络问题拉取失败。

国外的用不了,那就改成国内的:阿里云、腾讯云等。有如下两种方式修改:

修改配置文件。
docker命令行参数。

配置文件修改

定位docker的配置文件。

对于Linux系统,配置文件通常位于/etc/docker/daemon.json
对于Windows系统,配置文件通常位于C:ProgramDataDockerconfigdaemon.json

编辑或创建配置文件。

如果配置文件不存在,需要创建它。
使用文本编辑器打开配置文件。

修改或添加registry-mirrors字段

在配置文件中,找到或添加registry-mirrors字段,并将您想要使用的镜像源地址添加到该字段中。可以添加多个镜像源,使用逗号分隔。
例如:

{
    "registry-mirrors": ["https://mirror.example.com", "https://another-mirror.example.com"]
}

保存并关闭配置文件

重启docker服务

重启Docker服务以使更改生效。在Linux上,您可以使用如sudo systemctl restart docker的命令来重启Docker服务

docker命令行参数修改镜像

打开终端或命令提示符

使用dockerd命令启动Docker守护进程

使用--registry-mirror参数指定镜像源的地址。例如:

dockerd --registry-mirror=https://mirror.example.com

如果已经有正在运行的Docker守护进程,可以使用docker update命令(但请注意,docker update命令通常用于更新正在运行的容器,而不是Docker守护进程本身。直接修改配置文件是更常见和推荐的做法)。

Docker将使用指定的镜像源进行拉取和推送镜像

修改镜像源的注意事项

在修改配置文件或使用命令行参数时,请确保镜像源地址是有效的,并且Docker服务能够访问该地址。
如果您使用的是Docker Desktop或其他图形界面工具,可能有内置的镜像源设置选项,可以直接在图形界面中进行设置。
修改完成后,您可以使用docker info命令来检查设置是否生效,查看Registry Mirrors字段下是否列出了您设置的镜像源。

推荐几个国内镜像源地址

Docker中国区官方镜像:https://registry.docker-cn.com
阿里云容器镜像服务:您可以在阿里云容器镜像服务网站(https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)上生成自己的加速地址。
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn

请注意,使用第三方镜像源可能存在安全风险,请确保您信任该镜像源,并定期更新和检查您的Docker配置。

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...