第3节 Docker在线和离线安装多种方法实现

安装

https://docs.docker.com/desktop/install/linux-install/

所需平台:

image-20240328143825244

所需资源:

image-20240328143852525

说是4G内存,其实2G也能安装。工作中肯定不是2G就能OK的。

生产中的服务器,内存也有高达1T的,就是为了跑好多容器的。

安装方法,我们一般不按照destop这种GUI版,正常就安装Engine

https://docs.docker.com/engine/install/centos/

image-20240328144842502

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo



sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

Install Docker Engine

  1. Install Docker Engine, containerd, and Docker Compose:

    Latest Specific version


    To install the latest version, run:

   $ sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

   $ sudo yum install docker-ce   # 上面一行其实只要敲这一行,安装docker-ce就行了,后面的都会走依赖包自动安装好的。  -ce所谓的ce就是社区版,还有一个-ee就是企业版。

If prompted to accept the GPG key, verify that the fingerprint matches 060A 61C5 1B55 8A7F 742B 77AA C52F EB6B 621E 9F35, and if so, accept it.

This command installs Docker, but it doesn't start Docker. It also creates a docker group, however, it doesn't add any users to the group by default.


  1. Start Docker.
   $ sudo systemctl start docker
  1. Verify that the Docker Engine installation is successful by running the hello-world image.
   $ sudo docker run hello-world

This command downloads a test image and runs it in a container. When the container runs, it prints a confirmation message and exits.

You have now successfully installed and started Docker Engine.

使用国内源的安装方法

image-20240328150818466

https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/

操作备忘,我之前就有docker,这里需要删掉

ubuntu方面

image-20240328161908092

image-20240328161554525

这种指定版本安装存在的小问题就是,docker-ce你指定了是24.0.0,但是其他依赖包没有手动指定,就会下载最新的了。

image-20240328162440641

docker-ce是install的时候指定的版本,其他未指定的就下载最新的了。

image-20240328163019794

​ 所以要安装docker 某个老版本的时候,需要严禁一点,就是手动指定各个包的版本。其实也就是图上dpkg -l |grep docker所列出来的各个包

​ 最新的版本的安装自然就是统一的,就保证仓库的rpm源是最新的直接yum就行了。

image-20240328164654179

image-20240328164711753

image-20240328164737491

image-20240328164759683

这样就保证了ce和ce-cli的版本一致,当然最好还是全部一致。

我就不重新装了,我没啥要求,yum install就行了,要注意docker的各个包版本要一致,不要踩坑。

image-20240328165844259

这是我的版本

容器里安装docker-client,并不是套娃,而是client的命令

server就用宿主机的

client就调用远端的server执行docker cli

场景:

容器里面将来可以执行docker cli连接远端的docker server也就是docker engine来执行 docker操作。

比如👇C1容器里执行docker cli把C2容器给停了,当然C1要通过docker cli 命令连接到宿主上的docker服务进程来执行命令的。

image-20240328172515739

​ 其实就是本来docker-cli都是在宿主上敲的命令,现在可以在运行的容器里面执行,换而言之,C1一旦安装了docker-cli就可以变相的等价于宿主机上敲docker-cli以此达到控制宿主上所有容器的效果。

​ docker的命令真正的执行都是docker-server来执行的,docker-cli在哪里敲都一样,你在宿主上敲和在容器里敲都一样的效果。

​ client和server可以不在一台机器上,网络可达就行了,之前看书的时候也试过cli里可以指定连接的engine也就是server的。

image-20240328173734038

就跟mysql client可以管理本机的mysql db,也可以管理远端的db一样,cli里指定-h a.b.c.d就行了。

那么问题来了该如何在容器里安装docker-cli命令呢

1、通过镜像提前封装进去,可以的,可能就是不太灵活

2、使用官方通用的安装脚本来弄

image-20240328174844778

两条命令就ok了👆

docker的二进制安装-适用于无法上网的机器

image-20240329095253881

image-20240329095339230

然后二进制安装的一个优点👇就是可以明确看到之前的这几个模块,

image-20240329095522383

再写个service文件并做好开机启动

image-20240329095941306

一般就是docker cli就和本地的engine连接就行了,所上图的socket一般也不会修改为让别人机器远程dockercli连过来的ip+port了。除非特殊需求~

再一个docker是以root用户运行的,因为很多系统底层的资源的权限需要root调用。

image-20240329101626679

二进制安装脚本可能需求按需修改的地方

1、版本和国内镜像源

image-20240329103144156

2、下载的URL,由于是国内的所以路径要修改的

image-20240329103254125

image-20240329103431900

其他无需改动就是下载后,解压,写service

然后运行就可以了

image-20240329103555119

离线安装的时候-也就是内网无互联网访问的情况下安装,就是需要把安装包下载下来,因为docker是go写的,所以都是静态库,比较好安装的,依赖问题少。

image-20240329103907503

脚本在视频目录层的课件目录下有的,要用去那里那就行了👇,以上是补充👆

image-20240329122413095

其实也没啥,就是下载现成的离线包,解压,二进制执行PATH路径都可以直接移动到/user/local/bin下就行,以及service这些常规操作。

image-20240329133655518

别人跟你要要docker 3.0 ,你别当真哦,呵呵~

image-20240329134357821

也就是说这些文件,拷贝到任何机器上,都可以正常运行的。所以这些复制到容器里面即使那里是极其精简版的linux也照样可以运行。

image-20240329135108569

pstree -p可能也可以看到进程之间的调用,不过不一定全,因为rocky和ubuntu也不太一样,然后就算ubuntu的pstree可以看到👇,也不全,可能是还需要进一步启动容器后才能看全吧。

image-20240329135333780

image-20240329135804277

image-20240329140139762

监听在socket文件上,也就是docker cli通过这个socket来和dockerd服务也好引擎也罢来通信的。

下面就开始学习docker命令了,通过命令学习技术的逻辑和方案的落地,而不是去机械的命令,我反正从不记命令,这也是我写这些文章的底层原因,因为我学了就忘了,连小时候考完试就忘,从来都是如此。但是话说回来,要用的时候忘记了可不行啊,所以还得在这里写笔记以备不时之需,到时候也是需要鼓足勇气耐着性子复习一遍的,反复多次,捡起来的速度就会很快,比如一些投影仪一些智能照明的设备如何在云上操作,他们其实就是只能穿1层NAT,两层就需要在内部的最近的一层NAT里做好DNAT了,至于为什么能够穿一层,那就是之前我还没上传的ssh隧道里的知识了,是我同事遇到了安装师傅的协作要求放行内部AC的DNAT端口,其实就是AC上作DNAT,我就可以立马反映过来其实不是外部发起的流量,而是内部智能电灯发起的ssh隧道,SSH -R 9527:destser:5000 -Nf CloudSer 正因为兄弟我不止一次复习过那片文章,也是我自己记录的,所以才能够快速反应过来,但是cli我是不记得,逻辑我是喜欢的,但是生活往往要放弃逻辑,这又是另外的话题了。

Copyright 🌹 © oneyearice@126.com 2022 all right reserved,powered by Gitbook文档更新时间: 2024-08-06 11:15:55

results matching ""

    No results matching ""