因近期項目出現短暫的空檔期,所以學習了一下.Net 6框架部署到Docker中,踩了不少坑,僅以此記錄,希望可以幫到同行。
因爲我也是這塊的初學者,參考了一些其他大佬的文檔(https://www.cnblogs.com/leonliuo/p/16356494.html),若文章中出現冒犯的煩請聯繫我,我儘快處理,同時裏面有一些命令我暫時也說描述不出來,後期慢慢補充,勿噴。
一、環境和版本
1、Linux
2、Docker
3、遠程鏈接使用powershell ssh
輸入密碼時,密碼不會顯示,輸入完成直接回車進入遠程服務器
4、文件上傳工具(winSCP)-xftp
二、安裝依賴包
1、依賴包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2、設置阿里雲鏡像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3、安裝Docker-CE(Docker Community Edition)屬於社區免費版,屬於Docker引擎
sudo yum install docker-ce
三、Docker使用
1、啓用、停止
sudo systemctl enable docker –開機啓動
sudo systemctl start docker-啓用服務
systemctl stop docker 停止docker服務
2、爲 Docker 建立用戶組
docker 命令與 Docker 引擎通訊之間通過 UnixSocket ,但是能夠有權限訪問 UnixSocket 的用戶只有 root 和 docker 用戶組的用戶才能夠進行訪問,所以我們需要建立一個 docker 用戶組,並且將需要訪問 docker 的用戶添加到這一個用戶組當中來。
1. 建立 Docker 用戶組
sudo groupadd docker
2. 添加當前用戶到 docker 組
sudo usermod -aG docker $USER
3、構建Docker鏡像和容器
鏡像:sudo docker build -t mydockertest .(需要注意切換到項目目錄下面:cd /文件夾名稱)
查看鏡像:docker images
容器:docker run --name webapitest -p 9000(外部端口):9000(容器內部端口) mydockertest
注意事項:因vs在建立項目時會默認端口號,所以我們需要在Program.cs中處理一點代碼,用於指定端口,並且此端口需要和dockerfile端口以及容器內部端口保持一致
查看容器: docker ps -a
啓動容器:docker start 容器ID
容器若啓用正常:可使用curl ip:端口訪問地址
四、Docker常用命令
docker ps --查看目前正在運行的所有容器 -a 顯示包括已經停止的容器
docker pull --拉取鏡像
docker rmi --刪除鏡像 後面可以直接根據鏡像 名稱或者tag 前首字母匹配
docker start container_id --打開容器 (這裏可以是容器id或名稱)
#刪除單個鏡像
docker rmi -f <鏡像id>
docker stop container_id --停止容器 (這裏可以是容器id或名稱)
docker rm --刪除容器(只有停止的容器纔可以刪除)
docker build --使用 Dockerfile 創建鏡像
docker exec --容器中執行命令,例如:docker exec -it container_id(容器名或id) /bin/bash (bin/bash要執行的命令或工具)
docker logs --查看 容器日誌 ,例如:docker logs -f -t --tail 10 container_id (容器名或id)
四、Linux和iptables相關
因爲在使用過程中需要配置Linux相關關鍵和iptables相關設置,所以涉及到一些命令
1、Linux
查看端口是否被佔用
netstat -tunlp | grep 9000
顯示所有端口和進程
netstat -anp | grep 8080
netstat -ntlp | grep 8080
查看防火牆狀態
firewall-cmd --state
停止防火牆
systemctl-cmd stop firewalld
2、iptables
保存防火牆規則:iptables-save >/opt/iptables.bak
清除防火牆規則:iptables -F ; iptables -F -t nat ;
恢復防火牆規則:iptables-restore</opt/iptables.bak
指向:iptables -L
啓用端口
iptables -AINPUT -ptcp --dport 8080-jACCEPT
清空規則
iptables –F
查看所有規則
iptables –nL
docker固定容器ip設置net爲none(此處是由於雲服務器端口無法使用,可執行此命令)
iptables -t nat -I PREROUTING -p tcp --dport 端口號 -m state --state NEW -j ACCEPT