dockerfile自定义webserver容器jdk8+tomcat7+nginx1.17+redis5

编程

FROM centos:centos7
MAINTAINER xiaohong

LABEL name="hfw webserver Image"
    build-date="2020-04-18"
    detail="centos7+jdk8+tomcat7+nginx1.17+redis5"

ADD jdk-8u221-linux-x64.tar.gz /home/webserver/
ADD apache-tomcat-7.0.96 /home/webserver/apache-tomcat-7.0.96
ADD pcre-8.35.tar.gz /home/webserver/
ADD nginx-1.17.0.tar.gz /home/webserver/
ADD redis-5.0.8.tar.gz /home/webserver/

ENV JAVA_HOME /home/webserver/jdk1.8.0_221
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /home/webserver/apache-tomcat-7.0.96/
ENV CATALINA_BASE /home/webserver/apache-tomcat-7.0.96/
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

RUN yum -y install make zlib zlib-devel gcc-c++ libtool  openssl openssl-devel
RUN cd /home/webserver/pcre-8.35 && ./configure && make && make install

RUN cd /home/webserver/nginx-1.17.0
    && ./configure --prefix=/home/webserver/nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/home/webserver/pcre-8.35
    && make && make install
RUN /usr/sbin/groupadd nginx
RUN /usr/sbin/useradd -g nginx nginx

RUN cd /home/webserver/redis-5.0.8
    && make && make PREFIX=/home/webserver/redis install
COPY redis.conf /home/webserver/redis/

RUN rm -rf /home/webserver/jdk-8u221-linux-x64.tar.gz /home/webserver/pcre-8.35.tar.gz /home/webserver/nginx-1.17.0.tar.gz /home/webserver/redis-5.0.8.tar.gz
RUN rm -rf /home/webserver/pcre-8.35 /home/webserver/nginx-1.17.0 /home/webserver/redis-5.0.8

EXPOSE 80
EXPOSE 8080
EXPOSE 6379

CMD ["/bin/bash"]

构建镜像
docker build -f DockerFile -t hfw/webserver:1.0 .

运行一个容器并拷贝容器目录到宿主机,之后删除容器
docker run -dit hfw/webserver:1.0
docker ps
docker cp a066c2124328:/home/webserver /home
docker rm -f a066c2124328

运行一个新的容器并挂载拷贝的目录
docker run -dit --privileged=true -p 8080:8080 -p 80:80 -v /home/webserver:/home/webserver hfw/webserver:1.0

注意
yum 出现错误 dockerfile Failed to download metadata for repo "AppStream"
记得关闭防火墙
    systemctl stop firewalld.service
    systemctl status firewalld.service
    systemctl disable firewalld.service
    
docker容器启动后马上退出解决方案
    Docker容器同时只能管理一个进程,如果这个进程退出那么容器也就退出了,但这不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须有一个前台执行的进程。
    脚本中最后一个进程一定要用前台运行方式即在进程最后不加&(&表示后台运行),否则容器会退出。

CMD ["/home/webserver/start.sh"] 的应用
touch start.sh
chmod a+x start.sh #使start.sh具有可执行权限,不然可能会报错standard_init_linux.go:211: exec user process
内容编辑如下
#!/bin/bash
/home/webserver/apache-tomcat-7.0.96/bin/startup.sh
/home/webserver/nginx/sbin/nginx
/home/webserver/redis/bin/redis-server /home/webserver/redis/redis.conf
/bin/bash

以上是 dockerfile自定义webserver容器jdk8+tomcat7+nginx1.17+redis5 的全部内容, 来源链接: utcz.com/z/515622.html

回到顶部