Dockerfile中利用alpine创建tomcat镜像

为什么要使用alpine作为基源创建镜像呢,因为在alpine基源的基础上创建的镜像非容小的,比Centos|ubuntu作为基源创建的镜像小了差不多200M。 

在编写Dockerfile之前,先了一下,创建Tomcat镜像需要什么?

1、当然是tomcat软件了,这可以在apache官网下载 https://tomcat.apache.org/download-90.cgi,在这里我们下载保存到/data/dockerfiles里面,因为后面我们的Dockerfile文件就存放在这里,或在Docker中直接使用wget下载(但是每次创建镜像都需要下载一次,所以个人推荐预先下载好,不用每次创建都下载)。

wget -O apache-tomcat-9.0.65.tar.gz https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.65/bin/apache-tomcat-9.0.65.tar.gz

2、因为Tomcat9的服务需要jdk8及以上,所以在这里我们下载jdk8, 和tomcat一样,我们这里都预先下载存放在/data/dockerfiles下,下载地址在下面

https://download.java.net/openjdk/jdk8u42/ri/openjdk-8u42-b03-linux-x64-14_jul_2022.tar.gz

3、两个软件包都装备好之后,我们就可以开干了,代码如下:

FROM alpine:latest

LABEL MAITAINER 草木本心<188czy@163.com>

ENV CATALINA_HOME=/usr/local/tomcat
ENV JAVA_HOME=/usr/local/java
ENV PATH=$CATALINA_HOME:$JAVA_HOME/bin:$PATH

RUN mkdir /source

ADD apache-tomcat-9.0.65.tar.gz /source
ADD openjdk-8u42.tar.gz /source

RUN mv /source/apache* $CATALINA_HOME && \
mv /source/java* $JAVA_HOME && rm -rf /source WORKDIR $CATALINA_HOME RUN ln -sf /dev/stdout $CATALINA_HOME/logs/access.log && \
ln -sf /dev/stderr $CATALINA_HOME/logs/error.log EXPOSE 8080 CMD ["./bin/catalina.sh","run"]

 就这样,一个简单的Dockerfile文件就创建好了,执行创建镜像:docker build . -t tomcat:alpine-v0.0.1 ,执行完创建后,我们可以执行docker images,这时我们可以看到刚刚创建的tomcat:alpine-v0.0.1镜像,这时你心情那叫一个爽啊,觉得Dockerfile也就那么一回事,可是当你执行docker run -it tomcat:alpine-v0.0.1 sh 创建容器时并想进入容器时,你会得到下面如图的提示,蒙B了吗,这什么情况,为什么java找不到,不要急,我们在alpinelinux官网上查找到关于这问题的解释,说java 是依赖于一个叫glibc的库。

  

 知道问题出在哪里就好了,我们在Dockerfile中添加glibc安装就好了

RUN apk --no-cache add ca-certificates && \
wget -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget -O /source/glibc-2.29-r0.apk https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk && \
apk add /source/glibc-2.29-r0.apk

当你修改完Dockerfile后,执行时构建镜像时,你会发现由于源的问题安装失败, 因为国外的源问题,国内经常会碰这种问题,既然是源的问题,那咱就更换一个国内的吧,更换国内较快的阿里吧,于是再修改

RUN wget -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.29-r0/glibc-2.29-r0.apk && \
sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \
apk --no-cache add ca-certificates && \
apk add glibc-2.29-r0.apk

代码修改好了(注:&&两边只能一个空格,而且\的下一行必需顶格,即两个命令之间的&&两边都有且只有一个空格,否则会出现各种错误),再执行构建镜像,出现如下画面,就说明Dockerfile OK了。

 

这时就可以利用这个镜像创建容器了。

 

posted @ 2022-08-11 10:50  草木本心  阅读(349)  评论(0编辑  收藏  举报