1、下载alpine镜像
?
1
2
3
4
5
6
7
8
9
10 |
[root@docker43 ~] # docker pull alpine
Using default tag: latest
Trying to pull repository docker.io /library/alpine ...
latest: Pulling from docker.io /library/alpine
4fe2ade4980c: Pull complete
Digest: sha256:621c2f39f8133acb8e64023a94dbdf0d5ca81896102b9e57c0dc184cadaf5528
Status: Downloaded newer image for docker.io /alpine :latest
[root@docker43 ~] # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io /alpine latest 196d12cf6ab1 3 weeks ago 4.41 MB |
2、通过dockerfile构建镜像
在其他的资料中很多都是下载包然后在dockerfile 使用COPY进行拷贝,这里我就不这样做了,我们分开写(都是通过dockerfile进行构建镜像)
2.1.构建jdk镜像
创建jdk目录
?
1
2
3
4
5 |
[root@docker43 ~] # cd /opt/
[root@docker43 opt] # mkdir -p alpine_jre && cd alpine_jre && touch Dockerfile
[root@docker43 alpine_jre] # ll
总用量 0
-rw-r--r-- 1 root root 0 10月 6 17:39 Dockerfile |
编写dockerfile文件
?
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
29
30
31
32
33
34
35
36
37
38
39
40 |
# 基础镜像
FROM alpine
# 作者信息
MAINTAINER JRE Docker Maintainers "1024331014@qq.com"
# 修改源
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \\
echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories
# 安装需要的软件
RUN apk update && \\
apk add --no-cache ca-certificates && \\
apk add --no-cache curl bash tree tzdata && \\
cp -rf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 定义环境变量
ENV PATH /usr/local/bin :${PATH}
# 安装JRE
RUN apk add --nocache openjdk8-jre-base && \\
rm -rf /var/cache/apk/ *
RUN { \\
echo '#!/bin/sh' ; \\
echo 'set -e' ; \\
echo ; \\
echo 'dirname "$(dirname "$(readlink -f "$(which javac || which java)")")"' ; \\
} > /usr/local/bin/docker-java-home \\
&& chmod +x /usr/local/bin/docker-java-home
ENV JAVA_HOME /usr/lib/jvm/default-jvm
ENV PATH ${PATH}:${JAVA_HOME} /bin :${JAVA_HOME} /jre/bin
ENV JAVA_VERSION 8u71
ENV JAVA_ALPINE_VERSION 8.171.11-r0
RUN set -x \\
\\
&& apk add --no-cache \\
\\
openjdk8-jre= "$JAVA_ALPINE_VERSION" |
创建镜像
?
1 |
[root@docker43 alpine_jre] # docker build -t alpine_jre . |
查看镜像
?
1
2
3
4 |
[root@docker43 alpine_jre] # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alpine_jre latest 614bc57ab66e 33 seconds ago 91.1 MB
docker.io /alpine latest 196d12cf6ab1 3 weeks ago 4.41 MB |
2.2.构建tomcat镜像
创建tomcat目录
?
1
2
3
4
5 |
[root@docker43 ~] # cd /opt/
[root@docker43 opt] # mkdir -p jre_tomcat && cd jre_tomcat && touch Dockerfile
[root@docker43 jre_tomcat] # ll
总用量 0
-rw-r--r-- 1 root root 0 10月 6 17:46 Dockerfile |
编写dockerfile(基于上面的alpine_jre镜像)
?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100 |
#基础镜像
FROM alpine_jre
# 作者信息
MAINTAINER tomcat Docker Maintainers "1024331014@qq.com"
# 定义tomcat变量(如果有其他的可以在这里加)
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME /bin :$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
# let "Tomcat Native" live somewhere isolated
ENV TOMCAT_NATIVE_LIBDIR $CATALINA_HOME /native-jni-lib
ENV LD_LIBRARY_PATH ${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}$TOMCAT_NATIVE_LIBDIR
RUN apk add --no-cache gnupg
# see http://archive.apache.org/dist/tomcat/tomcat-$TOMCAT_MAJOR/KEYS
# see also "update.sh" (https://github.com/docker-library/tomcat/blob/master/update.sh)
ENV GPG_KEYS 05AB33110949707C93A279E3D3EFE6B686867BA6 07E48665A34DCAFAE522E5E6266191C37C037D42 47309207D818FFD8DCD3F83F1931D684307A10A5 541FBE7D8F78B25E055DDEE13C370389288584E7 61B832AC2F1C5A90F0F9B00A1C506407564C17A3 713DA88BE50911535FE716F5208B0AB1D63011C7 79F7026C690BAA50B92CD8B66A3AD3F4F22C4FED 9BA44C2621385CB966EBA586F72C284D731FABEE A27677289986DB50844682F8ACB77FC2E86E29AC A9C5DF4D22E99998D9875A5110C01C5A2F6059E7 DCFD35E0BF8CA7344752DE8B6FB21E8933C60243 F3A04C595DB5B6A5F1ECA43E3B7BBB100D811BBE F7DA48BB64BCB84ECBA7EE6935CD23C10D498E23
RUN set -ex; \\
for key in $GPG_KEYS; do \\
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key" ; \\
done
# 定义tomcat版本
ENV TOMCAT_MAJOR 8
ENV TOMCAT_VERSION 8.0.53
# 下载
# https://issues.apache.org/jira/browse/INFRA-8753?focusedCommentId=14735394#comment-14735394
ENV TOMCAT_TGZ_URL https: //www .apache.org /dyn/closer .cgi?action=download&filename=tomcat /tomcat- $TOMCAT_MAJOR /v $TOMCAT_VERSION /bin/apache-tomcat- $TOMCAT_VERSION. tar .gz
# not all the mirrors actually carry the .asc files :'(
ENV TOMCAT_ASC_URL http: //archive .apache.org /dist/tomcat/tomcat- $TOMCAT_MAJOR /v $TOMCAT_VERSION /bin/apache-tomcat- $TOMCAT_VERSION. tar .gz.asc
# 安装
RUN set -x \\
\\
&& apk add --no-cache --virtual .fetch-deps \\
ca-certificates \\
tar \\
openssl \\
&& wget -O tomcat. tar .gz "$TOMCAT_TGZ_URL" \\
&& wget -O tomcat. tar .gz.asc "$TOMCAT_ASC_URL" \\
&& gpg --batch --verify tomcat. tar .gz.asc tomcat. tar .gz \\
&& tar -xvf tomcat. tar .gz --strip-components=1 \\
&& rm bin/*.bat \\
&& rm tomcat. tar .gz* \\
\\
&& nativeBuildDir= "$(mktemp -d)" \\
&& tar -xvf bin /tomcat-native . tar .gz -C "$nativeBuildDir" --strip-components=1 \\
&& apk add --no-cache --virtual .native-build-deps \\
apr-dev \\
dpkg-dev dpkg \\
gcc \\
libc-dev \\
make \\
"openjdk${JAVA_VERSION%%[-~bu]*}" = "$JAVA_ALPINE_VERSION" \\
openssl-dev \\
&& ( \\
export CATALINA_HOME= "$PWD" \\
&& cd "$nativeBuildDir/native" \\
&& gnuArch= "$(dpkg-architecture --query DEB_BUILD_GNU_TYPE)" \\
&& . /configure \\
--build= "$gnuArch" \\
--libdir= "$TOMCAT_NATIVE_LIBDIR" \\
--prefix= "$CATALINA_HOME" \\
--with-apr= "$(which apr-1-config)" \\
--with-java-home= "$(docker-java-home)" \\
--with-ssl= yes \\
&& make -j$(getconf _NPROCESSORS_ONLN) \\
&& make install \\
) \\
&& runDeps="$( \\
scanelf --needed --nobanner --recursive "$TOMCAT_NATIVE_LIBDIR" \\
| awk '{ gsub(/,/, "\\nso:", $2); print "so:" $2 }' \\
| sort -u \\
| xargs -r apk info --installed \\
| sort -u \\
)" \\
&& apk add --virtual .tomcat-native-rundeps $runDeps \\
&& apk del .fetch-deps .native-build-deps \\
&& rm -rf "$nativeBuildDir" \\
&& rm bin /tomcat-native . tar .gz
# verify Tomcat Native is working properly
RUN set -e \\
&& nativeLines= "$(catalina.sh configtest 2>&1)" \\
&& nativeLines= "$(echo " $nativeLines " | grep 'Apache Tomcat Native')" \\
&& nativeLines= "$(echo " $nativeLines " | sort -u)" \\
&& if ! echo "$nativeLines" | grep 'INFO: Loaded APR based Apache Tomcat Native library' >&2; then \\
echo >&2 "$nativeLines" ; \\
exit 1; \\
fi
# 开发8080端口
EXPOSE 8080
# 执行命令
CMD [ "catalina.sh" , "run" ] |
创建镜像
?
1 |
[root@docker43 jre_tomcat] # docker build -t tomcat:1.0 . |
查看镜像
?
1
2
3
4
5 |
[root@docker43 jre_tomcat] # docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcat 1.0 64c9cec4375d 7 seconds ago 124 MB
alpine_jre latest 614bc57ab66e 8 minutes ago 91.1 MB
docker.io /alpine latest 196d12cf6ab1 3 weeks ago 4.41 MB |
2.3.构建tomcat_web镜像
创建tomcat_web目录(包含Dockerfile和启动文件)
?
1
2
3
4
5
6 |
[root@docker43 ~] # cd /opt/
[root@docker43 opt] # mkdir tomcat_web && cd tomcat_web && touch Dockerfile && touch start.sh
[root@docker43 tomcat_web] # ll
总用量 0
-rw-r--r-- 1 root root 0 10月 6 17:53 Dockerfile
-rw-r--r-- 1 root root 0 10月 6 17:53 start.sh |
编写start.sh启动脚本
?
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
|