基礎環境:linux系統,.net framework 4.0,npgsql 2.2.5.0 (版本不同,構建可能失敗)
方法背景:linux不支持運行.net framework 4.0,高版本mono不支持npgsql 2.x
主要使用:docker+mono4.2.x+xsp4 4.2.x
主要難點:兼容性問題,以及舊版本鏡像不再維護,自動下載包不完整,下載失敗,需手動下載構建
一、安裝docker(以下鏡像為手動構建,不再贅述)
1,上傳docker-24.0.7.tgz到linux服務器的/opt目錄
2,在服務器上解壓壓縮包到docker文件夾
cd /opt
tar -xvzf docker-24.0.7.tgz
3,將docker文件夾里所有文件復制粘貼到/usr/bin目錄下
(1)sudo cp /opt/docker/* /usr/bin/
(2)賦予它執行權限(讓它能運行)
sudo chmod +x /usr/bin/docker
sudo chmod +x /usr/bin/docker-proxy
sudo chmod +x /usr/bin/docker*
sudo chmod +x /usr/bin/containerd*
sudo chmod +x /usr/bin/runc
4,/etc/systemd/system/下創建服務文件/docker.service
[Unit]
Description=Docker Service
After=network.target[Service]
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity[Install]
WantedBy=multi-user.target
5,讓 systemd 識別新服務,并啟動 Docker
(1)回到根目錄 cd /
(2)
重載 systemd 配置
sudo systemctl daemon-reload
啟動 Docker
sudo systemctl start docker
設置開機自動啟動
sudo systemctl enable docker
查看是否安裝
docker version
二、安裝 PostgreSQL鏡像,部署數據庫
1,上傳postgres13.tar到linux服務器的/opt目錄
2,在服務器導入鏡像
docker load -i /opt/postgres13.tar
檢驗是否導入:docker images
3,運行PGSQL容器
docker run -d --name pg13 -e POSTGRES_PASSWORD=123456 -p 5432:5432 postgres:13
4,上傳數據庫文件public.sql到linux服務器的/opt目錄
5,把 SQL 文件拷貝到容器內 /tmp/ 目錄
docker cp "/opt/public.sql" pg13:/tmp/
6,執行導入命令
docker exec -it pg13 psql -U postgres -f /tmp/public.sql
等待導入完成
7,檢查
進入容器:
docker exec -it pg13 bash
登錄數據庫:
psql -U postgres
查看當前數據庫的所有表:
\dt
三、構建運行Mono鏡像
1,創建 Mono的 Dockerfile(web.config里面數據庫配置Server=pg13;)
Windows 上,新建一個文件夾 mono1,在里面放入mono421-debs文件夾和xsp4-debs文件夾(文里面的文件為手動下載放入,因為自動下載報錯,可能已經不再維護了)。以及名為Dockerfile的文件
(1)Dockerfile 內容:
說明:手動下載安裝ubuntu:16.04,
FROM ubuntu:16.04ENV DEBIAN_FRONTEND=noninteractive# 安裝基本依賴
RUN apt-get update && apt-get install -y \ca-certificates \libglib2.0-0 \libx11-6 \tzdata \&& apt-get clean# 拷貝 Mono 4.2.3 和 xsp4 的 .deb 包
COPY mono421-debs/ /tmp/mono421/
COPY xsp4-debs/ /tmp/xsp4/# 安裝 mono
RUN dpkg -i /tmp/mono421/*.deb || apt-get -f install -y# 安裝 xsp4
RUN dpkg -i /tmp/xsp4/*.deb || apt-get -f install -y# 暴露端口
EXPOSE 8290# 運行 xsp4(NXYW即打包文件夾)
COPY NXYW/. /
CMD ["mono", "/usr/lib/mono/4.5/xsp4.exe", "--port", "8290", "--nonstop", "--root", "/"]
2,把 NXYX文件夾也復制進這個 mono1 文件夾
3,在 Windows 上構建鏡像并導出
構建:docker build -t mono-net45-app1 .
導出:docker save -o mono-net45-app1.tar mono-net45-app1
4,上傳mono-net45-app.tar到linux服務器的/opt目錄
5,加載鏡像:
docker load -i /opt/mono-net45-app1.tar
6,運行鏡像:
docker run -d --name mono-net45-app1 -p 8290:8290 --restart unless-stopped mono-net45-app1
(8290是端口號)
7,創建自定義docker網絡,使得項目和數據庫連通
1,創建docker網絡:
docker network create mynet
2,把 pg13 加入 mynet(前面修改Web.config的用處了):
docker network connect mynet pg13
3,把mono-net45-app1加入 mynet:
docker network connect mynet mono-net45-app1
完成,如無問題,可訪問了
四,其他命令(若有需要可執行):
修改文件(或)
(1)把文件從容器拷到宿主機:
docker cp mono-net45-app1:/var/www/html/Web.config /root/Web.config
(2)用 docker cp 拷回容器:
docker cp /root/Web.config mono-net45-app1:/var/www/html/Web.config
(3)重啟容器:
docker restart mono-net45-app1
停止舊容器
docker stop mono-net45-app1
刪除舊容器
docker rm mono-net45-app1
退出容器(或)
exit