ubuntu系统部署docker

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",

"https://docker.nju.edu.cn",

"https://docker.1panel.live",

"https://hub.rat.dev",

"https://dockerproxy.net"

],

"ipv6": false,

"max-concurrent-downloads": 6

}

step2:最后要刷新docker守护进程,让配置生效:

sudo systemctl restart docker

step3:验证配置是否生效,会输出配置的镜像源:

docker info --format '{{json .RegistryConfig.Mirrors}}'

step4:测试:

这是之前没有配置国内镜像源的情况:

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

相关推荐
vibecode4 小时前
网站服务器失去响应怎么解决?我把连接超时和读超时这两段计时拆开跑了一遍
运维·服务器
工业一体机老司机5 小时前
Docker部署工控机采集服务 Compose编排与开机自启
运维·docker·容器
迪康Defender6 小时前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
万联WANFLOW9 小时前
异地厂区视频监控远程运维:从组网到安全的实施要点
运维·网络·安全·企业组网·sdwan
十碗饭吃不饱9 小时前
SSH 密钥认证详解:原理、实操、参数、排错与加固
运维·ssh
echoarts10 小时前
服务器连不上?FileZilla 改被动模式就好了
运维·服务器·其他
无言听风雨丶10 小时前
Redis 运维实战与排错
运维·数据库·redis
QXWZ_IA10 小时前
变电站数字孪生巡检的能力分层、数据接入与空间计算边界
运维·服务器·空间计算
miaobinfei11 小时前
docker拉取dify镜像,执行docker compose up -d 报错
运维·docker·容器
女神下凡11 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范