1. 程式人生 > >【Docker】在IDEA中實現一鍵部署到伺服器(附ssl連線加密)

【Docker】在IDEA中實現一鍵部署到伺服器(附ssl連線加密)

近年來微服務可謂是火遍大江南北,隨著業務的拆分和高可用和叢集,服務變得越來越多,不再像原來的單體應用架構那樣,部署只需要執行一條nohup java -jar xx.jar &就可以完成部署,如果在微服務裡還是用這種方式完成部署的話那就太low太耗時間了,Docker的出現很好的解決了這個問題,可以說Docker和微服務是天生一對,用上Docker問題已經解決一大半了,但人是貪心的,總感覺還不夠完美,要是能像在IDEA中啟動專案一樣完成部署,且日誌顯示在控制檯就好了,於是本篇就帶大家從零開始到夢想成真.(預設大家已經學完了docker,並且熟悉linux常用命令,如果沒有前面這兩樣基礎,建議可以稍微去了解下,不然不太容易理解後面的概念)

先截張圖給大家看看使用IDEA一鍵部署有多爽:

被爽到了吧,那就耐下心來跟我一起配置,從最簡單的開始,一直到配置ca加密安全連線...

乞丐版:

我以IDEA2018.1和CentOS7.3為例(版本不同影響也不大)

安裝後開放docker的遠端連線訪問:

執行:vi /usr/lib/systemd/system/docker.service

修改ExeStart為:/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

重新載入配置並重啟Docker:

執行:systemctl daemon-reload 執行:systemctl restart docker

開放防火牆2375埠:

執行: /sbin/iptables -I INPUT -p tcp --dport 2375 -j ACCEPT

執行:iptables-save

OK,至此伺服器端配置完成.

接下來配置IDEA:

File->settings->plugings->Browse repositories->搜尋docker->選中docker integration->點選右下角install安裝,完成後重啟IDEA.

重啟後繼續開啟File->settings->Build...->Docker->點選+號->選中TCP socket->輸入你伺服器的ip和docker遠端連線的埠號2375. 輸入後會自動建立連線,如果這時候你看到顯示連線成功後->apply->ok. 如果顯示連線失敗,請關閉windows防火牆,並確認伺服器端防火牆的2375埠是否已開放且處於監聽狀態(netstat -tnl 去找一下是否有2375且顯示Listen狀態)

連線完成後可以在IDEA左下角找到Docker:

沒錯,就是這隻萌萌的小魚,點選上圖左上角的播放按鈕,即可連線到伺服器的docker:

然後下面帶大家親自建立映象和容器並啟動容器:

第一步:先把專案打成jar包,這個我不多說了,用maven直接打包,跟以前部署沒啥兩樣,打包之後在target中可以找到打包好的專案:

第二步:在專案下新建DockerFile(推薦在專案頂層資料夾下新建,不要放在別處,否則可能建立映象失敗):

第三步:編寫DockerFile

