Intro Docker Build Image Pre-work

Intro Docker Build Image Pre-work

這篇介紹Docker Build Image Pre-work。

準備相關檔案路徑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
製作目標環境: Rocky Linux 8 + tomcat 10.1.x + Jdk 17.0.x
專案準備檔案目錄如下:
{dockerName}
tomcat
bin
setenv.sh
conf
server.xml
tomcat-users.xml
Dockerfile
env.sh
run.sh
tomcat10.tar.gz
jdk17.tar.gz

Dockerfile content

1
2
3
4
5
6
7
8
9
FROM rockylinux:8
COPY jdk17.tar.gz tomcat10.tar.gz /
ADD env.sh / run.sh /
ENV JAVA_HOME=/java
ENV PATH=$JAVA_HOME/bin:$PATH
RUN sh /run.sh
ENTRYPOINT ["sh", "-c", "source /env.sh && \"$@\"", "-s"]
COPY tomcat /usr/local/tomcat
CMD [ "/usr/local/tomcat/bin/catalina.sh" , "run" ]

env.sh content

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash
read total_Memory <<< $(free -h | grep Mem | awk '{print $2}' | tr -d 'Gi')
read cgroup_Memory <<< $(cat /sys/fs/cgroup/memory/memory.limit_in_bytes)
cgroup_Memory=$(($cgroup_Memory/1024/1024/1024))
if [ $cgroup_Memory -le $total_Memory ]
then
total_Memory=$cgroup_Memory
fi
if [ "$total_Memory" -le 64 ]
then
proportion=0.6
tomcat_Memory=`awk -v x=$total_Memory -v y=$proportion 'BEGIN {printf int(x*y)}'`
elif [ "$total_Memory" -gt 64 ] && [ "$total_Memory" -le 128 ]
then
proportion=0.5
tomcat_Memory=`awk -v x=$total_Memory -v y=$proportion 'BEGIN {printf int(x*y)}'`
elif [ "$total_Memory" -gt 128 ]
then
tomcat_Memory=64
else
echo "can't get system total memory"
fi
if [ $tomcat_Memory -eq 0 ]
then
tomcat_Memory=1
fi
export XMX=$tomcat_Memory
export XMS=$tomcat_Memory

run.sh content

1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash
mkdir ./tomcat10 && tar -zxvf tomcat10.tar.gz -C ./tomcat10 --strip-components 1
mkdir ./jdk17 && tar -zxvf jdk17.tar.gz -C ./jdk17 --strip-components 1
ln -s /jdk17 /java
ln -s /tomcat10 /usr/local/tomcat
rm -f /jdk17.tar.gz
rm -f /tomcat10.tar.gz
rm -rf /usr/local/tomcat/work
rm -rf /usr/local/tomcat/webapps
yum install -y fontconfig
yum install -y procps-ng
fc-cache --force