一.前言
由于公司产品基于许多固定的基础服务运行,基础服务的代码通常不会有更新,不同的客户基础服务大部分一样,但是配置可能不同,为了使部署标准化,减少现场同事部署问题,所以编写了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,便于查看容器运行情况
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在同目录,这样我们修改环境和配置完全可以在宿主机上去做.
四.运行脚本
// 构建镜像命令(最后有个.不要漏掉)
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