背景
ASP.NET应用要部署到Linux生产环境,我们一直使用Docker+Jexus。之前用的Jexus版本是v6.1,跑了一年多,非常非常稳定。
然而,最近升级到6.2,还是用回原来的套路去部署,但感觉就没有那么丝滑了。有人说,既然你说6.1“非常非常稳定”,何必折腾6.2,不是闲的蛋疼吗?好吧,顺便说一下,有不得不改用6.2的理由:
因为应用升级NewtonJson到12.03,Jexus v6.1自带的mono6.0并不支持,换成Jexus 6.2的mono 6.8才行。
OK,折腾升级的背景交代完了,那就开始动手吧。
实战
- 下载解压,这一步大家都很熟悉了,不用多说什么。
cd /tmp/
wget https://www.linuxdot.net/down/jexus-6.2.x-x64.tar.gz
tar -xf jexus-6.2.x-x64.tar.gz
- 编写Dockerfile
- 我们习惯用ubuntu作为操作系统,当然也可以换成是debian或者centos。
- 默认时区是UTC+0,所以国内服务器建议换成北京时间
- 弄了一个启动脚本init.sh (github上抄的),后面会把脚本代码贴出来
FROM ubuntu:18.04
MAINTAINER chenreal <chenreal@qq.com>
RUN apt-get update; apt-get -y upgrade; apt-get -y install tzdata
RUN rm /etc/localtime
RUN ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ADD /app /var
ADD init.sh /bin
RUN chmod +x /bin/init.sh; apt-get -y autoremove; apt-get -y autoclean; apt-get -y clean
COPY jexus /usr/jexus
EXPOSE 8080
WORKDIR /usr/jexus
ENTRYPOINT [\"/bin/init.sh\"]
- 启动脚本init.sh
#!/bin/bash
# Stop your services
function stop_svc {
/usr/jexus/jws stop >/dev/null 2>&1
service ssh stop >dev/null 2>&1
exit
}
# Set the SIGTREM signal response function
trap 'stop_svc' SIGTERM
# Start Your Services
#####################
service ssh start
/usr/jexus/jws start
# Waiting signal
####################
while true
do
sleep 2
done
结束
这样基本就搞定了,剩下的就是 docker build
和 docker run
的事情了。