天天看點

【One by one系列】一步步學習docker(二)——實戰asp.net core web api

1.應用的建立與釋出

建立省略

釋出:

dotnet publish -o ../publish

2.拷貝

拷貝publish檔案夾至伺服器

app/netcore/test/publish/

2.建立DockerFile

# 拉取net core 3.1的鏡像
#FROM baseImage
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

# 指定鏡像作者
#LABEL key="value"
LABEL author="carfield"

# 複制主控端檔案夾至容器的檔案夾
#ADD source dest  ADD更強大 就不用COPY了
ADD  ./app/netcore/test/publish/ ./app/

# 工作目錄
#WORKDIR /the/workdir/path
WORKDIR /app

# 暴露端口
#EXPOSE port
EXPOSE 5000/tcp

# 指定容器挂載點到主控端自動生成的目錄
#VOLUME [ "/data" ]
VOLUME [ "/var/netcore/test" ]

# 容器啟動時執行此指令
#ENTRYPOINT [ "executable" ]
ENTRYPOINT [ "dotnet","app/docker-aspnetcore-webapi.dll" ]

           

ps:别忘了在伺服器上裝net core sdk

3.建構鏡像

docker build -t mywebapi -f Dockerfile .
           
【One by one系列】一步步學習docker(二)——實戰asp.net core web api
【One by one系列】一步步學習docker(二)——實戰asp.net core web api
  • 解決辦法:檔案一定在dockerfile的同級目錄下。否則會找不到引用的檔案。
  • 是以必須改變DockerFile檔案路徑,并修改DockerFile
    # 拉取net core 3.1的鏡像
    # FROM baseImage
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
    
    # 指定鏡像作者
    # LABEL key="value"
    LABEL author="carfield"
    
    # 複制主控端檔案夾至容器的檔案夾
    # ADD source dest  ADD更強大 就不用COPY了
    ADD publish/ app/
    
    # 工作目錄
    # WORKDIR /the/workdir/path linux下必須設定工作目錄
    # 否則會報錯:https://stackoverflow.com/questions/51598627/access-to-the-path-proc-1-map-files-is-denied-net-core-2-1-centos-7?r=SearchResults
    WORKDIR /app
    
    # 暴露端口
    # EXPOSE port
    EXPOSE 5000/tcp
    
    # 指定容器挂載點到主控端自動生成的目錄
    # VOLUME [ "/data" ]
    # VOLUME [ "/var/netcore/test" ]
    
    # 容器啟動時執行此指令
    # ENTRYPOINT [ "executable" ]
    ENTRYPOINT [ "dotnet","docker-aspnetcore-webapi.dll" ]
    
               
【One by one系列】一步步學習docker(二)——實戰asp.net core web api
【One by one系列】一步步學習docker(二)——實戰asp.net core web api

4.建立并啟動容器

前言:

docker run

指令是建立容器

docker create image-name

與啟動容器

docker start image-name

的結合

docker run --name netcore-sample -d -p 81:5000 mywebapi

5.問題

外網通路,http://主控端ip:81 你就是個坑貨,運作不起來,咋回事?端口沒開,iptables 增加81端口

vim vim /etc/sysconfig/iptables

# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 81 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 23 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

           

重新開機防火牆

systemctl restart iptables.service

【One by one系列】一步步學習docker(二)——實戰asp.net core web api

還是不行。

然後經過一系列的折騰,還是不對!?中間還出了幾次問題!見參考資料。

經過重新建立容器 發現了問題

删除容器:

docker rm -f netcore-sample

建立容器(非背景):

docker run --name netcore-sample -p 81:5000 mywebapi

【One by one系列】一步步學習docker(二)——實戰asp.net core web api

看到了嗎?看到了嗎?到了docker容器内部,啟動的是80端口,郁不郁悶,傷不傷心?

原來:aspnetcore 鏡像的 DockerFile中通過

ASPNETCORE_URLS

環境變量指定了 80 端口

要麼就預設容器80

當然你想修改也可以:

# 拉取net core 3.1的鏡像
# FROM baseImage
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1

# 指定鏡像作者
# LABEL key="value"
LABEL author="carfield"

# 複制主控端檔案夾至容器的檔案夾
# ADD source dest  ADD更強大 就不用COPY了
ADD publish/ app/

# 工作目錄
# WORKDIR /the/workdir/path
WORKDIR /app

# 修改預設80至5000端口
ENV ASPNETCORE_URLS http://+:5000

# 暴露端口
# EXPOSE port
EXPOSE 5000/tcp

# 指定容器挂載點到主控端自動生成的目錄
# VOLUME [ "/data" ]
# VOLUME [ "/var/netcore/test" ]

# 容器啟動時執行此指令
# ENTRYPOINT [ "executable" ]
ENTRYPOINT [ "dotnet","docker-aspnetcore-webapi.dll" ]

           
【One by one系列】一步步學習docker(二)——實戰asp.net core web api

完結,多多少少的坑還是不少,計算機果然是一門實踐的學科。。

參考資料

https://www.cnblogs.com/ycyzharry/p/10337314.html -iptables

https://www.cnblogs.com/hailun1987/p/7518306.html

https://q.cnblogs.com/q/106279/

http://s0docs0docker0com.icopy.site/network/iptables/

https://docs.docker.com/network/iptables/

https://www.cnblogs.com/t-road/p/11131818.html

作者:Garfield

同步更新至個人部落格:http://www.randyfield.cn/

本文版權歸作者所有,未經許可禁止轉載,否則保留追究法律責任的權利,若有需要請聯系[email protected]

微信公衆号

掃描下方二維碼關注個人微信公衆号,實時擷取更多幹貨

【One by one系列】一步步學習docker(二)——實戰asp.net core web api

同步更新至:http://www.randyfield.cn/

出處:http://www.cnblogs.com/RandyField/

本文版權歸作者和部落格園共有,未經許可禁止轉載,否則保留追究法律責任的權利,若有需要請聯系[email protected].