ubuntu系统部署docker
1、docker engine 和docker desktopdocker容器化部署的核心是docker engine如果你的系统是linux那么可以采用直接安装docker engine的形式进行容器化部署。因为我之前在windows系统上使用的是wsldocker 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、安装dockerstep1更新apt源状态这一步的作用是查看目前系统中配置源的版本包状态sudo apt-get updatestep2安装几个相关工具这里的ca-certificates是进行认证用的工具这里用到认证的工具是为了获得安装docker的源。linux系统中是配置有安装docker的源的但是可能比较老所以需要重新配置安装更新版本的docker。sudo apt-get install -y ca-certificates curlstep3创建文件夹存储docker源公钥linux系统中/etc/apt/目录一般用于存储配置文件。sudo install -m 0755 -d /etc/apt/keyringsstep4通过阿里云镜像下载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.ascstep5修改下载的到的公钥文件权限sudo chmod ar /etc/apt/keyrings/docker.ascstep6登记阿里镜像源前面的步骤只是为了获得公钥有公钥之后才能够绑定镜像源sudo tee /etc/apt/sources.list.d/docker.sources EOFTypes: debURIs: https://mirrors.aliyun.com/docker-ce/linux/ubuntuSuites: $(. /etc/os-release echo ${UBUNTU_CODENAME:-$VERSION_CODENAME})Components: stableArchitectures: $(dpkg --print-architecture)Signed-By: /etc/apt/keyrings/docker.ascEOFstep7刷新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-pluginstep9:docker安装成功之后是会自动运行起来的查看状态docker默认只有管理员权限才能够运行sudo systemctl status dockerstep10开放docker权限不需要使用sudo也能够使用注意运行指令后重启电脑。sudo usermod -aG docker $USER3、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 dockerstep3验证配置是否生效会输出配置的镜像源docker info --format {{json .RegistryConfig.Mirrors}}step4测试这是之前没有配置国内镜像源的情况这是配置国内镜像源之后能够成功拉取hello-world这个容器4、docker在构建过程中存在的网络连接问题在docker进行构建的时候还会存在问题。docker简单理解成一个小电脑在构建容器的时候还是需要通过apt,pip,npm等等下载软件包但是这个过程也会非常的慢。他不会继承某个终端配置的临时代理。解决方案有在构建容器的过程中dockerfile写明aptpip等工具使用的国内源在宿主机终端配置临时代理然后将代理软件开启“局域网连接功能”在进行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容器更新的情况当开发一个新的版本需要重新部署为容器时操作是一样的使用的也是构建容器时候的指令。区别在于此时容器只会更新改变的部分不会重头重新构建容器。