AWS EC2 上安裝 Docker 的示例

weixin_33912445發表於2018-11-12

關於 AWS EC2 的建立,參見: AWS 第一個 NodeJS 應用程式
關於 Docker,參加:Docker 學習筆記

目前我已經有了兩個 AWS 的 EC2 例項:

  • 公有 IP:18.222.176.214
  • 公有 IP:52.14.52.46

在 AWS EC2 安裝 Docker

參見:Amazon ECS 的 Docker 基本知識

我們在主機 18.222.176.21452.14.52.46 都安裝 Docker。

安裝最新的 Docker Community Edition 程式包:
sudo yum install -y docker

啟動 Docker 服務:
sudo service docker start

將 ec2-user 新增到 docker 組,以便您能夠執行 Docker 命令,而無需使用 sudo:
sudo usermod -a -G docker ec2-user

退出,再重新登入以接受新的 Docker 組許可權。您的新 SSH 會話將具有相應的 Docker 組許可權,而無需再使用 sudo

我們可以使用 docker --version 來檢視 Docker 的版本:

3415798-fbdb27d9a04fa7da.png
檢視 Docker 的版本

我們可以使用 docker info 來檢視 Docker 的執行資訊,可以看出目前既沒有映象 Image,也沒有容器 Container:

3415798-c2ebbdc2a114ae07.png
檢視 Docker 的執行資訊

建立簡單 Web 應用程式的 Docker 映象

目標:我們在主機 52.14.52.46 上建立映象,然後在主機 18.222.176.214 上獲取映象。

首先登入到主機 52.14.52.46ssh -i "XiangSecret.pem" ec2-user@52.14.52.46

建立名為 Dockerfile 的檔案。Dockerfile 是一個清單檔案,描述了用於 Docker 映象的基本映象以及要安裝的專案以及在此專案上執行的內容。
touch Dockerfile

編輯 Dockerfile 並新增以下內容:
此 Dockerfile 使用 Ubuntu 12.04 映象。RUN 指令將更新包快取,安裝一些適用於 Web 伺服器的軟體包,然後將 Hello World! 內容寫入到 Web 伺服器的文件根目錄。EXPOSE 指令在容器上公開埠 80,CMD 指令啟動 Web 伺服器。

FROM ubuntu:12.04

# Install dependencies
RUN apt-get update -y
RUN apt-get install -y apache2

# Install apache and write hello world message
RUN echo "Hello World!" > /var/www/index.html

# Configure apache
RUN a2enmod rewrite
RUN chown -R www-data:www-data /var/www
ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_LOG_DIR /var/log/apache2

EXPOSE 80

CMD ["/usr/sbin/apache2", "-D",  "FOREGROUND"]

從 Dockerfile 生成 Docker 映象:
docker build -t hello-world . 注意該命令最後有一個 . 表示 Dockerfile 在當前目錄。

3415798-bbb3340fa7e50956.png
從 Dockerfile 生成 Docker 映象

通過 docker images 以驗證是否已正確建立映象:

3415798-233b89252e732b5a.png
驗證是否已正確建立映象

執行新構建的映象。 -p 80:80 選項將容器上公開的埠 80 對映到主機系統上的埠 80。
docker run -p 80:80 hello-world

啟動後,通過如下兩種方式來訪問頁面:

3415798-d2641c60f466d3d0.png
訪問頁面

通過 docker ps 來檢視正在執行的 Docker 容器:

3415798-35c455b7fe1e460b.png
檢視正在執行的 Docker 容器

通過 Ctrl + C 來停止 Docker 容器。

將映象推送至 Amazon Elastic Container Registry

首先需要通過 aws configure 配置好 AWS 賬號

3415798-05adf7cc843ca168.png
配置好 AWS 賬號

如何可以找到 AWS Access Key ID 和 AWS Secret Access Key 呢?通過下圖的方式:


3415798-8a1b50d17d156597.png
如何可以找到 AWS Access Key ID 和 AWS Secret Access Key 呢

3415798-277af8d6a58efa3f.png
如何可以找到 AWS Access Key ID 和 AWS Secret Access Key 呢

建立用於儲存 hello-world 映象的 Amazon ECR 儲存庫。
aws ecr create-repository --repository-name hello-world

3415798-1fb78a6c1fcb6523.png
建立 Amazon ECR 儲存庫

在輸出中記下 "repositoryUri": "679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world"
PS:其中 679435956173 是 AWS Account Id。

使用上一步中的 repositoryUri 值標記 hello-world 映象:
docker tag hello-world 679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world

執行 aws ecr get-login --no-include-email 命令以獲取您的登錄檔的 docker login 身份驗證命令字串。
執行上一步中返回的 docker login 命令。此命令提供一個在 12 小時內有效的授權令牌。

3415798-0d36c3ac7687b5a7.png
docker login

最後,將映象推送至 Amazon ECR:
docker push 679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world

3415798-a794465b92da7ddd.png
將映象推送至 Amazon ECR

在另外一臺主機上獲取映象

參見:拉取映象

通過上面的步驟,我們已經在主機 52.14.52.46 上建立了映象,現在我們在主機 18.222.176.214 上獲取映象。

首先登入到主機 18.222.176.214ssh -i "XiangSecret.pem" ec2-user@18.222.176.214

通過 aws ecr describe-repositories 列出一個登錄檔中的儲存庫。我們可以看到 hello-world 這個映象的儲存庫

3415798-a3f35d853badbde0.png
列出一個登錄檔中的儲存庫

通過 aws ecr describe-images 命令描述儲存庫中的映象。
aws ecr describe-images --repository-name hello-world

3415798-f313f1d14d642b13.png
描述儲存庫中的映象

執行 aws ecr get-login --no-include-email 命令以獲取您的登錄檔的 docker login 身份驗證命令字串。
執行上一步中返回的 docker login 命令。此命令提供一個在 12 小時內有效的授權令牌。

通過 docker pull 命令拉取映象。
映象名稱格式應為 registry/repository[:tag] 以便按標籤拉取,或為 registry/repository[@digest] 以便按摘要拉取。
docker pull 679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world:latest

3415798-02e68e8a7c47b86a.png
從 Amazon ECR 獲得映象

通過 docker images 以驗證是否已正確獲得映象:

3415798-6be38057db0e70ba.png
驗證是否已正確獲得映象

執行新構建的映象。 -p 80:80 選項將容器上公開的埠 80 對映到主機系統上的埠 80。
docker run -p 80:80 679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world

啟動後,通過如下兩種方式來訪問頁面:

3415798-8e12e8a478a96377.png
訪問頁面

相關文章