启动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启动命令由研发自行修改;

相关文章
|
12天前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
49 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
23天前
|
关系型数据库 MySQL 应用服务中间件
[Docker]容器内文件修改
【8月更文挑战第21天】[Docker]容器内文件修改
45 13
|
18天前
|
安全 Go Docker
Go服务Docker Pod不断重启排查和解决
该文章分享了Go服务在Docker Pod中不断重启的问题排查过程和解决方案,识别出并发写map导致fatal error的问题,并提供了使用sync.Map或concurrent-map库作为并发安全的替代方案。
17 4
|
16天前
|
Docker 容器
docker 中文件和外部文件映射
docker 中文件和外部文件映射
|
26天前
|
Docker 容器
在Docker中,如何批量清理临时镜像文件?
在Docker中,如何批量清理临时镜像文件?
|
2月前
|
Java Serverless Docker
函数计算产品使用问题之使用Docker镜像部署的Web服务如何获取客户端的真实IP
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
20天前
|
开发框架 .NET Linux
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
【Azure 应用服务】 部署到App Service for Linux 服务的Docker 镜像,如何配置监听端口呢?
|
20天前
|
存储 Linux Docker
【Azure 应用服务】应用服务中发布Docker Container,如何添加卷(如Azure File Share)以便永久存储文件
【Azure 应用服务】应用服务中发布Docker Container,如何添加卷(如Azure File Share)以便永久存储文件
|
21天前
|
开发框架 .NET Linux
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
【Azure Developer】已发布好的.NET Core项目文件如何打包为Docker镜像文件
|
2月前
|
Shell 应用服务中间件 nginx
docker 服务,镜像,容器命令总结
docker 服务,镜像,容器命令总结
132 4