Skip to main content

Command Palette

Search for a command to run...

如何本地Docker部署到AWS EC2

如何在AWS EC2上使用Docker:從創建實例到運行容器

Published
3 min read
如何本地Docker部署到AWS EC2
S

Hi, I'm Sharon

本文涵蓋了使用AWS EC2和Docker的完整流程,包括創建EC2實例、設定預算警報、連接EC2、設定安全組、在EC2上運行Docker、推送及拉取Docker Image、創建專案資料夾、傳送.yaml檔案至EC2,以及使用.yaml檔案運行Docker Image。最後還介紹了下次開啟EC2並運行Docker的檢查清單。

運行AWS EC2

創建EC2、設定預算警報

  1. Create instance

    1. 輸入名稱、選擇ubuntu為作業系統

    2. 創建密鑰並儲存至本機上,SSH本地端連線到EC2時會使用到

    3. 創建安全組,控制流量進出、減少資安風險

    4. 創建後會自動啟動EC2 Instance

  2. 設定預算避免不小心花太多錢

使用本地終端機連接EC2

AWS EC2上的終端機無法將本地資料傳送到EC2上,故須使用本地終端SSH連線到EC2中
  • 使用軟體: MobaXterm

  • 設定

    • remote → aws ec2 instance 公有IP

    • Specify username → ubuntu

    • Use private key → .pem密鑰檔案位置

  • 成功

安全組設定

💡
即使你的 .pem 密鑰只保存在本機上,資安考量建議安全組入站規則只開放SSH特定IP
💡
EC2 Instance重啟、EC2 Instance停止,IP會更變,故需要重新設定安全組
  1. 找到當前EC2 instance 安全組Security group

  2. 編輯入站規則,點擊右上方的編輯入站規則(允許哪些協議的流量可訪問到網站中)

  3. 入站規則設定→只開放SSH特定IP

EC2上運行Docker

常用指令

  • 查詢當前鏡像

      docker images
    
  • 查看運行中的容器

      docker ps
    
  • 查看運行中的容器並包含停止運行的

      docker ps -a
    
  • 刪除鏡像

      docker rm <容器ID名>
    

安裝Docker

  1. 按照官方文檔中的12點複製命令依序安裝

    https://docs.docker.com/engine/install/ubuntu/#install-using-the-repository

  2. 第3點使用nginx測試

    • 測試

      1. 安裝docker化的nginx,來確認可否連入

         docker run -d -p 80:80 --name webserver nginx
        
      2. 網址輸入http://aws 公有ip 地址

         http://13.213.7.170
        

      3. 確認是否有看到nginx歡迎頁面


本地Docker image推送到Docker Hub

💡
注意設定tag時的new_spacename要使用docker hub的帳號名
  1. 官方步驟: https://docs.docker.com/docker-hub/repos/

從Docker Hub拉取Image

  1. 拉取先前上傳的Hub

  2. 一樣用nginx示範,後續使用.yaml運行

     docker pull ppp300a/nginx:v1.0
    

Ubuntu上創建專案資料夾

Ubuntu常用命令

  • 查看當前路徑

      pwd
    
  • 創建資料夾

      mkdir 目錄名
    
  • 創建多個資料夾

      mkdir -p 父層級/子層級
    
  • 到多層資料夾下

      cd /home/ubuntu/projects/test_web
    
  • 到上一層資料夾層級

      cd ..
    
  • 列出當前目錄下的文件和文件夾

      ls
    
  • 編輯文件(使用 nano 編輯器)

      nano 文件名
    
  • 刪除文件

      rm 文件名
    
  • 刪除目錄及其內容

      rm -r 目錄名
    
  • 複製文件或目錄

      cp 源文件 目標位置
    
  • 移動或重命名文件或目錄

      mv 源文件 目標位置
    

流程

  1. 輸入 pwd 確認當前路徑

  2. 創建project/test_web

     mkdir -p /home/ubuntu/projects/test_web
    
  3. 進到test_web中

     cd /home/ubuntu/projects/test_web
    

從本機傳.yaml檔案到AWS EC2中

透過SSH傳送資料

Git bash

使用軟體: git bash

  • 命令:

      scp -i /path/to/your-key.pem /path/to/local/docker-compose.prod.yml ec2-user@your-ec2-ip-address:/path/to/remote/directory/
    
  • 私鑰文件的路徑: /path/to/your-key.pem

  • 本地文件路徑: /path/to/lo**cal/docker-compose.prod.yml

  • EC2 主機的使用者和IP地址: ec2-user@your-ec2-ip-address

  • EC2上的目標路徑: /path/to/remote/directory/

  • 完整如下:

      scp -i "C:\Users\SharonMai\.ssh\dept.pem" ./新文字文件.txt ubuntu@ec2-3-1-20-80.ap-southeast-1.compute.amazonaws.com:/home/ubuntu/projects/test_web
    

Moba拖拉

直接拖拉

使用.yaml檔案運行Image

💡
有時改版會更換命令,若指令出錯以官方文檔為主https://docs.docker.com/compose/gettingstarted/#step-2-define-services-in-a-compose-file

Docker compose常用命令

  • 指定yml檔案運行

      sudo docker compose -f docker-compose-build.yml up
    
  • 停止所有由 docker-compose up 啟動的容器

      sudo docker compose stop
    
  • 刪除所有透過docker-compose.yml啟動目前已停止運行的容器,不會刪除任何網路(networks)、卷(volumes)或映像檔(images)

      sudo docker compose rm
    
  • 停止並刪除容器及網路(networks)以及定義在.yml中的服務

      sudo docker compose down
    
  • 運行yml檔,將自動運行此檔名docker-compose.yml

      sudo docker-compose up
    

流程

  1. 運行yaml檔案

  2. 開新分頁,網址輸入地址http://aws<公有ip> ,完成如下

     http://13.213.7.170
    

下次再開啟AWS EC2 運行Docker的例行公事

  1. 啟動EC2

  2. 安全組SSH IP更新

    1. 找到當前EC2 instance 安全組Security group

    2. 編輯入站規則,點擊右上方的編輯入站規則(允許哪些協議的流量可訪問到網站中)

    3. 入站規則設定→只開放SSH特定IP

  3. 本地終端機連線

    • remote → aws ec2 instance 公有IP

    • Specify username → ubuntu

    • Use private key → .pem密鑰檔案位置

  1. 到專案路徑中

    1. 輸入 pwd 確認當前路徑

    2. 進到test_web中

       cd /home/ubuntu/projects/test_web
      
  2. 啟動.yaml運行yaml檔案

    • 指定yml檔案運行

        sudo docker compose -f docker-compose-build.yml up