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 找不到对应源
问题:这里显示的错误原因是访问“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
。
找到对应的镜像源地址,将其删除或者注释。
将框选的内容删除或者注释即可。
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失败
问题的分析和解决
关于上面的问题,可能发生了如下情况:
网络连接问题。
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配置。