记录一些工作中个人对DockerBuild与启动脚本中的实用的奇淫巧技
前言
该文主要用于记录给自己看的,言语逻辑上不通的地方请各位看官多多海涵。
Centos最新镜像Dockefile
FROM centos:latest
ENV LANG C.utf8
ENV TZ=Asia/Shanghai
## 自定义用户,下载gosu
RUN groupadd --system --gid=9999 ops && \
useradd --system --home-dir /home/ --uid=9999 --gid=ops ops
ARG VERSION=1.12
RUN dnf install -y wget && wget -O /usr/local/bin/gosu https://github.com/tianon/gosu/releases/download/${VERSION}/gosu-amd64 && chmod a+x /usr/local/bin/gosu
WORKDIR /home/ops
Java Dockerfile
FROM 7014253/centos:1.0
RUN mv /etc/yum.repos.d/ /etc/yum.repos.d_bak && mkdir -p /etc/yum.repos.d/ && curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo
RUN dnf install -y java-1.8.0-openjdk-devel.x86_64 unzip
ENV JAVA_HOME=/etc/alternatives/java_sdk
以apollo-adminservice 编译完成的包作为Dockerfile Copy
FROM 7014253/java:1.0
ARG VERSION=2.0.0-RC1
ARG APP=apollo-adminservice
ENV VERSION $VERSION
COPY $APP-${VERSION}-github.zip /$APP/$APP-${VERSION}-github.zip
#COPY config/app.properties config/$APP.conf scripts .
RUN unzip /$APP/$APP-${VERSION}-github.zip -d /$APP \
&& rm -rf /$APP/$APP-${VERSION}-github.zip
COPY config/ /$APP/config/
#RUN ls /$APP/scripts
COPY scripts/startup.sh /$APP/scripts/startup.sh
#RUN cat /$APP/scripts/startup.sh
RUN ln -s /$APP/$APP-${VERSION}.jar $APP.jar && chmod +x /$APP/scripts/startup.sh
ENV APOLLO_RUN_MODE "Docker"
CMD ["/apollo-adminservice/scripts/startup.sh"]
以apollo-configservice 编译完成的包作为Dockerfile Copy
FROM 7014253/java:1.0
ARG VERSION=2.0.0-RC1
ARG APP=apollo-configservice
ENV VERSION $VERSION
COPY $APP-${VERSION}-github.zip /$APP/$APP-${VERSION}-github.zip
RUN unzip /$APP/$APP-${VERSION}-github.zip -d /$APP \
&& rm -rf /$APP/$APP-${VERSION}-github.zip
COPY config/ /$APP/config/
COPY scripts/startup.sh /$APP/scripts/startup.sh
RUN ln -s /$APP/$APP-${VERSION}.jar $APP.jar && chmod +x /$APP/scripts/startup.sh
ENV APOLLO_RUN_MODE "Docker"
CMD ["/apollo-configservice/scripts/startup.sh"]
以apollo-portal编译完成的包作为Dockerfile Copy
FROM 7014253/java:1.0
ARG VERSION=2.0.0-RC1
ARG APP=apollo-portal
ENV VERSION $VERSION
COPY $APP-${VERSION}-github.zip /$APP/$APP-${VERSION}-github.zip
RUN unzip /$APP/$APP-${VERSION}-github.zip -d /$APP \
&& rm -rf /$APP/$APP-${VERSION}-github.zip
COPY config/ /$APP/config
COPY scripts/startup.sh /$APP/scripts/startup.sh
RUN ln -s /$APP/$APP-${VERSION}.jar $APP.jar && chmod +x /$APP/scripts/startup.sh
ENV APOLLO_RUN_MODE "Docker"
CMD ["/apollo-portal/scripts/startup.sh"]
构建脚本,循环对三个服务进行分别打包。
#!/bin/bash
set -x
services_name=(apollo-adminservice apollo-configservice apollo-portal)
# build docker
BUILD_PATH=$(
cd $(dirname $0)
pwd
)
for i in ${services_name[@]};do
REGISTRY=7014253
VERSION=1.0
image_name="$REGISTRY/services/$i:$VERSION"
cd $BUILD_PATH/$i/
cp $BUILD_PATH/$GIT_APP/$i/target/*.zip .
# 修改基础镜像版本号
# 要求所有的基础镜像版本依赖必须放到第一行
if [ ! x"$BASE_VERSION" == x ]; then
sed -i "1s/1.0/$BASE_VERSION/" $BUILD_PATH/$i/Dockerfile
fi
echo "[INFO] Starting buiild $i"
has_exists=$(docker images | awk -F " " '{print $1":"$2" "$3}' | grep $image_name | wc -l)
#先删除已经存在的镜像
if [ $has_exists -gt 0 ]; then
docker rmi $image_name
fi
# 上传到docker仓库
docker push $image_name
done
Docker-compose.yml
version: '3.8'
x-apollo-common:
&apollo-common
extra_hosts:
- "mysql.com:127.0.0.1"
environment:
TZ: 'Asia/Shanghai'
services:
apollo-adminservice:
<<: *apollo-common
image: 7014253/services/apollo-adminservice:1.0
hostname: apollo-adminservice
container_name: apollo-adminservice
network_mode: host
healthcheck:
test: "ps axu | grep -v 'grep' | grep 'apollo-adminservice'"
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
env_file:
- apollo-adminservice.env
deploy:
resources:
limits:
memory: 1G
restart: unless-stopped
apollo-configservice:
<<: *apollo-common
image: 7014253/services/apollo-configservice:1.0
hostname: apollo-configservice
container_name: apollo-configservice
network_mode: host
healthcheck:
test: "ps axu | grep -v 'grep' | grep 'apollo-configservice'"
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
env_file:
- apollo-configservice.env
deploy:
resources:
limits:
memory: 1G
restart: unless-stopped
apollo-portal:
<<: *apollo-common
image: 7014253/services/apollo-portal:1.0
hostname: apollo-portal
container_name: apollo-portal
network_mode: host
healthcheck:
test: "ps axu | grep -v 'grep' | grep 'apollo-portal'"
interval: 10s
timeout: 5s
retries: 5
start_period: 10s
env_file:
- apollo-portal.env
deploy:
resources:
limits:
memory: 1G
restart: unless-stopped
本文介绍了如何使用Dockerfile构建CentOS镜像,并通过Docker-compose.yml管理apollo-adminservice, apollo-configservice, 和 apollo-portal三个服务的部署,包括自定义镜像、环境配置和脚本执行。
6131

被折叠的 条评论
为什么被折叠?



