參考頁面:
http://www.yuanjiaocheng.net/ASPNET-CORE/core-middleware.html
http://www.yuanjiaocheng.net/ASPNET-CORE/core-exception.html
http://www.yuanjiaocheng.net/ASPNET-CORE/core-static-files.html
http://www.yuanjiaocheng.net/ASPNET-CORE/setup-mvc.html
http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html
前言 首先提一下微軟更名後的叫法:1、環境
這裡演示的Docker宿主機環境是CentOS7,下面介紹Docker在CentOS7上的安裝。在其他系統中安裝Docker,請查看Install Docker Engine 提示:CentOS在7中已經啟用firewalld作為新的防火牆,替換掉原先的iptables。而Docker對firewalld的兼容性雖然不太好,但對下面的例子運行中暫時沒發現有影響。2、安裝docker
首先查看CentOS的內核版本(CentOS7系統必須為64位,內核必須3.10及以上)
uname -r 3.10.0-229.el7.x86_64
更新已經安裝的包
sudo yum update
安裝docker
curl -fsSL https://get.docker.com/ | sh
啟動docker
sudo service docker start 或 systemctl start docker
運行docker hello world demo
sudo docker run hello-world
3、創建docker用戶組
此用戶組具備管理員權限,以後執行docker命令可以不加sudo(這裡只做演示,直接使用root) (1) 以帶有管理員權限的用戶登入控制台(2) sudo usermod -aG docker
your_username(你的用戶名)
4、 docker相關概念
container:容器,用來加載各種image,可以看成操作系統。加載各種app。允許多個容器同時運行,並且容器一般無法相互訪問宿主服務器資源,除非掛載數據卷volume之類的,數據卷的使用可以參照:http://my.oschina.net/guol/blog/271225)。容器中可以運行一些網絡應用,要讓外部也可以訪問這些應用,可以通過-P
或 -p
參數來指定端口映射。
image:鏡像文件,可以當成app運行在container中,image有一個Dockerfile文件,保存折生成自身image時要執行的命令。
docker images //顯示所有鏡像文件 docker ps -q -a //顯示所有容器 docker run -it --name dn_container -d -p 5000:5000 microsoft/dotnet:latest //新增一個容器用於加載 microsoft/dotnet:latest鏡像文件,-p host port:container port docker run -it --name dn_container -d -p 127.0.0.1:5000:5000 microsoft/dotnet:latest docker start dn_container //啟動容器 docker attach dn_container //關聯並進入啟動容器,需要先啟動容器 docker stop dn_container //停止容器 docker kill $(docker ps -a -q) //強制停止所有容器 docker rm $(docker ps -a -q) //刪除所有容器 doker commit ContainerID NewImageName //將容器裡的內容提交為新的鏡像文件 docker rmi -f 7d9495d03763 //刪除所有容器 //標記鏡像,push到Docker Hub docker images docker tag a66b7258f574 sobit17/sobit-dotnet:1.0.0-beta-002252 docker images docker login --username=test [email protected] docker push sobit17/sobit-dotnetdocker常用命令
5、制作HelloMvc image
在運行cli-samples的HelloMvc例子前,需要把HelloMvc打包成docker image文件。mkdir app cd app git clone https://github.com/aspnet/cli-samples.git cd cli-samples
需要顯式指定HelloMvc的端口(即使指定的是5000端口),目前嘗試過不加下面這段代碼,發現默認的5000並不起作用
5.2 在HelloMvc的當前目錄執行,並備好NuGet.config和Dockerfile文件 NuGet.config:讀取package下載的源地址(nuget seeds); Dockerfile:制作image必須; 5.2.1創建NuGet.config文件 可以從上級目錄cli-samples中拷貝一個NuGet.config到HelloMvc目錄中,如果沒有這個NuGet.config 在還原package時會默認到.nuget/NuGet/加載NuGet.config。因為源不對,會導致某些packeage下載不到。//拷貝命令 cp -p /root/app/cli-samples/NuGet.Config /root/app/cli-samples/HelloMvc/NuGet.Config5.2.2創建Dockerfile文件 在創建image時,.NET CLI Preview Docker Image提供了兩個基礎dotnet image用於繼承(裡面裝載的其實是部署了.NET Core的Ubuntu系統),區別在於它們的Dockerfile不同
FROM microsoft/dotnet:latest RUN mkdir -p /webapp COPY . /webapp WORKDIR /webapp RUN ["dotnet", "restore"] RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && sudo make install \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600 ENTRYPOINT ["dotnet", "run"]
(2)基於dotnet:0.0.1-alpha-onbuild
FROM microsoft/dotnet:0.0.1-alpha-onbuild RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && sudo make install \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600
5.2.3 檢測Dockerfile是否能正常使用
mkdir test cd test it clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore
查看是否報錯
清除測試文件
cd ~rm -r test
(2)解決方案
手工制作一個使用最新.NET Core SDK的dotnet image,也可以使用我已經做好的image sobit17/sobit-dotnet:1.0.0-beta-002252,當然如果沒報錯可以省略這一步,用回原來的dotnet image. 制作新的image這裡選用dotnet :0.0.1-alpha為原型,也可以使用dotnet: 0.0.1-alpha-onbuild 加載dotnet imagedocker run --name dotnet_container -it microsoft/dotnet:0.0.1-alpha
如果dotnet_container 未啟動,則執行下面命令啟動並關聯進入
docker start dotnet_container dokcer attach dotnet_container
查看.NET Core版本(dotnet image中使用的是Ubuntu14.04系統)
dotnet --version 或 dotnet --info
apt-get update wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-ubuntu-x64.latest.tar.gz tar -zxf dotnet-dev-ubuntu-x64.latest.tar.gz -C /usr/bin
或
apt-get update wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-ubuntu-x64.latest.tar.gz tar -zxf dotnet-dev-ubuntu-x64.latest.tar.gz ln -s /dn_new/dotnet /usr/bin/dotnet
接下來執行下面命令
dotnet --info //查看版本 exit //退出容器 docker images //查找dotnet_container 的ConrainerID docker commit 3a09b2588478(ContainerID) dotnet_new(new image name) //commit成一個新的image
至此base image制作完畢。
接下來只要修改HelloMvc的Dockerfile以指定這個新的image作為基礎鏡像FROM dotnet_new 或 sobit17/sobit-dotnet:1.0.0-beta-002252 RUN mkdir -p /webapp COPY . /webapp WORKDIR /webapp RUN ["dotnet", "restore"] ##備注:安裝libuv這一過程其實可以在制作dotnet_new鏡像時也安裝進去,就不需要下面這段【注釋在Dockerfile中需刪掉】 RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && sudo make install \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600 ENTRYPOINT ["dotnet", "run"]
所有把HelloMvc制作成image的資料已經准備完畢。
5.2.4 制作 HelloMvc image,當前目錄移動到HelloMvc中,執行下面命令(制作過程中可能會因為網絡問題報錯,可以重復執行下面這個命令直到成功就可以了)docker build -t hellomvc-image . //記得命令最後有'.'
1、環境
這裡演示的環境是CentOS7,64bit2、安裝.NET Core SDK
sudo yum updatemkdir dn_cli cd dn_cli wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Binaries/Latest/dotnet-dev-centos-x64.latest.tar.gz tar -zxf dotnet-dev-centos-x64.latest.tar.gz
嘗試執行命令:. /dotnet
提示錯誤:
Failed to load /root/dotnet/bin/libcoreclr.so, error: libunwind.so.8: cannot open shared object file: No such file or directory
解決方法:
yum install -y libunwind
嘗試執行命令:. /dotnet
提示錯誤:
Failed to initialize CoreCLR, HRESULT: 0x80131500
解決方法:
yum install -y icu
嘗試執行命令:. /dotnet --info,正常。
永久保存環境變量
找到/etc/profile文件(當用戶第一次登錄時,該文件被執行.),在最後面添加:
PATH=~/dn_cli:$PATH export PATH 即時生效 source /etc/profile3、下載cli-samples的HelloMvc例子
cd ~
sudo yum -y install git mkdir app cd app git clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore cd HelloMvc
需要顯式指定HelloMvc的端口(即使指定的是5000端口),目前嘗試過不加下面這段代碼,發現默認的5000並不起作用
4、編譯運行HelloMvc
將執行命令的當前目錄定位到HelloMvc,並執行下面命令
dotnet run
三、在Ubuntu 14.04中運行
打開浏覽器 http://IP:5600(防火牆和查看網絡相關命令請查看本篇文章第四點)
1、安裝Ubuntu Installers
apt-get update
mkdir dn_cli cd dn_cli wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-host-ubuntu-x64.latest.deb wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-sharedframework-ubuntu-x64.latest.deb wget https://dotnetcli.blob.core.windows.net/dotnet/beta/Installers/Latest/dotnet-sdk-ubuntu-x64.latest.deb //安裝 dpkg -i dotnet-host-ubuntu-x64.latest.deb dpkg -i dotnet-sharedframework-ubuntu-x64.latest.deb dpkg -i dotnet-sdk-ubuntu-x64.latest.deb
//如果執行上述安裝語句後提示缺少依賴包,可以執行下面命令會自動補全依賴包,然後再重新執行報錯的安裝語句
apt-get -f install
2、下載cli-samples的HelloMvc例子
cd ~
apt-get -y install git mkdir app cd app git clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore cd HelloMvc
需要顯式指定HelloMvc的端口(即使指定的是5000端口),目前嘗試過不加下面這段代碼,發現默認的5000並不起作用
3、編譯運行HelloMvc
dotnet run
打開浏覽器 http://IP:5600(防火牆和查看網絡相關命令請查看本篇文章第四點)
systemctl status firewalld或firewalld.service ##查看firewalld是否啟動。active(running)代表啟動 systemctl start firewalld ##如果firewalld沒啟動,可以使用此命令啟動 systemctl enable firewalld ##設置為隨機器啟動 systemctl stop firewalld ##關閉firewalld systemctl disable firewalld ##清除隨機器啟動 systemctl restart firewalld ##重啟firewalldView Code
2、防火牆firewalld常用命令
firewall-cmd --state ##查看防火牆狀態,是否是running firewall-cmd --list-all ##查看所有規則 firewall-cmd --reload ##重新載入配置,比如添加規則之後,需要執行此命令 firewall-cmd --get-zones ##列出支持的zone firewall-cmd --get-services##列出支持的服務,在列表中的服務是放行的 firewall-cmd --query-service ftp##查看ftp服務是否支持,返回yes或者no firewall-cmd --add-service=ftp ##臨時開放ftp服務 firewall-cmd --add-service=ftp --permanent##永久開放ftp服務 firewall-cmd --add-service=http --permanent##永久開放http服務 firewall-cmd --remove-service=ftp --permanent##永久移除ftp服務 firewall-cmd --add-port=80/tcp --permanent ##永久添加80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent ##--zone #作用域View Code
3、防火牆iptables常用命令
iptables -L -n --line-number #查看防火牆的規則鏈 iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT iptables -I INPUT -d 172.16.100.1 -p tcp --dport 22 -m state --state NEW -j ACCEPT iptables -A INPUT -i lo -j ACCEPT #測試不加此條會導致mysql在內部無法連接 查看/etc/sysconfig/iptables文件(記錄著防火牆的規則鏈) 如果沒有這個文件,請執行下面命令保存 iptables-save > /etc/sysconfig/iptables 查看保存後的規則 cat /etc/sysconfig/iptablesView Code
4、部分網絡端口查詢命令
netstat -tunlp -a # 查看所有網絡端口情況 netstat -l -n #查看監聽(Listen)的端口,-n 代表顯示端口數字而不是名稱 netstat -antp #查看所有建立的TCP連接View Code
相關資料:
作者:B.it
出處:http://www.cnblogs.com/ImBit/p/5375577.html
本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接。