基于alpine用dockerfile创建的tomcat镜像的实现

2025-05-27 0 71

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

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372
#!/bin/sh

# Licensed to the Apache Software Foundation (ASF) under one or more

# contributor license agreements. See the NOTICE file distributed with

# this work for additional information regarding copyright ownership.

# The ASF licenses this file to You under the Apache License, Version 2.0

# (the "License"); you may not use this file except in compliance with

# the License. You may obtain a copy of the License at

#

# http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

# -----------------------------------------------------------------------------

# Control Script for the CATALINA Server

#

# Environment Variable Prerequisites

#

# Do not set the variables in this script. Instead put them into a script

# setenv.sh in CATALINA_BASE/bin to keep your customizations separate.

#

# CATALINA_HOME May point at your Catalina "build" directory.

#

# CATALINA_BASE (Optional) Base directory for resolving dynamic portions

# of a Catalina installation. If not present, resolves to

# the same directory that CATALINA_HOME points to.

#

# CATALINA_OUT (Optional) Full path to a file where stdout and stderr

# will be redirected.

# Default is $CATALINA_BASE/logs/catalina.out

#

# CATALINA_OPTS (Optional) Java runtime options used when the "start",

# "run" or "debug" command is executed.

# Include here and not in JAVA_OPTS all options, that should

# only be used by Tomcat itself, not by the stop process,

# the version command etc.

# Examples are heap size, GC logging, JMX ports etc.

#

# CATALINA_TMPDIR (Optional) Directory path location of temporary directory

# the JVM should use (java.io.tmpdir). Defaults to

# $CATALINA_BASE/temp.

#

# JAVA_HOME Must point at your Java Development Kit installation.

# Required to run the with the "debug" argument.

#

# JRE_HOME Must point at your Java Runtime installation.

# Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME

# are both set, JRE_HOME is used.

#

# JAVA_OPTS (Optional) Java runtime options used when any command

# is executed.

# Include here and not in CATALINA_OPTS all options, that

# should be used by Tomcat and also by the stop process,

# the version command etc.

# Most options should go into CATALINA_OPTS.

#

# JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories

# containing some jars in order to allow replacement of APIs

# created outside of the JCP (i.e. DOM and SAX from W3C).

# It can also be used to update the XML parser implementation.

# Defaults to $CATALINA_HOME/endorsed.

#

# JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start"

# command is executed. The default is "dt_socket".

#

# JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start"

# command is executed. The default is localhost:8000.

#

# JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start"

# command is executed. Specifies whether JVM should suspend

# execution immediately after startup. Default is "n".

#

# JPDA_OPTS (Optional) Java runtime options used when the "jpda start"

# command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,

# and JPDA_SUSPEND are ignored. Thus, all required jpda

# options MUST be specified. The default is:

#

# -agentlib:jdwp=transport=$JPDA_TRANSPORT,

# address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND

#

# JSSE_OPTS (Optional) Java runtime options used to control the TLS

# implementation when JSSE is used. Default is:

# "-Djdk.tls.ephemeralDHKeySize=2048"

#

# CATALINA_PID (Optional) Path of the file which should contains the pid

# of the catalina startup java process, when start (fork) is

# used

#

# LOGGING_CONFIG (Optional) Override Tomcat's logging config file

# Example (all one line)

# LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"

#

# LOGGING_MANAGER (Optional) Override Tomcat's logging manager

# Example (all one line)

# LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

#

# USE_NOHUP (Optional) If set to the string true the start command will

# use nohup so that the Tomcat process will ignore any hangup

# signals. Default is "false" unless running on HP-UX in which

# case the default is "true"

# -----------------------------------------------------------------------------

# OS specific support. $var _must_ be set to either true or false.

cygwin=false

darwin=false

os400=false

hpux=false

case "`uname`" in

CYGWIN*) cygwin=true;;

Darwin*) darwin=true;;

OS400*) os400=true;;

HP-UX*) hpux=true;;

esac

# resolve links - $0 may be a softlink

PRG="$0"

while [ -h "$PRG" ]; do

ls=`ls -ld "$PRG"`

link=`expr "$ls" : '.*-> \\(.*\\)$'`

if expr "$link" : '/.*' > /dev/null; then

PRG="$link"

else

PRG=`dirname "$PRG"`/"$link"

fi

done

# Get standard environment variables