為了方便大家複製,再貼一遍:

  1. From hub.c.163.com/library/java:8-jre

  2. ADD target/*.jar ylt-config-01.jar

  3. EXPOSE 8888

  4. ENTRYPOINT ["java", "-jar", "ylt-config-01.jar"]

第四步:配置docker一鍵部署

點選Run->Run->Edit Configurations->點選+號->選擇Docker->Dockerfile->然後按下圖所示填寫資訊,填完點ok即可.

至此,自動一鍵部署已配置完成,下面我們來測試一下:

選中剛剛建立的docker,點選啟動按鈕,然後耐心等待一下,它就會幫你自動部署完成.

建立好的映象還可以推送到遠端映象倉庫,然後下次需要在其他伺服器上部署時,只需要一條命令docker pull拉下來,再docer run就可以完成部署,非常爽,推送到遠端倉庫的話需要額外配置一下:

最後,如果你覺得這樣就萬事大吉了,那我只能告訴你圖樣圖森破了,前面提到的配置是允許所有人都可以訪問的,因為docker預設是root許可權的,你把2375埠暴露在外面,意味著別人隨時都可以提取到你伺服器的root許可權,是很容易被黑客黑的,因此,docker官方推薦使用加密的tcp連線,以Https的方式與客戶端建立連線,由於網上搜來的以及官網上面的配置有很多地方比較難懂,稍有不慎,配下來就不能成功連線,所以這裡再貼一下docker ca認證的配置方法.

大神版:

開啟你的伺服器,分別執行下面的命令:

1.先在/usr/local目錄下建立個資料夾,這裡取名叫ca,然後進入ca資料夾中

  1. mkdir -p /usr/local/ca

  2. cd /usr/local/ca

依次執行下面的命令,需要輸入密碼,自由指定,兩次輸入保持一致並記住即可.

openssl genrsa -aes256 -out ca-key.pem 4096

2.根據提示分別輸入國家,省份,城市,組織,等一系列資訊(可以隨便輸,無所謂的其實)

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

3.生成server-key.pem,輸入下面命令敲回車即可.

openssl genrsa -out server-key.pem 4096

4.把下面的$Host換成你自己伺服器外網的IP或者域名:比如:openssl req -subj "/CN=192.168.1.0" -sha256...

或:openssl req -subj "/CN=www.laohan.com" -sha256...(這麼做前提是你有域名,該域名DNS解析後指向你的伺服器)

openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr

5.配置白名單,也就是你接下來要允許那些ip可以連線到伺服器的docker,因為已經是ssl連線,所以我推薦配置0.0.0.0,也就是所有Ip都可以連線(但只有擁有證書的才可以連線成功),這樣配置好之後公司其他人也可以使用.如果你不想這樣,那你可以配置Ip,用逗號分隔開.下面的$Host依舊是你伺服器外網的IP或者域名,請自行替換.

echo subjectAltName = DNS:$HOST,IP:0.0.0.0 >> extfile.cnf

6.執行下面語句:

echo extendedKeyUsage = serverAuth >> extfile.cnf

7.執行下面語句,然後輸入前面設定過的密碼,用以生成ca-key.

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf

8.生成客戶端所需的key.pem,依舊在該伺服器下執行下面命令,到時候把生成好的幾個公鑰私鑰拷出去即可.

openssl genrsa -out key.pem 4096

9.執行下面命令:

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

10.執行下面命令:

echo extendedKeyUsage = clientAuth >> extfile.cnf

11.生成cert.pem,需要輸入前面設定的密碼:

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile.cnf

12.刪除"廢物"

rm -v client.csr server.csr

13.修改許可權:

chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

14.歸集伺服器證書:

  1. cp server-*.pem /etc/docker/

  2. cp ca.pem /etc/docker/

15.修改docker配置:

vi /lib/systemd/system/docker.service
  1. 將ExecStart=/usr/bin/dockerd

  2. 替換為:

  3. ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/etc/docker/ca.pem --tlscert=/etc/docker/server-cert.pem --tlskey=/etc/docker/server-key.pem -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock

16.重新載入daemon並重啟docker

  1. systemctl daemon-reload

  2. systemctl restart docker

17.開放2376埠

/sbin/iptables -I INPUT -p tcp --dport 2376 -j ACCEPT
iptables-save

18.重啟docker

service docker restart

19.然後使用工具比如winscp,或者xshell,把你當前所在的/usr/local/ca資料夾裡的拷貝到你本地電腦的某個資料夾裡:

(我這裡本地在桌面新建了一個叫ca的資料夾)

20.至此萬事大吉,大吉大利,今晚吃雞了...下面我們開啟IDEA測試一下:

沒有問題,很爽,成功建立連線,接下來部署專案就可以一鍵部署了,而且不用擔心安全問題,剛剛ca資料夾裡的三個祕鑰請妥善保管,只有擁有這三個祕鑰的人才可以連線到遠端的docker,本期教程到此為止,歡迎關注本博,會持續分享一些新知識和一些好用的工具給大家.