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这个容器

相关推荐
陈聪.1 小时前
01-项目一_企业级高可用Web集群实施手册
运维·云原生
随性而行3601 小时前
企业微信API调用案例:如何通过接口实现多账号统一管理与业务接入?
运维·微信·机器人·自动化·企业微信
guo_wen_qiang1 小时前
云服务器redis主从复制-哨兵模式
运维·服务器·redis
运维小文2 小时前
apache nifi 2.90部署+运维手册
大数据·运维·数据分析·apache·nifi
2603_965148112 小时前
终极清单:构建自动化选品比价系统的所有组件与资源
大数据·运维·数据库·数据挖掘·自动化
北城笑笑2 小时前
Server 18 ,Nginx 双服务器 HTTP转HTTPS 代理实战( HTTP 地址换 HTTPS 域名 )
运维·服务器·前端·后端·nginx·http·https
程序员-Benothing2 小时前
Linux磁盘IO性能分析:iostat、iotop、fio实战
linux·运维·服务器
十二同学啊2 小时前
Docker 容器化技术详解:镜像、容器、网络与应用部署设计
网络·docker·eureka
I'mChloe2 小时前
不再逐台装Docker:我用Ansible Playbook批量统一服务器环境
服务器·docker·ansible