由於要將平臺和應用Docker化,須要測試並選擇部署工具及方式。html
頁面部署:
Nginx;Jexus;Jexus獨立版;linux
.Net相關(MVC、API、exe)部署:
Mono + Nginx;Mono + Jexus;Mono + Jexus獨立版;nginx
說明:Jexus獨立版是指將Mono的RunTime集成進來的Jexus,聽說使用上跟Mono + Jexus差很少。
接下來新建文件夾:web
sudo mkdir /opt/webapi && cd /opt/webapi
點擊下載打包好的demo文件;
文件中的web mvc api
文件夾分別用於存放要部署的三類demo文件。docker
點擊下載打包好的Dockerfile和腳本文件;
文件中的jexus nginx jexus-mono mono-jexus mono-jexus-mono mono-nginx
文件夾分別存放了構建鏡像的Dockerfile文件和一些構建鏡像的腳本以及容器啓停的腳本,以避免測試過程當中老是重複輸入一些指令或上下翻找這些重複的指令。apache
注意:這些文件夾要放到同一路徑下,由於容器的啓動腳本中使用了相對路徑,這裏我放到了新建的文件夾webapi下面,即/opt/webapi
路徑下。web mvc api
文件夾下放的都是要部署的demo文件,這裏就不貼出來了。bootstrap
官方網站ubuntu
Dockerfileapi
FROM debian:jessie MAINTAINER Mongo <willem@xcloudbiz.com> RUN apt-get update \ && apt-get -y install wget \ && cd /usr \ && wget linuxdot.net/down/jexus-5.8.1.tar.gz \ && tar -zxvf jexus-5.8.1.tar.gz \ && ./jexus-5.8.1/install \ && rm -r jexus-5.8.1.tar.gz jexus-5.8.1 \ && apt-get -y autoremove --purge wget \ && rm -rf /var/lib/apt/lists/* EXPOSE 80 WORKDIR /usr/jexus CMD /usr/jexus/jws start && tail -f
build.shbash
#!/bin/bash ./stop.sh docker build -t jexus/debian . docker rmi $(docker images | awk '$1 == "<none>" && $2 == "<none>" {print $3}')
start.sh
#!/bin/bash ./stop.sh EXPORT="11110" docker run -d -p $EXPORT:80 --name jexus-web -v $(pwd)/../web:/var/www/default --restart always jexus/debian:latest echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "Please use the browser to access this address => http://"ip[1]":""'"$EXPORT"'"}' echo
stop.sh
#!/bin/bash docker rm -f jexus-web
Dockerfile
FROM debian:jessie MAINTAINER Mongo <willem@xcloudbiz.com> RUN apt-get update \ && apt-get -y install wget \ && cd /usr \ && wget linuxdot.net/down/jexus-5.8.1-x64.tar.gz \ && tar -zxvf jexus-5.8.1-x64.tar.gz \ && rm -r jexus-5.8.1-x64.tar.gz \ && apt-get -y autoremove --purge wget \ && rm -rf /var/lib/apt/lists/* EXPOSE 80 WORKDIR /usr/jexus CMD /usr/jexus/jwss
build.sh
#!/bin/bash ./stop.sh docker build -t jexus/mono:debian . docker rmi $(docker images | awk '$1 == "<none>" && $2 == "<none>" {print $3}')
start.sh
#!/bin/bash ./stop.sh webport="11120" mvcport="11122" apiport="11124" docker run -d -p $webport:80 --name jexus-mono-web -v $(pwd)/../web:/var/www/default --restart always jexus/mono:debian docker run -d -p $mvcport:80 --name jexus-mono-mvc -v $(pwd)/../mvc:/var/www/default --restart always jexus/mono:debian docker run -d -p $apiport:80 --name jexus-mono-api -v $(pwd)/../api:/var/www/default --restart always jexus/mono:debian echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "(OK)WEB - Please use the browser to access this address => http://"ip[1]":""'"$webport"'"}' echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "MVC - Please use the browser to access this address => http://"ip[1]":""'"$mvcport"'"}' echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "API - Please use the browser to access this address => http://"ip[1]":""'"$apiport"'"}' echo
stop.sh
#!/bin/bash docker rm -f jexus-mono-web jexus-mono-api jexus-mono-mvc
官方網站 ; Nginx中文文檔 ; nginx官方鏡像及使用說明
Dockerfile(官方)
FROM debian:jessie MAINTAINER NGINX Docker Maintainers "docker-maint@nginx.com" ENV NGINX_VERSION 1.11.1-1~jessie RUN apt-key adv --keyserver hkp://pgp.mit.edu:80 --recv-keys 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 \ && echo "deb http://nginx.org/packages/mainline/debian/ jessie nginx" >> /etc/apt/sources.list \ && apt-get update \ && apt-get install --no-install-recommends --no-install-suggests -y \ ca-certificates \ nginx=${NGINX_VERSION} \ nginx-module-xslt \ nginx-module-geoip \ nginx-module-image-filter \ nginx-module-perl \ nginx-module-njs \ gettext-base \ && rm -rf /var/lib/apt/lists/* # forward request and error logs to docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log \ && ln -sf /dev/stderr /var/log/nginx/error.log EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"]
start.sh
#!/bin/bash ./stop.sh webport="11160" # OK docker run -d -p $webport:80 --name nginx-web -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf -v $(pwd)/../web:/usr/share/nginx/html --restart always nginx:latest echo " " ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "(OK)WEB - Please use the browser to access this address => http://"ip[1]":""'"$webport"'"}'
stop.sh
#!/bin/bash docker rm -f nginx-web
官方網站 ; Mono-Wiki ; DockerHub-Mono
Dockerfile(官方)
FROM debian:wheezy MAINTAINER Jo Shields <jo.shields@xamarin.com> #based on dockerfile by Michael Friis <friism@gmail.com> RUN apt-get update \ && apt-get install -y curl \ && rm -rf /var/lib/apt/lists/* RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF RUN echo "deb http://download.mono-project.com/repo/debian wheezy/snapshots/4.4.0.182 main" > /etc/apt/sources.list.d/mono-xamarin.list \ && apt-get update \ && apt-get install -y mono-devel ca-certificates-mono fsharp mono-vbnc nuget referenceassemblies-pcl \ && rm -rf /var/lib/apt/lists/*
start.sh
#!/bin/bash ./stop.sh path="/usr/src/app/source" cmd="mono ./example.exe" cname="mono-official-exe" docker run -d -v $(pwd)/../exe:$path -w $path --name $cname mono:latest $cmd docker logs -f $cname
stop.sh
#!/bin/bash docker rm -f mono-official-exe
DockerHub-seif/mono ; 須要說明的是Mono的官方鏡像也是seif在更新維護的,另外他還上傳了其餘Mono的相關鏡像:seif/mono-nginx ; seif/docker-mono-fastcgi-nginx (就是下面用到的mono/nginx) ; seif/mono-apache ; seif/mono-runit ;
FROM debian MAINTAINER Seif Attar <docker@seifattar.net> RUN apt-get update \ && apt-get install wget -y --no-install-recommends \ && echo "deb http://download.mono-project.com/repo/debian wheezy/snapshots/4.0.0 main" > /etc/apt/sources.list.d/mono-xamarin.list \ && wget -qO - http://download.mono-project.com/repo/xamarin.gpg | apt-key add - \ && apt-get update \ && apt-get install mono-runtime -y --no-install-recommends \ && apt-get purge wget -y \ && apt-get autoremove -y \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /var/tmp/*
start.sh
#!/bin/bash ./stop.sh path="/usr/src/app/source" cmd="mono ./example.exe" cname="mono-seif-exe" docker run -d -v $(pwd)/../exe:$path -w $path --name $cname mono:latest $cmd docker logs -f $cname
stop.sh
docker rm -f mono-seif-exe
Dockerfile
FROM mono:latest MAINTAINER Mongo <willem@xcloudbiz.com> RUN apt-get update \ && apt-get -y install wget \ && cd /usr \ && wget linuxdot.net/down/jexus-5.8.1.tar.gz \ && tar -zxvf jexus-5.8.1.tar.gz \ && ./jexus-5.8.1/install \ && rm -r jexus-5.8.1.tar.gz jexus-5.8.1 \ && apt-get -y autoremove --purge wget \ && rm -rf /var/lib/apt/lists/* EXPOSE 80 WORKDIR /usr/jexus CMD /usr/jexus/jws start && tail -f
build.sh
#!/bin/bash ./stop.sh docker build -t mono/jexus . docker rmi $(docker images | awk '$1 == "<none>" && $2 == "<none>" {print $3}')
start.sh
#!/bin/bash ./stop.sh mvcport="11132" apiport="11134" tiport="11136" docker run -d -p $mvcport:80 --name mono-jexus-mvc -v $(pwd)/../mvc:/var/www/default mono/jexus docker run -d -p $apiport:80 --name mono-jexus-api -v $(pwd)/../api:/var/www/default mono/jexus echo " " ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "MVC - Please use the browser to access this address => http://"ip[1]":""'"$mvcport"'"}' echo " " ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "API - Please use the browser to access this address => http://"ip[1]":""'"$apiport"'"}' echo " " ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "(OK)MVC-tiMode - Please use the browser to access this address => http://"ip[1]":""'"$tiport"'"}' echo " " # OK docker run --rm -ti -p $tiport:80 --name jexus-mono-mvc-ti -v $(pwd)/../mvc:/var/www/default mono/jexus
stop.sh
#!/bin/bash docker rm -f mono-jexus-mvc mono-jexus-api
Dockerfile
FROM mono:latest MAINTAINER Mongo <willem@xingyuntech.com> RUN apt-get update \ && apt-get -y install wget \ && cd /usr \ && wget linuxdot.net/down/jexus-5.8.1-x64.tar.gz \ && tar -zxvf jexus-5.8.1-x64.tar.gz \ && apt-get -y autoremove --purge wget \ && rm -rf jexus-5.8.1-x64.tar.gz /var/lib/apt/lists/* # COPY default /usr/jexus/siteconf/default EXPOSE 80 WORKDIR /usr/jexus CMD /usr/jexus/jwss
build.sh
#!/bin/bash ./stop.sh docker build -t mono/jexus:mono . docker rmi $(docker images | awk '$1 == "<none>" && $2 == "<none>" {print $3}')
start.sh
#!/bin/bash ./stop.sh mvcport="11142" apiport="11144" tiport="11146" docker run -d -p $mvcport:80 --name mono-jexus-mono-mvc -v $(pwd)/../mvc:/var/www/default mono/jexus:mono docker run -d -p $apiport:80 --name mono-jexus-mono-api -v $(pwd)/../api:/var/www/default mono/jexus:mono echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "MVC - Please use the browser to access this address => http://"ip[1]":""'"$mvcport"'"}' echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "API - Please use the browser to access this address => http://"ip[1]":""'"$apiport"'"}' echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "tiMode - Please use the browser to access this address => http://"ip[1]":""'"$tiport"'"}' echo docker run --rm -ti -p $tiport:80 -v $(pwd)/../api:/var/www/default mono/jexus:mono
stop.sh
#!/bin/bash docker rm -f mono-jexus-mono-mvc mono-jexus-mono-api
FROM seif/mono MAINTAINER Seif Attar <iam@seifattar.net> ADD service/ /etc/service/ ADD config/runit/1 /etc/runit/1 ADD config/runit/1.d/cleanup-pids /etc/runit/1.d/cleanup-pids ADD config/runit/2 /etc/runit/2 ADD runit_bootstrap /usr/sbin/runit_bootstrap RUN echo "deb http://download.mono-project.com/repo/debian wheezy-libjpeg62-compat main" | tee -a /etc/apt/sources.list.d/mono-xamarin.list \ && apt-get update \ && apt-get install runit nginx mono-fastcgi-server4 -y --no-install-recommends \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /var/tmp/* /tmp/* \ && mkdir -p /etc/mono/registry /etc/mono/registry/LocalMachine \ && find /etc/service/ -name run -exec chmod u+x {} \; \ && chmod u+x /usr/sbin/runit_bootstrap; ADD config/default /etc/nginx/sites-available/ ADD config/fastcgi_params /etc/nginx/ ADD runit_bootstrap /usr/sbin/runit_bootstrap EXPOSE 80
start.sh
#!/bin/bash ./stop.sh mvcport="11152" apiport="11154" path="/var/www:ro" image="--restart always mono/nginx:latest" cmd="/usr/sbin/runit_bootstrap" docker run -d -p $mvcport:80 -v $(pwd)/../mvc:$path --name mono-nginx-mvc $image $cmd docker run -d -p $apiport:80 -v $(pwd)/../api:$path --name mono-nginx-api $image $cmd echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "MVC - Please use the browser to access this address => http://"ip[1]":""'"$mvcport"'"}' echo ip addr show eth1 | awk '$1 == "inet" {split($2,ip,"/");print "API - Please use the browser to access this address => http://"ip[1]":""'"$apiport"'"}' echo
stop.sh
#!/bin/bash docker rm -f mono-nginx-mvc mono-nginx-api
鏡像大小:
REPOSITORY TAG SIZE DESCRIPTION mono/jexus latest 637.2 MB FROM mono,install jexus jexus/mono debian 170.8 MB FROM debian,install jexus with mono runtime jexus/debian latest 127.2 MB FROM debian,install jexus mono/jexus mono 674.3 MB FROM mono,install jexus with mono runtime nginx latest 182.6 MB FROM debian,install nginx(official) mono/nginx latest 480.9 MB FROM seif/mono,install nginx mono(official) latest 628.6 MB FROM debian:wheezy,install mono 4.4.0.182 mono(seif/mono) latest 153.7 MB FROM debian,install mono 4.0
Web部署及訪問正常的方式:jexus-mono:debian
(-d
); nginx:latest
(-d
);
Exe部署運行正常的方式:mono(official)
(-d
) ; mono(seif/mono)
(-d
);
MVC部署及訪問正常的方式:mono-jexus:latest
(-ti
);mono-nginx(fastcgi)
(-d
);
API部署及訪問正常的方式: