1、编写DockerFile文件
内容:
FROM openjdk:8u282-jdk
WORKDIR /home/XXX/XXXApp
ADD ./XXXApp/* /home/XXX/XXXApp/
EXPOSE 8088
CMD sh startup.sh
其中,
FROM镜像 指定新镜像所基于的镜像,第一条指令必须为FROM指令 ,
每创建一个镜像就需要一 条FROM指令。
MAINTAINER名字 说明新镜像的维护人信息
CMD[”要运行的程序",”参数1,
“参数2 "] 指令启动容器时要运行的命令或者脚本,Dockerfile只能有 -条CMD命令,如果指定多条则只能最后一条被执行
EXPOSE端口号 指定新镜像加载到Docker时要开启的端口
ENV环境变量变量值 设置一个环境变量的值,会被后面的RUN使用
ADD源文件/目录目标文件/目录 将源文件复制到目标文件,源文件要与Dockerfile位于相同 目录中,或者是一个URL
COPY源文件/目录目标文件/目录 将本地主机上的文件/目录复制到目标地点,源文件/目录要 与Dockerfile在相同的目录中
VOLUME[“目录"] 在容器中创建一个挂载点
USER用户名/UID 指定运行容器时的用户
WORKDIR路径 为后续的RUN、CMD、ENTRYPOINT指定工作目录
ONBUILD命令 指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK 健康检查
RUN命令 在所基于的镜像上执行命令,并提交到新的镜像中
2、编写startup.sh文件内容
#!/bin/bash
workpath=/home/XXX/XXX
hostIp=X.X.X.X
Xms=4096m
Xmx=4096m
rootLogLevel=INFO
apiLogLevel=DEBUG
customConfigPath=./custom-config/
skywalkingPath=${workpath}/lib/skywalking-agent/skywalking-agent.jar
cd ${workpath}
java -Xms${Xms} -Xmx${Xmx} -XX:+HeapDumpOnOutOfMemoryError -Dcom.sun.management.jmxremote -Dskywalking.agent.service_name=XXX -Djava.rmi.server.hostname=${hostIp} -Dcom.sun.management.jmxremote.port=6687 -Dcom.sun.management.jmxremote.rmi.port=6687 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -javaagent:${skywalkingPath} -jar -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5007 XXX.jar --spring.config.location=${customConfigPath} --XXX.log.level.root=${rootLogLevel} --XXX.log.level.api=${apiLogLevel}
3、编写compose-XXX.yml文件,内容:
# yaml 配置
version: '3'
services:
XXX: #服务名称
image: "xxx/XXX:1.0.0"
container_name: "XXX"
network_mode: "host"
restart: always
environment:
- TZ=Asia/Shanghai
- NACOS_SERVER=localhost:8848
- NACOS_NAMESPACE=xxxx-xxxx-xxxx-xxxx-xxxx
- ADMIN_SERVER_URL=http://xxxx:8060
volumes:
- "/home/docker/volumes/xxx/_data/startup.sh:/home/xxx/xxx/startup.sh"
- "/home/docker/volumes/xxx/_data/custom-config:/home/xxx/xxx/custom-config"
- "/home/docker/volumes/xxx/_data/lib/skywalking-agent:/home/xxx/xxx/lib/skywalking-agent"
- "/home/docker/volumes/xxx/_data/node1/data:/home/xxx/xxx/data"
- "/home/docker/volumes/xxx/_data/node1/logs:/home/xxx/xxx/logs"
- "/home/docker/volumes/xxx/_data/node1/xxx.jar:/home/xxx/xxx/xxx.jar"
- "/etc/localtime:/etc/localtime"
- "/etc/timezone:/etc/timezone"
logging:
options:
max-size: 500m
privileged: true
4、编写install.sh文件,内容:
#!/bin/bash
echo "preparing for system envrionment ..."
image_home="./images"
image_service="xxx.tar.gz"
service_data="/home/docker/volumes/xxx/_data"
echo "Loading docker images ..."
docker load -i ${image_home}/${image_service}
echo "Creating volumes ..."
docker volume create xxx
echo "preparing for envrionment ..."
cp conf/startup.sh ${service_data}/
cp -r conf/custom-config ${service_data}/
mkdir ${service_data}/node1
mkdir ${service_data}/node1/logs
mkdir ${service_data}/node1/data
mkdir -p ${service_data}/lib/skywalking-agent
cp -r lib/skywalking-agent/* ${service_data}/lib/skywalking-agent/
cp xxx.jar ${service_data}/node1/
chmod 777 -R ${service_data}
echo "=============Starting containers...========== "
echo "=============creating all containers ...==================="
docker-compose -f compose-xxx.yml up -d gateway-xxx
5、编写uninstall.sh文件,内容:
#! /bin/bash
docker-compose -f compose-xxx.yml down
docker rmi xxx/xxx:1.0.0
docker volume rm xxx
创建镜像
/home/XXX10/docker/Dockerfiles/XXX#
docker build -t xxx/XXX:2.0.0 .
docker save -o XXX.tar.gz xxx/XXX:2.0.0
创建所用的文件
/home/XXX10/docker/XXX#
复制tar到XXX/images目录下,先到images目录下
cp /home/XXX10/docker/Dockerfiles/XXX/XXX.tar.gz ./
赋值目录文件权限
chmod 775 XXX/
执行命令,创建容器
./install.sh*
修改代码后提交
1、 生成jar包
双击maven --> clean 和 package
2、替换jar包
/home/docker/volumes/xxx_data/_data/xxx#
3、修改权限
chmod 777 xxx.jar
chown root:root xxx.jar
4、重启docker 或者在docker管理界面重启
docker ps -a --查看各个服务容器id
docker stop 1234426b6aa
docker start 1234426b6aa
其中 1234426b6aa 为容器id
5、查看日志目录;
/home/docker/volumes/xxx/_data/node1/logs