使用maven插件自动化部署docker的坑(Linux部分配置篇)

前言:

        学微服务(springcloud)之前,研究了一下docker集成maven自动部署,遇到了一堆问题,在此整理一下

首先,献上我与chatgpt的对话,这里面包含绝大多数问题(没了chatgpt我怎么活啊?(哭))

主要包含maven插件部分

https://chatgpt.com/share/c5c1b1ba-5775-4b33-8785-130306dc001e

主要包含linux部分

https://chatgpt.com/share/b2923509-f80d-4ea9-af81-7a88563a639e

正常步骤:

        一,卸载原版docker

        

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

         二,配置yum源

                首先要安装一个yum工具

                

yum install -y yum-utils

                然后配置docker的yum源

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

                出现问题

显示“网络不可达”,我没有做任何事情,什么配置都没动,应该不可能是什么dns防火墙等配置问题,检查了一圈也没问题,ping其他国内网站也没问题

问题原因:镜像源不能用了,换个镜像源

                步骤

        编辑 /etc/yum.repos.d/CentOS-Base.repo 文件,修改或者添加镜像源URL。

                我的建议是,将里面的内容全部换成:

[base]
name=CentOS-$releasever - Base
baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[updates]
name=CentOS-$releasever - Updates
baseurl=http://mirrors.aliyun.com/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[extras]
name=CentOS-$releasever - Extras
baseurl=http://mirrors.aliyun.com/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

[centosplus]
name=CentOS-$releasever - Plus
baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

                这里还有一个报错“Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock error was 14: curl#6 - "Could not resolve host: mirrorlist.centos.org; 未知的错误"”写的时候忘记这个错误出现在哪了,反正是出现在这附近,看内容应该也是镜像问题

                解决方法:

                1、执行命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33 进入网络配置

                2、需要把ONBOOT属性改成yes,并且加一个DNS1=114.114.114.114

                然后执行命令:wq

                3、再执行命令systemctl restart network

                如果解决不了,直接换镜源

        三,下载docker,换阿里云镜像后

                输入yum list docker-ce --showduplicates获得所有可下载版本,选择需要需要的版本下载即可

        四,docker准备好后,需要开启远程访问才能在远程通过maven插件执行docker命令

        步骤:       

                1,编辑docker.service文件

                      vi /usr/lib/systemd/system/docker.service

                2,找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375

                        ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375

                3,重启docker

                systemctl daemon-reload

                systemctl restart docker

                4,访问http://ip:2375/version来检查,如果访问通过,则没问题

                出现问题

                如此配置后运行docker会报错“Cannot connect to the Docker daemon at                 unix:///var/run/docker.sock. Is the docker daemon running?”

                解决:我一开始把第四步刚才的配置删了【1】,然后

                编辑 Docker 守护程序配置文件

                1,首先,编辑 Docker 的守护程序配置文件,通常位于 /etc/docker/daemon.json

                      如果文件不存在,则创建它。(我的系统没有,手动创建的)

                2,在该文件内添加以下内容

                

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

                3,重启docker

                sudo systemctl restart docker

                问题

                我把原先的允许外部访问的配置撤回了【1】,执行了上面的配置,但到后面远程连接时还是出现了问题    

                1,编辑docker.service文件

                2,找到[service]节点,把ExecStart这一行的内容改为:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

                其实就是把原来的配置配回来,有点不太一样

                至此,docker允许外部访问应该就没问题了(记得开防火墙) 

        五,配置docker镜像

        此外,在后续的连接中,会需要下载基础镜像如openjdk:17,但是,由于某些原因,当执行linux docker命令:docker pull openjdk:17时,会报:

[ERROR] DOCKER> Unable to pull 'openjdk:17' : error pulling image configuration:
 Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/5e/5e28ba2b4cdb3a7c3bd0ee2e635a5f6481682b77eabf8b51a17ea8bfe1c05697/data?verify=1720526160-ixYTlEnFG7k9W6NrnnPzoIbUDk0%3D: 
dial tcp 157.240.2.36:443:
getsockopt: connection refused  [error pulling image configuration:
 Get https://production.cloudflare.docker.com/registry-v2/docker/registry/v2/blobs/sha256/5e/5e28ba2b4cdb3a7c3bd0ee2e635a5f6481682b77eabf8b51a17ea8bfe1c05697/data?verify=1720526160-ixYTlEnFG7k9W6NrnnPzoIbUDk0%3D: 
dial tcp 157.240.2.36:443: 
getsockopt: connection refused ]

        可能是网络连接问题,当我使用魔法还是没解决

        建议换镜像源,这里我用阿里云的镜像源

        步骤:

                打开阿里云,搜索“容器镜像服务ACR”

                

        得花钱买,但是可以免费试用

        进入管理控制台,选择“镜像工具下面的镜像加速器”,按它提示来就行

docker maven plugin 是个简单的可以管理Docker容器maven插件,这个插件将会根据你的配置,在构建时启动容器,构建结束时停止容器并删除,如果本地找不到镜像,Docker会自动去中央仓库下载。 简单示例:     com.ofbizian     docker-maven-plugin     1.0.0                                            busybox                                                      start-docker             pre-integration-test                              start                            所有可能配置的完整示例:     com.ofbizian     docker-maven-plugin     1.0.0              http://localhost:4243                                       dockerfile/redis                                      <![CDATA[                     {"Hostname":"",                         "PortSpecs":null,                         "User":"",                         "Tty":false,                         "OpenStdin":false,                         "StdinOnce":false,                         "Memory":0,                         "MemorySwap":0,                         "CpuShares":0,                         "AttachStdin":false,                         "AttachStdout":false,                         "AttachStderr":false,                         "Env":null,                         "Cmd":null,                         "Dns":null,                         "Volumes":null,                         "VolumesFrom":"",                         "Entrypoint":[                         ],                         "NetworkDisabled":false,                         "Privileged":false,                         "WorkingDir":"",                         "Domainname":"",                         "ExposedPorts":null,                         "OnBuild":null}                     ]]>                                                       <![CDATA[                     {"ContainerIDFile": null, "LxcConf": null, "Links": null, "PortBindings": {                         "6379/tcp": [                             {                                 "HostIp": "0.0.0.0",                                 "HostPort": "6379"                             }                         ]                     }, "Privileged": false, "PublishAllPorts": false}                     ]]>                                                            busybox                                                      start-docker             pre-integration-test                              start                                            stop-docker             post-integration-test                              stop                            标签:Docker
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值