idea 連線遠端 docker 並部署專案到 docker

2023-10-27 21:01:19

1. idea 連線遠端 docker

1.1 安裝 docker 外掛

1.2 登入遠端伺服器,修改docker設定

(1) 修改 docker.service 檔案,位於 /usr/lib/systemd/system/docker.service

開啟該檔案,將原來的 ExecStart 前面加上#號註釋掉,在該行下面新增 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
# ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always

(2) 重新載入設定
systemctl daemon-reload

(3) 重啟 docker 服務
systemctl restart docker.service

1.3 新增雲伺服器防火牆規則

1.4 idea 設定連線 docker

開啟 idea,開啟 Setting,在 docker 項設定雲伺服器tcp://公網IP:2375,點選 ok 即可連上 docker,如下圖:

然後,就可以在 Services 中看到 docker 了

點選左邊的 connect 就可以連線上 docker,可以看到 docker 中的映象和容器資訊

2. 部署專案到 docker

2.1 建立並編寫Dockerfile

我這裡將dockerfile 建立在根目錄下

dockerfile 檔案內容:

# 指定基礎映象
FROM openjdk:8-jre-slim
# 作者
MAINTAINER gzl
# 將容器的時區設定為"Asia/Shanghai"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \&& echo 'Asia/Shanghai' >/etc/timezone
# 複製主機檔案至映象內,複製的目錄需放置在 Dockerfile 檔案同級目錄下
ADD target/chatgpt-api-0.0.1-SNAPSHOT.jar chatgpt-api.jar
# (和專案埠號等同)
EXPOSE 8080
# 在容器啟動時執行該應用程式
ENTRYPOINT ["java", "-jar", "/chatgpt-api.jar"]

2.2 執行設定

(1) 點選 Edit Configurations...

(2) 點選左上角+,找到 dockerfile

(3) 填寫設定資訊

  • Bind ports:對映埠:專案埠
  • Before launch:
    選擇Run Maven Goal,Command line 填寫 clean package -U -DskipTests,表示在構建之前清理專案的目標目錄,以確保沒有舊的構建殘留,同時跳過執行單元測試,可加快構建過程

(4) 執行
點選執行

執行成功

3. Nginx 設定

修改 nginx 設定

server {

    listen       80;
    server_name  公網ip;

    # 首頁
    index index.html;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /api/ {
        auth_request /auth;
        # 鑑權通過後的處理方式
        proxy_pass http://公網ip:8080/success;
    }

    location = /auth {
        # 傳送子請求到HTTP服務,驗證使用者端的憑據,返回響應碼
        internal;
        # 設定引數
        set $query '';
        if ($request_uri ~* "[^\?]+\?(.*)$") {
            set $query $1;
        }
        # 驗證成功,返回200 OK
        proxy_pass http://公網ip:8080/verify?$query;
        # 傳送原始請求
        proxy_pass_request_body off;
        # 清空 Content-Type
        proxy_set_header Content-Type "";
     }

    error_page 404 /404.html;
        location = /40x.html {

        }

    error_page   500 502 503 504  /50x.html;
     location = /50x.html {
     }

}

在瀏覽器使用公網ip存取