启动docker服务需要的三个重要文件

简介: 这篇文章介绍了启动Docker服务所需的三个重要文件:Dockerfile、build_image.sh和run.sh。文章提供了Java和Python两个版本的Dockerfile示例,并解释了每个阶段的作用,如基础镜像的选择、构建环境的设置、以及如何通过参数传递环境变量。build_image.sh脚本用于执行Docker镜像的构建、标记和推送过程,而run.sh脚本则用于执行具体的运行命令,包括设置Java参数和执行jar文件。文章还强调了这些文件应由项目负责人维护,并根据项目需求自行修改启动命令参数。

目录

Dockerfile

Java版:

build_image.sh

run.sh


一般需要添加 Dockerfile,build_image.sh和run.sh三个文件。

Dockerfile

Java版:

# stage1 build java run image
FROM swr.ap-southeast-3.myhuaweicloud.com/it-common/java-base:oracle-jdk-1.8.0_202-with-awscli-obsutil5.1
#从build_image.sh传进来工程目录
ARG PROJECT_DIR
# stage2 copy run jar file
COPY $PROJECT_DIR/target/*.jar /data/code/
COPY $PROJECT_DIR/run.sh  /data/code/run.sh
RUN sudo chmod o+x /data/code/run.sh    && \
    sudo chown -R ${AppUser}:${AppGroup} /data
# set workdir
WORKDIR /data
# stage2
CMD ["/bin/bash","-c","bash /data/code/run.sh $Env"]

Python版:

FROM swr.ap-southeast-3.myhuaweicloud.com/it-common/python-base:sbos-3.6.1-v2.0
#从build_image.sh传进来工程目录 
ARG PROJECT_DIR
# copy python file
COPY . /data/code/
COPY $PROJECT_DIR/run.sh  /data/code/run.sh
# set workdir
WORKDIR /data
CMD ["/bin/bash","-c","bash /data/code/run.sh $Env]

说明:

  • stage1 为程序运行的环境基础镜像,如java项目使用 swr.ap-southeast-3.myhuaweicloud.com/it-common/java-base:oracle-jdk-1.8.0_202-with-awscli-obsutil5.1 ,python项目使用 swr.ap-southeast-3.myhuaweicloud.com/it-sgt/python-base:sbos-3.6.1, 各团队可使用各自不同的自定义镜像;
  • stage2 将build产生的jar包或python代码和run.sh脚本拷贝至新镜像
  • stage3 dev/test/prod等环境使用同一份docker镜像,通过传入不同的Env参数加载不同的环境配置,支持传入多个参数。如python项目通过传入的Project参数来启动不同的模块;

build_image.sh

  • Java
    1.存放路径:各项目根路径下;
    2.build_image.sh内容
#!/bin/bash
VERSION=$1
PROJECT=$2
BUILD_CMD=$3
PROJECT_DIR=$4
IMAGE_HUB='swr.ap-southeast-3.myhuaweicloud.com/it-sbos'
if [ ! -n "$VERSION" ]; then
    exit 2
fi
if [ ! -n "$BUILD_CMD" ]; then
    BUILD_CMD="mvn clean install package -Dmaven.test.skip=true"
fi
$BUILD_CMD
echo -------------------------------------------
echo begin build docker images $PROJECT:$VERSION
echo -------------------------------------------
docker build --no-cache --build-arg PROJECT_DIR=$PROJECT_DIR -t $PROJECT:$VERSION .
docker tag $PROJECT:$VERSION $IMAGE_HUB/$PROJECT:$VERSION
docker push $IMAGE_HUB/$PROJECT:$VERSION
  • Python
    1.存放路径:各项目根路径下;
    2.build_image.sh内容
#!/bin/bash
VERSION=$1
PROJECT=$2
PROJECT_DIR=$3
IMAGE_HUB='swr.ap-southeast-3.myhuaweicloud.com/it-sbos'
if [ ! -n "$VERSION" ]; then
    exit 2
fi
if [ ! -n "$PROJECT" ]; then
    exit 1
fi
echo -------------------------------------------
echo begin build docker images $PROJECT:$VERSION
echo -------------------------------------------
docker build --no-cache --build-arg PROJECT_DIR=$PROJECT_DIR -t $PROJECT:$VERSION .
docker tag $PROJECT:$VERSION $IMAGE_HUB/$PROJECT:$VERSION
docker push $IMAGE_HUB/$PROJECT:$VERSION

run.sh

#!/bin/bash
Env=$1
ProjectName=trans
[ -z $Env ] && echo 'Please input environment argument' && exit 1
#额外执行命令
if [ ! -z ${Ext_CMD} ];then
   ${Ext_CMD}
fi
# 启动服务
AppDir=$(cd $(dirname $0); pwd)
if [ $Env != "prod" ];
then 
    # 对应dev/test等非prod环境
    ExeArgs="-Xmx1024M -Xms1024M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+ParallelRefProcEnabled -Dname=$ProjectName"
else
    # 对应prod环境
    ExeArgs="-Xmx4096M -Xms4096M -XX:MaxMetaspaceSize=512M -XX:MetaspaceSize=512M -XX:+UseG1GC -XX:MaxGCPauseMillis=100 -XX:+ParallelRefProcEnabled -Dname=$ProjectName"
fi
ExeArgs="$ExeArgs --spring.profiles.active=$Env"
JarFile=$(find $AppDir/ -maxdepth 1 -name "*.jar")
# 以对应用启动时,1)部分文件没有权限;2)/data/logs 挂载到容器后普通用户无写权限
sudo chown -R ${AppUser}:${AppGroup} /data
exec java -jar $JVMArgs $JarFile $ExeArgs &>/dev/null

此文件由各项目负责人自行维护,ExeArgs启动命令由研发自行修改;

相关文章
|
3月前
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
39 6
|
3月前
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
56 5
|
3月前
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
44 4
|
3月前
|
Docker 容器
docker swarm 在服务中使用网络
【10月更文挑战第14天】
57 2
|
3月前
|
安全 网络安全 数据安全/隐私保护
docker服务未启动
【10月更文挑战第2天】
140 3
|
3月前
|
Linux iOS开发 Docker
docker服务未启动
【10月更文挑战第3天】
105 1
|
4月前
|
Docker Python 容器
python检测docker compose文件是否正确
python检测docker compose文件是否正确
|
4月前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
205 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
3月前
|
前端开发 Docker 容器
主机host服务器和Docker容器之间的文件互传方法汇总
Docker 成为前端工具,可实现跨设备兼容。本文介绍主机与 Docker 容器/镜像间文件传输的三种方法:1. 构建镜像时使用 `COPY` 或 `ADD` 指令;2. 启动容器时使用 `-v` 挂载卷;3. 运行时使用 `docker cp` 命令。每种方法适用于不同场景,如静态文件打包、开发时文件同步及临时文件传输。注意权限问题、容器停止后的文件传输及性能影响。
749 0
|
3月前
|
网络安全 Docker 容器
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
【Bug修复】秒杀服务器异常,轻松恢复网站访问--从防火墙到Docker服务的全面解析
86 0

热门文章

最新文章

下一篇
开通oss服务