PRGDIR=`dirname "$PRG"`

# Only set CATALINA_HOME if not already set

[ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd`

# Copy CATALINA_BASE from CATALINA_HOME if not already set

[ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME"

# Ensure that any user defined CLASSPATH variables are not used on startup,

# but allow them to be specified in setenv.sh, in rare case when it is needed.

CLASSPATH=

if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then

. "$CATALINA_BASE/bin/setenv.sh"

elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then

. "$CATALINA_HOME/bin/setenv.sh"

fi

# For Cygwin, ensure paths are in UNIX format before anything is touched

if $cygwin; then

[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`

[ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"`

[ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"`

[ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"`

[ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"`

fi

# Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon

# as this is used as the separator in the classpath and Java provides no

# mechanism for escaping if the same character appears in the path.

case $CATALINA_HOME in

*:*) echo "Using CATALINA_HOME: $CATALINA_HOME";

echo "Unable to start as CATALINA_HOME contains a colon (:) character";

exit 1;

esac

case $CATALINA_BASE in

*:*) echo "Using CATALINA_BASE: $CATALINA_BASE";

echo "Unable to start as CATALINA_BASE contains a colon (:) character";

exit 1;

esac

# For OS400

if $os400; then

# Set job priority to standard for interactive (interactive - 6) by using

# the interactive priority - 6, the helper threads that respond to requests

# will be running at the same priority as interactive jobs.

COMMAND='chgjob job('$JOBNAME') runpty(6)'

system $COMMAND

# Enable multi threading

export QIBM_MULTI_THREADED=Y

fi

# Get standard Java environment variables

if $os400; then

# -r will Only work on the os400 if the files are:

# 1. owned by the user

# 2. owned by the PRIMARY group of the user

# this will not work if the user belongs in secondary groups

. "$CATALINA_HOME"/bin/setclasspath.sh

else

if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then

. "$CATALINA_HOME"/bin/setclasspath.sh

else

echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh"

echo "This file is needed to run this program"

exit 1

fi

fi

# Add on extra jar files to CLASSPATH

if [ ! -z "$CLASSPATH" ] ; then

CLASSPATH="$CLASSPATH":

fi

CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar

if [ -z "$CATALINA_OUT" ] ; then

CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out

fi

if [ -z "$CATALINA_TMPDIR" ] ; then

# Define the java.io.tmpdir to use for Catalina

CATALINA_TMPDIR="$CATALINA_BASE"/temp

fi

# Add tomcat-juli.jar to classpath

# tomcat-juli.jar can be over-ridden per instance

if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then

CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar

else

CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar

fi

# Bugzilla 37848: When no TTY is available, don't output to console

have_tty=0

if [ "`tty`" != "not a tty" ]; then

have_tty=1

fi

# For Cygwin, switch paths to Windows format before running java

if $cygwin; then

JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"`

JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"`

CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"`

CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"`

CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"`

CLASSPATH=`cygpath --path --windows "$CLASSPATH"`

JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"`

fi

if [ -z "$JSSE_OPTS" ] ; then

JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048"

fi

JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS"

# Register custom URL handlers

# Do this here so custom URL handles (specifically 'war:...') can be used in the security policy

JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources"

# Set juli LogManager config file if it is present and an override has not been issued

if [ -z "$LOGGING_CONFIG" ]; then

if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then

LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"

else

# Bugzilla 45585

LOGGING_CONFIG="-Dnop"

fi

fi

if [ -z "$LOGGING_MANAGER" ]; then

LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"

fi

# Uncomment the following line to make the umask available when using the

# org.apache.catalina.security.SecurityListener

#JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`"

if [ -z "$USE_NOHUP" ]; then

if $hpux; then

USE_NOHUP="true"

else

USE_NOHUP="false"

fi

fi

unset _NOHUP

if [ "$USE_NOHUP" = "true" ]; then

_NOHUP=nohup

fi

# ----- Execute The Requested Command -----------------------------------------

# Bugzilla 37848: only output this if we have a TTY

if [ $have_tty -eq 1 ]; then

echo "Using CATALINA_BASE: $CATALINA_BASE"

echo "Using CATALINA_HOME: $CATALINA_HOME"

echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR"

if [ "$1" = "debug" ] ; then

echo "Using JAVA_HOME: $JAVA_HOME"

else

echo "Using JRE_HOME: $JRE_HOME"

fi

echo "Using CLASSPATH: $CLASSPATH"

if [ ! -z "$CATALINA_PID" ]; then

echo "Using CATALINA_PID: $CATALINA_PID"

fi

fi

if [ "$1" = "jpda" ] ; then

if [ -z "$JPDA_TRANSPORT" ]; then

JPDA_TRANSPORT="dt_socket"

fi

if [ -z "$JPDA_ADDRESS" ]; then

JPDA_ADDRESS="localhost:8000"

fi

if [ -z "$JPDA_SUSPEND" ]; then

JPDA_SUSPEND="n"

fi

if [ -z "$JPDA_OPTS" ]; then

JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND"

fi

CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS"

shift

fi

if [ "$1" = "debug" ] ; then

if $os400; then

echo "Debug command not available on OS400"

exit 1

else

shift

if [ "$1" = "-security" ] ; then

if [ $have_tty -eq 1 ]; then

echo "Using Security Manager"

fi

shift

exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \\

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \\

-sourcepath "$CATALINA_HOME"/../../java \\

-Djava.security.manager \\

-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \\

-Dcatalina.base="$CATALINA_BASE" \\

-Dcatalina.home="$CATALINA_HOME" \\

-Djava.io.tmpdir="$CATALINA_TMPDIR" \\

org.apache.catalina.startup.Bootstrap "$@" start

else

exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \\

-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \\

-sourcepath "$CATALINA_HOME"/../../java \\

-Dcatalina.base="$CATALINA_BASE" \\

-Dcatalina.home="$CATALINA_HOME" \\

-Djava.io.tmpdir="$CATALINA_TMPDIR" \\

org.apache.catalina.startup.Bootstrap "$@" start

fi

fi

elif [ "$1" = "run" ]; then

shift

if [ "$1" = "-security" ] ; then

if [ $have_tty -eq 1 ]; then

echo "Using Security Manager"

fi

shift

eval exec "\\"$_RUNJAVA\\"" "\\"$LOGGING_CONFIG\\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \\

-Djava.endorsed.dirs="\\"$JAVA_ENDORSED_DIRS\\"" -classpath "\\"$CLASSPATH\\"" \\

-Djava.security.manager \\

-Djava.security.policy=="\\"$CATALINA_BASE/conf/catalina.policy\\"" \\

-Dcatalina.base="\\"$CATALINA_BASE\\"" \\

-Dcatalina.home="\\"$CATALINA_HOME\\"" \\

-Djava.io.tmpdir="\\"$CATALINA_TMPDIR\\"" \\

org.apache.catalina.startup.Bootstrap "$@" start

else

eval exec "\\"$_RUNJAVA\\"" "\\"$LOGGING_CONFIG\\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \\

-Djava.endorsed.dirs="\\"$JAVA_ENDORSED_DIRS\\"" -classpath "\\"$CLASSPATH\\"" \\

-Dcatalina.base="\\"$CATALINA_BASE\\"" \\

-Dcatalina.home="\\"$CATALINA_HOME\\"" \\

-Djava.io.tmpdir="\\"$CATALINA_TMPDIR\\"" \\

org.apache.catalina.startup.Bootstrap "$@" start \\

>> "$CATALINA_OUT" 2>&1

fi

fi

编写dockerfile(基于上面的tomcat镜像)

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22
# 基础镜像

FROM tomcat:1.0

# 创建项目目录和日志目录,这个是要在宿主机-v挂载的

RUN set -x \\

&&mkdir -p /Webs/logs \\

\\

&&rm -rf /usr/local/tomcat/logs \\

\\

&&ln -sf /Webs/logs /usr/local/tomcat/logs

# 将启动文件copy到容器

COPY start.sh /usr/local/tomcat/bin/

# 给容器的启动脚本权限

RUN chmod +x /usr/local/tomcat/bin/start.sh

# 开放8080端口

EXPOSE 8080

# 运行tomcat

CMD ["start.sh","run"]

创建镜像

?

1
[root@docker43 tomcat_web]# docker build -t tomcat_web:v1 .

查看镜像

?

1

2

3

4

5

6
[root@docker43 tomcat_web]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

tomcat_web v1 b3651c50a7b5 26 seconds ago 124 MB

tomcat 1.0 64c9cec4375d 6 minutes ago 124 MB

alpine_jre latest 614bc57ab66e 14 minutes ago 91.1 MB

docker.io/alpine latest 196d12cf6ab1 3 weeks ago 4.41 MB

3、创建容器

创建项目目录

我们是基于tomcat_web镜像进行创建容器的

首先我先在宿主机上创建个项目的目录(server.xml的配置文件拷贝改路径就能用)

?

1

2

3

4

5

6

7

8

9

10
[root@docker43 ~]# cd /home/

[root@docker43 home]# mkdir test.tomcat.com && cd test.tomcat.com

[root@docker43 test.tomcat.com]# touch server.xml # 配置文件

[root@docker43 test.tomcat.com]# mkdir logs # 日志目录

[root@docker43 test.tomcat.com]# mkdir wwwroot # 项目主目录(要是修改了记得也在server.xml进行修改)

[root@docker43 test.tomcat.com]# ll

总用量 0

drwxr-xr-x 2 root root 6 10月 6 18:03 logs

-rw-r--r-- 1 root root 0 10月 6 18:02 server.xml

drwxr-xr-x 2 root root 6 10月 6 18:03 wwwroot

server.xml配置文件

?

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
<?xml version='1.0' encoding='utf-8'?>

<Server port="8005" shutdown="SHUTDOWN">

<Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />

<GlobalNamingResources>

<Resource name="UserDatabase" auth="Container"

type="org.apache.catalina.UserDatabase"

description="User database that can be updated and saved"

factory="org.apache.catalina.users.MemoryUserDatabaseFactory"

pathname="conf/tomcat-users.xml" />

</GlobalNamingResources>

<Service name="Catalina">

<Connector port="8080" protocol="org.apache.coyote.http11.Http11AprProtocol"

connectionTimeout="20000"

maxThreads="1000"

minSpareThreads="100"

redirectPort="8443" URIEncoding="UTF-8"/>

<Connector port="8009" maxThreads="1000" minSpareThreads="100" protocol="AJP/1.3" redirectPort="8443" />

<Engine name="Catalina" defaultHost="localhost">

<Realm className="org.apache.catalina.realm.LockOutRealm">

<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>

</Realm>

<Host name="localhost" appBase="/Webs/wwwroot" unpackWARs="true" autoDeploy="true">

<Context path="" docBase="/Webs/wwwroot" reloadable="true" />

<Valve className="org.apache.catalina.valves.AccessLogValve"

directory="logs"

prefix="localhost__access_log"

suffix=".txt"

pattern="%{X-Real-IP}i %l %u %t &quot;%r&quot; %s %b" />

</Host>

</Engine>

</Service>

</Server>

编写测试页面

在wwwroot中编写个测试页面

?

1

2
[root@docker43 test.tomcat.com]# cd wwwroot/

[root@docker43 wwwroot]# cat index.html

成功了

创建并启动容器

复制代码 代码如下:

docker run -tid –restart=always –name test.tomcat.com -p 5081:8080 -v /home/test.tomcat.com/:/Webs -m 2048m –memory-swap=2048m –cpu-shares=256 tomcat_web:v1 start.sh run -config /Webs/server.xml

查看容器

?

1

2

3
[root@docker43 test.tomcat.com]# docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

ab62045e0688 tomcat_web:v1 "start.sh run -con..." 2 seconds ago Up 1 second 0.0.0.0:5081->8080/tcp test.tomcat.com

测试

?

1

2

3
[root@docker43 test.tomcat.com]# curl 127.0.0.1:5081

成功了

[root@docker43 test.tomcat.com]#

4、温馨提示

1、各位肯定会问我问什么要做这么多的镜像,我的回答是每个都独立出来 放在之后的私有仓库中,以后可以单独的使用

2、这篇文章的代码都完全的可以直接的复制粘贴使用,要注意的是根据自己的情况来修改Dockerfile的变量版本,还有就是项目的路径和创建容器的参数

3、我们在创建第二个项目的使用,完全可以重复的执行创建容器的步骤只是修改下项目目录的名字和容器的名字而已

4、也可以把上面的三个dockerfile文件合并创建镜像,但是不建议这样做

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持快网idc。

原文链接:http://www.cnblogs.com/zhujingzhi/p/9746760.html

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 行业资讯 基于alpine用dockerfile创建的tomcat镜像的实现 https://www.kuaiidc.com/67755.html

相关文章

发表评论
暂无评论