在 AWS EC2 安裝 Docker
我們在主機 18.222.176.214
和 52.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 的版本:
我們可以使用 docker info
來查看 Docker 的運行信息,可以看出目前既沒有鏡像 Image,也沒有容器 Container:
創建簡單 Web 應用程序的 Docker 鏡像
目標:我們在主機 52.14.52.46
上創建鏡像,然後在主機 18.222.176.214
上獲取鏡像。
首先登錄到主機 52.14.52.46
:ssh -i "XiangSecret.pem" [email protected]
創建名爲 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 在當前目錄。
通過 docker images
以驗證是否已正確創建鏡像:
運行新構建的鏡像。 -p 80:80
選項將容器上公開的端口 80 映射到主機系統上的端口 80。docker run -p 80:80 hello-world
啓動後,通過如下兩種方式來訪問頁面:
通過 docker ps
來查看正在運行的 Docker 容器:
通過 Ctrl + C
來停止 Docker 容器。
將鏡像推送至 Amazon Elastic Container Registry
首先需要通過 aws configure
配置好 AWS 賬號
如何可以找到 AWS Access Key ID 和 AWS Secret Access Key 呢?通過下圖的方式:
創建用於存儲 hello-world 鏡像的 Amazon ECR 存儲庫。
aws ecr create-repository --repository-name hello-world
在輸出中記下 "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 小時內有效的授權令牌。
最後,將鏡像推送至 Amazon ECR:docker push 679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world
在另外一臺主機上獲取鏡像
參見:拉取鏡像
通過上面的步驟,我們已經在主機 52.14.52.46
上創建了鏡像,現在我們在主機 18.222.176.214
上獲取鏡像。
首先登錄到主機 18.222.176.214
:ssh -i "XiangSecret.pem" [email protected]
通過 aws ecr describe-repositories
列出一個註冊表中的存儲庫。我們可以看到 hello-world
這個鏡像的存儲庫
通過 aws ecr describe-images
命令描述存儲庫中的鏡像。aws ecr describe-images --repository-name hello-world
運行 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
通過 docker images
以驗證是否已正確獲得鏡像:
運行新構建的鏡像。 -p 80:80
選項將容器上公開的端口 80 映射到主機系統上的端口 80。docker run -p 80:80 679435956173.dkr.ecr.us-east-2.amazonaws.com/hello-world
啓動後,通過如下兩種方式來訪問頁面: