1、docker engine 和docker desktop
docker容器化部署的核心是docker engine,如果你的系统是linux,那么可以采用直接安装docker engine的形式进行容器化部署。
因为我之前在windows系统上使用的是wsl+docker desktop的形式,觉得docker desktop非常方便不。但是这种方案只是对于windows来说的。
docker desktop在运行的时候是跑在一个虚拟机的linux内核上的,即使官方有linux版本的docker desktop。安装在linux系统上的docker desktop,依然会使用一个虚拟机中的linux来运行。这就感觉非常冗余了,如果你的系统本身就是linux,完全是可以通过安装docker engine跑在真linux内核上的。
另外,docker desktop本质上是自带docker engine的,主要优势在提供了GUI界面。
所以,如果你的系统是linux,推荐安装docker engine + portainer(提供可视化web页面)的方案来实现。
2、安装docker
step1:更新apt源状态,这一步的作用是查看目前系统中配置源的版本包状态
sudo apt-get update
step2:安装几个相关工具,这里的ca-certificates是进行认证用的工具
这里用到认证的工具是为了获得安装docker的源。linux系统中是配置有安装docker的源的,但是可能比较老,所以需要重新配置,安装更新版本的docker。
sudo apt-get install -y ca-certificates curl
step3:创建文件夹,存储docker源公钥,linux系统中/etc/apt/目录一般用于存储配置文件。
sudo install -m 0755 -d /etc/apt/keyrings
step4:通过阿里云镜像下载docker公钥,因为直接通过官方的源会导致配置失败,这里配置成阿里的镜像源。之后docker相关的文件下载是从阿里的镜像源走的。
sudo curl -fsSL --retry 5 --retry-delay 2 --connect-timeout 15 \
https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
step5:修改下载的到的公钥文件权限
sudo chmod a+r /etc/apt/keyrings/docker.asc
step6:登记阿里镜像源,前面的步骤只是为了获得公钥,有公钥之后才能够绑定镜像源
sudo tee /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://mirrors.aliyun.com/docker-ce/linux/ubuntu
Suites: (. /etc/os-release \&\& echo "{UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
step7:刷新apt,更新镜像源
sudo apt update
小结:上面的操作之后,apt在安装docker相关文件的时候,会走阿里镜像源;而安装其他的软件包,走的还是原本配置中的源。
还有个特殊点,就是使用docker一般需要拉取某些容器的(docker-hub中拉取),但是拉取容器并不会走这个阿里镜像源,这个阿里镜像源只是提供下载docker相关组件时候的源。
安装docker相关组件的时候是apt访问镜像源;
拉取容器的时候是dockerd守护进程在访问下载源;
step8:正式安装docker相关组件
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
step9:docker安装成功之后,是会自动运行起来的,查看状态:
docker默认只有管理员权限才能够运行
sudo systemctl status docker

step10:开放docker权限,不需要使用sudo也能够使用,注意运行指令后重启电脑。
sudo usermod -aG docker $USER
3、docker拉取容器
step1:使用docker拉取容器的时候,默认是直接访问docker-hub的。直接从国内访问的话速度是非常慢的,即使在终端配置了临时代理,真正发起网络请求的是docker内部的dockerd服务,它由systemed启动,不会通过终端发起网络请求。
也就是说,本质上docker并不会走代理进行网络请求。
解决方案有两种:一种是修改docker的配置文件,让docker能够识别到你配置的本地代理;第二种是修改docker拉取容器的镜像源。这里介绍第二种方案。
/etc/docker/daemon.json
上面这个文件夹就是dockerd拉取容器的时候的配置文件,默认情况是不存在这个文件的,这也就导致dockerd默认走的官方源。所以只需要创建,配置这个文件即可。
如果你的项目中已经写好了daemon.json文件,那么将这个文件复制到/etc/docker/目录下,然后改好权限即可:
我这里是因为在我的项目下deploy/docker文件夹已经存在了daemon.json,所以直接改权限复制过来。linux中install是复制的意思,apt install才是真正的安装指令
sudo install -m 0644 deploy/docker/daemon.json /etc/docker/daemon.json
如果你的项目没有写好这个配置文件,则需要重新生成:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}
EOF
// 这里的几个镜像源可以更换
我的dae.json文件是这样写的:
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"http://hub-mirror.c.163.com",
],
"ipv6": false,
"max-concurrent-downloads": 6
}
step2:最后要刷新docker守护进程,让配置生效:
sudo systemctl restart docker
step3:验证配置是否生效,会输出配置的镜像源:
docker info --format '{{json .RegistryConfig.Mirrors}}'
step4:测试:
这是之前没有配置国内镜像源的情况:

这是配置国内镜像源之后能够成功拉取hello-world这个容器
