【Docker】记录一些工作中个人对DockerBuild与启动脚本中的实用的奇淫巧技

本文介绍了如何使用Dockerfile构建CentOS镜像,并通过Docker-compose.yml管理apollo-adminservice, apollo-configservice, 和 apollo-portal三个服务的部署,包括自定义镜像、环境配置和脚本执行。

前言

该文主要用于记录给自己看的,言语逻辑上不通的地方请各位看官多多海涵。

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大锅霍皮久

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值