iT邦幫忙

2023 iThome 鐵人賽

DAY 20
0
SideProject30

30 天學習 Docker 部署你的專案系列 第 20

DAY 20 - 連接到 EC2 instance 並下載 Docker

  • 分享至 

  • xImage
  •  

先前我們可以使用 docker compose up ,是因為他可以根據我本機的 Dockerfile 製成一顆 Image ,並使用 compose 啟動 app 與 db 兩個服務,我現在希望可以將這個我在本機運作的流程,搬到 EC2 (遠端) 來實作,如此一來,任何人只要有網址或 ip 地址,都可以透過在瀏覽器搜尋看到我的專案,也就是達成部署的效果。

在這之前我要在 EC2 裡面跑 Docker,所以我需要先連接到 EC2 以及 在 EC2 instance 裡下載 Docker。

連接到 AWS EC2

什麼跟 AWS EC2 連接?為什麼要連接?🤯
其實說白話就是,建立我本機跟 AWS EC2 的網路連接。透過連接,使我們可以在 EC2 實例上進行遠端管理、部署應用程式、監控和維護等服務。
要連接到 AWS EC2 首先我們可以先勾選要連接的 instance ,接著點選 connect(連接) 按鈕
https://ithelp.ithome.com.tw/upload/images/20231005/201510353drOPwAIsQ.png
進到 connect 裡面,可以看到有很多種不同的連接方式,這邊就簡單介紹我最常用的兩種:

1. EC2 Instance Connect

EC2 Instance Connect 使用 SSH 隧道協議,以安全的方式連接到 EC2 ,我們不需要自己管理 SSH 金鑰。我自己是想像成在 AWS 裡可以直接連到 EC2 的終端機。

https://ithelp.ithome.com.tw/upload/images/20231005/20151035Sb5Nq2lNqk.png

選擇 EC2 Instance Connect 的 Tab ,直接點選右下角 connect ,可以看到開啟一個新的分頁如下圖是 AWS 裡,已經連到 EC2 的終端機,我們可以在這個終端機裡下指令。
https://ithelp.ithome.com.tw/upload/images/20231005/20151035MzY2HBb9GV.png

2. SSH client

我想像成我有一把鑰匙,可以使用 SSH 客戶端,連接到 AWS EC2 的終端機。

選擇 SSH client 的 Tab,可以看到這邊我們要使用的鑰匙,就是我們在開 instance 設定的密鑰 krystal.pem ,其實圖片就有說明步驟了,但我還是不完全了解他的意思,所以就先試再說!
https://ithelp.ithome.com.tw/upload/images/20231005/2015103521mUZmyQbw.png
首先打開終端機,在我終端機的根目錄(或是你習慣連接 EC2 的目錄),將我們先前收藏好的 krystal.pem 檔案拉到這個目錄下,並且執行連接看看 ssh -i "krystal.pem" ec2-user@ec2-52-199-213-167.ap-northeast-1.compute.amazonaws.com
https://ithelp.ithome.com.tw/upload/images/20231005/20151035cWVKW9dFPM.png

This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?

會看到如上述的安全提醒,我就把它想像成驗證,所以直接輸入 yes 即可。

https://ithelp.ithome.com.tw/upload/images/20231005/20151035C1fLbMBQvs.png

這時我看到了上方看起來明顯的警示,看起來他說我的 krystal.pem 太開放?!我猜想是權限的問題,所以將 Permissions 0644 for 'krystal.pem' are too open. 錯誤訊息去問問谷歌大神,第一個搜尋結果
看起來調整檔案權限即可

chmod 400 <檔案名稱>

https://ithelp.ithome.com.tw/upload/images/20231005/2015103521mUZmyQbw.png
偷偷說其實剛剛 AWS 第三點也有教我們怎麼做🤣🤣

https://ithelp.ithome.com.tw/upload/images/20231005/20151035B8tPsNXoiO.png
沒有輸出是正常的,代表調整權限成功!

接著再一次執行 ssh 連線,看到這個奇怪的形狀就知道成功啦🥳
https://ithelp.ithome.com.tw/upload/images/20231005/20151035Tky8rvj9uQ.png

在 ECR 下載 Docker

以下在 ECR 下載 Docker 我是參考 菜鳥工程師 肉豬 的文章

更新套件庫

sudo yum update -y

https://ithelp.ithome.com.tw/upload/images/20231005/20151035DlPILimnnR.png
這邊有個小提醒,主要是在說 Amazon Linux 有新版本,我可以使用 dnf upgrade --releasever=2023.2.20231002 來下載新版本
https://ithelp.ithome.com.tw/upload/images/20231005/20151035toBdItLzos.png
需要 superuser 才可以,所以我加上 sudo
https://ithelp.ithome.com.tw/upload/images/20231005/20151035NvW189QoZh.png
下載過程太長了我就先省略,但中間可能會提問下載需要花費多少容量是否願意繼續更新這類的問題,成功了會出現 Complete! 字樣。

安裝 Docker

sudo yum install docker

一樣會問一些下載需要花費多少容量是否願意繼續下載這類的問題,成功了一樣會出現 Complete! 字樣。

檢視 Docker 版本

docker --version

https://ithelp.ithome.com.tw/upload/images/20231005/20151035466081EnE4.png

調整使用者操作 docker 的權限

sudo usermod -a -G docker ec2-user

這個指令是將 ec2-user 這個使用者加到 docker 使用者,這樣可以獲得執行 Docker 操作的權限,就不需要每次都使用 sudo
https://ithelp.ithome.com.tw/upload/images/20231005/20151035dBjuG4jGe4.png

📍這邊是因為 EC2 預設的 user 叫做 ec2-user ,但如果您想確認自己的名稱時,可以使用:

whoami

啟動 Docker 服務

sudo service docker start

https://ithelp.ithome.com.tw/upload/images/20231005/201510357swULQAhww.png

確認 Docker 服務是否啟動

docker ps

https://ithelp.ithome.com.tw/upload/images/20231005/20151035fgIermV956.png
使用出鏡率超高的 docker ps 但是卻看到

permission denied while trying to connect to the Docker daemon socket

看起來又是權限問題,但我剛剛不是 sudo usermod -a -G docker ec2-user 調整權限成功了嗎?

其實是因為當我調整權限成功,我需要先退出 ec2 instance ,再重新進來一次,就會將新的權限生效。

📍退出一樣使用之前教過的 control 鍵 + d 鍵 或輸入 exit 字 + enter 鍵

再次進去 instance 後,再試一次成功看到目前 docker ps 是空的
https://ithelp.ithome.com.tw/upload/images/20231005/20151035GFDhHswsoh.png

到這邊我們已經萬事俱備,明天就來從這個 EC2 的 instance 裡面來登入、拉取我們前幾天推在 Docker Hub 上的 image 吧!


上一篇
DAY 19 - 認識及建立 AWS EC2 Instance
下一篇
DAY 21 - 在 instance 上跑 Docker Image
系列文
30 天學習 Docker 部署你的專案30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言