docker如何在一个容器内部署多个服务
原因是,我有一个springBoot服务需要写入httpd的目录,然后httpd提供链接给别人下载。之前的方法是,httpd和springBoot各一个容器,但是我们将镜像是部署在腾讯云上的,腾讯云会自动对每个容器分离不同的虚拟机,这样就导致,他们不能共享目录。所以只能写在一个容器内。
思路,首先拿到你的httpd,以及你的springBoot,合并他们的Dockerfile,然后打包,然后启动的时候启动多个端口(httpd的端口和你服务的端口)
0.创建一个文件夹,将之前的httpd以及springBoot放进去
mkdir dahua-houduan cp -r httpd/ dahua-houduan/ cp -r dahua/ dahua-houduan/
1.合并dockerfile
httpd原docker
FROM docker.io/centos:7
RUN echo "Asia/Shanghai" > /etc/timezone
RUN yum -y install httpd
RUN mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
COPY httpd/httpd.conf /etc/httpd/conf/httpd.conf
COPY run.sh /run.sh
RUN chmod 777 /run.sh
EXPOSE 9999
ENTRYPOINT [ "/run.sh" ]
说明
首先拉个镜像,然后下载httpd,然后改配置,运行sh脚本。
这里我们要取的是,都取 ,sh脚本等一会儿进行修改
springBoot原docker
FROM java:8
RUN echo "Asia/Shanghai" > /etc/timezone
EXPOSE 8087
COPY dahua/config /config
COPY dahua/logs /logs
COPY dahua/dahua-1.0.jar /dahua-spring.jar
COPY dahua/Dockerfile /Dokcerfile
ENTRYPOINT ["java","-jar","/dahua-spring.jar"]
说明
首先获取jdk环境,然后复制配置文件和日志,复制jar启动
这里我们获取的是,除最后1行的所有
合并说明
建立一个Dockerfile
注意from有个坑,如果有多个from只会保留最后一个from的内容
合并 dockerfile
FROM docker.io/centos:7
RUN echo "Asia/Shanghai" > /etc/timezone
RUN yum -y install httpd
RUN mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
COPY httpd/httpd.conf /etc/httpd/conf/httpd.conf
COPY httpd/run.sh /run.sh
RUN chmod 777 /run.sh
EXPOSE 9999FROM java:8
EXPOSE 8087
COPY dahua/config /config
COPY dahua/logs /logs
COPY dahua/dahua-1.0.jar /dahua-spring.jar
COPY dahua/Dockerfile /DokcerfileENTRYPOINT [ "/run.sh" ]
之前的centos系统会消失,因为一个容器是一个虚拟机,from一次就相当于产生一个新的虚拟机,而虚拟机本质只能有一个虚拟环境。
这里对上面红色的java8不进行from(删除jdk8),而是单独在centos7中单独部署jdk8
说明
jdk的安装就是把目录copy过去更新环境变量
dockerFile新增内容为
COPY jdk1.8 /jdk1.8.0_181
ENV JAVA_HOME=/jdk1.8.0_181
ENV PATH=$PATH:${JAVA_HOME}/bin
完整docker镜像
FROM docker.io/centos:7
RUN echo "Asia/Shanghai" > /etc/timezone
RUN yum -y install httpd
RUN mv /etc/httpd/conf.d/welcome.conf /etc/httpd/conf.d/welcome.conf.bak
COPY httpd/httpd.conf /etc/httpd/conf/httpd.conf
COPY httpd/run.sh /run.sh
RUN chmod 777 /run.sh
EXPOSE 9999
COPY jdk1.8 /jdk1.8.0_181
ENV JAVA_HOME=/jdk1.8.0_181
ENV PATH=$PATH:${JAVA_HOME}/binEXPOSE 8087
COPY dahua/config /config
COPY dahua/logs /logs
COPY dahua/dahua-1.0.jar /dahua-spring.jar
COPY dahua/Dockerfile /DokcerfileENTRYPOINT [ "/run.sh" ]
sh脚本修改
修改run.sh
#!/bin/bash
httpd
java -jar dahua-spring.jar
2.打包
docker build -t test1 .
3.启动
docker run -p 8087:8087 -p 9999:9999 test1
到此这篇关于docker一个容器内部署多个服务的文章就介绍到这了,更多相关docker多个服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
docker-compose管理容器network与ip问题
这篇文章主要介绍了docker-compose管理容器network与ip问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01Docker部署nginx+php环境的全过程(简单可用!)
最近在学docker,顺便配置了一下docker中的nginx与php,发现网上的关于docker中配置nginx与php的资料很少,而且有的也很旧,没有太多的参考性,下面这篇文章主要给大家介绍了关于Docker部署nginx+php环境的相关资料,需要的朋友可以参考下2023-02-02使用dockercompose搭建springboot-mysql-nginx应用
这篇文章主要介绍了使用dockercompose搭建springboot-mysql-nginx应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2019-03-03
最新评论