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

相关文章
|
网络协议 NoSQL Redis
Docker Compose--模板文件
Docker Compose--模板文件
1517 29
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
2974 28
|
安全 API 算法框架/工具
大模型文件Docker镜像化部署技术详解
大模型文件Docker镜像化部署技术详解
2499 3
|
Linux Docker 容器
Linux 中停止 Docker 服务报 warning 导致无法彻底停止问题如何解决?
在 Linux 系统中,停止 Docker 服务时遇到警告无法彻底停止的问题,可以通过系统管理工具停止服务、强制终止相关进程、检查系统资源和依赖关系、以及重置 Docker 环境来解决。通过以上步骤,能够有效地排查和解决 Docker 服务停止不彻底的问题,确保系统的稳定运行。
1367 19
|
NoSQL MongoDB 数据库
使用 docker 快速搭建开发环境的 mongodb 服务
本指南介绍如何使用 Docker 和 Docker Compose 部署 MongoDB 和 Mongo Express。首先,通过 Docker 命令分别启动 MongoDB(镜像 `mongo:7.0.14`)和 Mongo Express(镜像 `mongo-express:1.0.2-20-alpine3.19`),并配置环境变量确保两者能正确连接。接着,提供了一个 `docker-compose.yaml` 文件示例,包含 MongoDB 数据卷、健康检查及服务依赖配置,简化多容器管理。
2494 2
|
Linux 网络安全 虚拟化
linux怎么把文件传到docker里面
在现代应用开发中,Docker作为流行的虚拟化工具,广泛应用于微服务架构。文件传输到Docker容器是常见需求。常用方法包括:1) `docker cp`命令直接复制文件;2) 使用`-v`选项挂载宿主机目录,实现数据持久化和实时同步;3) 通过SCP/FTP协议传输文件;4) 在Dockerfile中构建镜像时添加文件。选择合适的方法并确保网络安全是关键。
2042 1
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
1012 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
负载均衡 应用服务中间件 网络安全
docker swarm添加更多的服务
【10月更文挑战第16天】
544 6
|
Docker 容器
docker swarm启动服务并连接到网络
【10月更文挑战第16天】
514 5
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
499 4