DockerFile 部署 SpringBoot 工程引用外置配置文件

1,455 阅读2分钟

一.前言

由于公司产品基于许多固定的基础服务运行,基础服务的代码通常不会有更新,不同的客户基础服务大部分一样,但是配置可能不同,为了使部署标准化,减少现场同事部署问题,所以编写了DockerFile并外置配置文件,便于在宿主机上修改

二.安装Docker(已安装则跳过)

1.外网安装Docker服务

安装Docker

// 安装依赖
yum install -y yum-utils
// 指定阿里仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
// 安装Docker
yum install docker-ce docker-ce-cli containerd.io
// 启动Docker
systemctl start docker
// 开机启动
sudo systemctl enable docker

开启远程授权

// 编辑docker.server文件  
vi /usr/lib/systemd/system/docker.service
// 找到 [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
// 重启
systemctl daemon-reload
systemctl restart docker

之后可以用IEDA插件远程连接Docker,便于查看容器运行情况 1692578561015.png

2.内网安装Docker服务
// 下载Docker压缩包,执行解压命 
tar -xzvf docker-20.10.9.tgz
// 将解压的内容进行拷贝 
sudo cp docker/* /usr/bin/

创建一个docker.service文件

vi /etc/systemd/system/docker.service 

编写内容如下:

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target

编写完成保存后执行docker启动命令

// 启动docker
sudo systemctl start docker
// 启动docker
sudo systemctl start docker

Docker镜像源补充

Docker镜像站关闭,截至目前2025-1时,以下仓库可用,直接执行命令后重启Docker即可

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<EOF
{
  "registry-mirrors": [
    "https://docker.1ms.run", 
    "https://docker.xuanyuan.me"
    "https://dockerpull.org",
    "https://docker.1panel.dev",
    "https://docker.foreverlink.love",
    "https://docker.fxxk.dedyn.io",
    "https://docker.xn--6oq72ry9d5zx.cn",
    "https://docker.zhai.cm",
    "https://docker.5z5f.com",
    "https://a.ussh.net",
    "https://docker.cloudlayer.icu",
    "https://hub.littlediary.cn",
    "https://hub.crdz.gq",
    "https://docker.unsee.tech",
    "https://docker.kejilion.pro",
    "https://registry.dockermirror.com",
    "https://hub.rat.dev",
    "https://dhub.kubesre.xyz",
    "https://docker.nastool.de",
    "https://docker.udayun.com",
    "https://docker.rainbond.cc",
    "https://hub.geekery.cn",
    "https://docker.1panelproxy.com",
    "https://atomhub.openatom.cn",
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.linkedbus.com",
    "https://dytt.online",
    "https://func.ink",
    "https://lispy.org",
    "https://docker.xiaogenban1993.com"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

三.部署项目

编写DockerFile文件

注意:FROM是JAR包运行需要的基础镜像,如果是内网的情况下,需要先将基础镜像导入

# 基础镜像
FROM frolvlad/alpine-oraclejdk8:slim

# 作者
MAINTAINER sans

# 指定工作路径
WORKDIR /opt/

# 拷贝项目到镜像位置
COPY docker-boot-demo.jar /opt/
COPY config/application-dev.yml /opt/application-dev.yml
COPY config/application-prod.yml /opt/application-prod.yml

# 定义参数变量
ENV LANG=zh_CN.UTF-8
ENV JVM_XMS=256m
ENV JVM_XMX=512m
ENV JAR_ACTIVE=dev

# 执行命令
ENTRYPOINT exec java -Xmx${JVM_XMX} -Xms${JVM_XMS} -jar -Dspring.profiles.active=${JAR_ACTIVE} /opt/docker-boot-demo.jar

将DockerFile文件和docker-boot-demo.jar(测试的Jar包),以及对应的配置文件放到服务器上,config文件夹中包含外部配置application-dev.yml和application-prod.yml,在DockerFile的定义参数变量中可以调整运行参数和环境,这里注意DockerFile和jar以及config在同目录,这样我们修改环境和配置完全可以在宿主机上去做.

1692349502919.png

四.运行脚本

// 构建镜像命令(最后有个.不要漏掉)
sudo docker build -t docker-boot-demo .
// 运行镜像命令
sudo docker run -d --name docker-boot-demo --network=host -e TZ=Asia/Shanghai -m 2000m docker-boot-demo