☰
ubuntu系统部署docker
2026/10/16 6:36:19 网站建设 项目流程

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

4、docker在构建过程中存在的网络连接问题:

在docker进行构建的时候,还会存在问题。docker简单理解成一个小电脑,在构建容器的时候还是需要通过apt,pip,npm等等下载软件包,但是这个过程也会非常的慢。他不会继承某个终端配置的临时代理。

解决方案有:

在构建容器的过程中,dockerfile写明apt,pip等工具使用的国内源;

在宿主机终端配置临时代理,然后将代理软件开启“局域网连接功能”,在进行docker容器构建的时候指定流量IP,先到代理软件,通过代理软件分发出去;

至于整个项目的落地,通过AI编辑dockerfile文件,目前的AI已经能够实现帮助用户build docker了。

这里总结一下:

2.4小节的换源是为了使用国内源获得docker的公钥,第一次换国内源;

3.1小节的换源是为了docker拉取容器的时候走的是国内的源;

4.0小节的换源是为了docker容器内部的工具在下载软件的时候能够加速下载;

5、docker构建完毕的情况

step1:容器构建后的结果

build成功之后,docker并不会在当前项目目录下产生任何文件。

docker的设计原则就是“让容器变成用完即弃的,把有价值的东西全部放在外面”。

所以docker build之后的产物在 /var/lib/docker这个目录,容器运行时上传、输出的产物由挂载的空间存储。

step2:容器更新的情况

当开发一个新的版本,需要重新部署为容器时,操作是一样的,使用的也是构建容器时候的指令。区别在于此时容器只会更新改变的部分,不会重头重新构建容器。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询