Docker下的Nacos环境开发,mysql联合索引原理

本文介绍了如何在Docker环境下构建Nacos服务,使用基于alpine的Dockerfile,详细步骤包括下载Nacos安装包、解压、启动脚本设置等。同时探讨了Nacos启动时的进程管理问题,特别是如何防止容器启动后立即退出。此外,还展示了如何构建Java应用服务提供者和消费者的Docker镜像,这些应用利用了Spring Cloud Alibaba的Nacos Discovery功能。
摘要由CSDN通过智能技术生成

基础镜像,使用alpine操作系统,openjkd使用8u201

FROM openjdk:8u201-jdk-alpine3.9

#作者

MAINTAINER BolingCavalry zq2599@gmail.com

#系统编码

ENV LANG=C.UTF-8 LC_ALL=C.UTF-8

#path

ENV PATH /opt/conda/bin:$PATH

#安装必要的软件

#RUN apt-get update --fix-missing && apt-get install -y wget

RUN apk update && apk add wget

#下载下来的压缩文件名称

ENV NACOS_FILE_NAME nacos-server-1.1.0.tar.gz

#把启动时用到的文件准备好

COPY ./docker-entrypoint.sh /docker-entrypoint.sh

#解压后的文件夹名称

ENV NACOS_FOLDER_NAME nacos

RUN wget https://github.com/alibaba/nacos/releases/download/1.1.0/nacos-server-1.1.0.tar.gz -O ~/$NACOS_FILE_NAME && \

tar -zxf ~/$NACOS_FILE_NAME -C ~/ && \

rm ~/$NACOS_FILE_NAME && \

chmod a+x /docker-entrypoint.sh

ENTRYPOINT ["/docker-entrypoint.sh"]

EXPOSE 8848

从Dockerfile内容中可见,先去nacos的github下载安装包,然后解压,再复制docker-entrypoint.sh到镜像中,最后将nacos的8848端口暴露出来;

再来看看docker-entrypoint.sh文件的内容,该文件在容器启动时会被执行,内容很简单,就是进入nacos的bin目录,执行启动文件,再将start.out输出到控制台:

#!/bin/sh

echo "Starting nacos"n && \

cd ~/nacos/bin && \

./startup.sh -m standalone && \

cd …/logs && \

tail -f start.out

有两个重要信息需要注意:

  1. nacos的官方参考启动命令是./startup.sh -m standalone,这个命令会将jvm的输出重定向到start.out文件,也就是说nacos的JVM进程是在后台运行的,不会占用控制台(相比之下,spring boot应用使用java -jar启动时会占用控制台),对于docker来说,容器内的进程如果不占用控制台,docker就认为该容器已经结束工作,就会停止该容器,所以,为了避免nacos在docker刚刚启动就退出,需要用tail -f start.out来占领控制台;

  2. 用tail -f start.out来占领控制台可以避免容器刚刚启动就退出,但也有个弊端,就是容器中有了多个进程,并且nacos进程的PID不是1,所以在执行docker stop命令时,结束进程的信号量不会到nacos进程,而是去了PID等于1的进程,所以nacos进程不会立即退出,只能等到30秒后被强制kill,这个问题最好的解法是修改nacos的startup.sh,让nacos进程始终保持在控制台&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值