Amazon Elastic Container Service (Amazon ECS) 简介
Amazon Elastic Container Service (Amazon ECS)
Docker 是一种软件平台,可让您快速地建立、测试和部署应用程序,它将软件封装到容器 (Container) 的标准化单位,其中包含链接库、系统工具、程序代码和运行时间等执行软件所需的所有项目,用户可以将应用程序快速地部署到各种环境并加以扩展,而且知道程序代码可以执行。从下图可以看出,Container 比 VM 来的更轻量,更节省资源。
图 01. Container 与 VM 的差别
建立 Amazon EC2
关于如何安装 EC2 可以参考 Amazon Elastic Compute Cloud (EC2) 笔记
进入 EC2 控制台,注意是否是 1. 在新加坡地区(必须要跟先前规划的 VPC 所在区域相同), 2. 按下左手边的实例后, 3. 在按下右手边的 Launch Instance
图 02. 启动 Amazon EC2 实例
启动 Amazon EC2 实例需要有七个步骤,分别是:
- Choose AMI: 可以在不同的市集中选择适合的操作系统、适用的 CPU 架构(X86/arm)、适合的套件等等,要注意的是有些 AMI 是要收费的,还有 AMI 会跟接下来的 Instance Type与 Storage 有相关性,因为有些AMI需要较高的性能才有办法执行。预设选 Amazon Linux 2 AMI (HVM), SSD Volume Type - ami-0b1e534a4ff9019e0 (64-bit x86)
图 03. AMI 选择画面
-
Choose Instance Type: 这跟计算能力有关,所以也反映到收费上,要求的计算能力越高,收费越高。预设选 t2.micro
-
Configure Instance: 主要就是设定 EC2 实例的内容,有很多细部设定,就不一一说明,主要就是把这个实例放到公有子网 ithome public subnet 1 中,以下是需要修改的部分,其它的字段就保持默认值即可,如下图。
Network : vpc-0bb7004b67556d0da | ithomeVPC
Subnet : subnet-0f1df807467b642f6 | ithome public subnet 1 | ap-southeast-1a
Auto-assign Public IP : Enable
图 04. EC2实例组态设定
-
Add Storage: 这相当于选择硬盘大小,因为是安装 Amazon Linux ,所需空间不大,保持默认值即可。 8
-
Add Tags: 可加可不加,通常是用在Cloud watch观察比较方便,我们先不加。
-
Configure Security Group: 为提供安全保障,限制进来的联机,因为我们是建置 Web 服务器,所以打开埠号 22 与 80。
Assign a security group: Create a new security group
Security group name: ithome_web_SG
Description: ITHOME Web server Security Group
Type: SSH, HTTP
Source: Anywhere, Anywhere
图 05. EC2安全组设定
-
Review: 看一下前述的所有设定,确定无误后就直接按下 Launch
-
Key pair 设定: 因为安全考虑,AWS要求使用者务必要用**对( key pair )的方式来进行联机,因此在启动 EC2 前会要求建立或选择**对,下载下来的**对钥一定要好好保存,遗失后是没办法再重新下载的。
Create a new key pair
Key pair name: ithome
图 06. EC2 key pair 下载
联机到 Amazon EC2 (Windows)
请参考 AWS 的参考手册使用 PuTTY 从 Windows 联机至您的 Linux 实例,完成下列两件事:
- 下载并安装 PuTTY。
- 将刚下载的 EC2 key pair - ithome.pem 档案转换为 Putty 程序读取的可以 .ppk 档案
回到 EC2 控制台 选择实例,就可以看到刚刚启动的 Amazon EC2,找到 IPv4 Public IP 这个字段,作为 Putty 联机之用,从图九我们可以再次确认这个 EC 2所在的 VPC, Subnet, IPv4 Public IP, Availability zone, Security groups等信息是否正确。
图 07. EC2 实例内容
有 putty 远程联机软件、Amazon EC2、公有 IP 、以及**,接着要完成的就是进行从本地端登入到云端的 Amazon EC2,打开Putty,输入以下数据:
Host Name( or IP address): aaa@qq.com (前面是登入账号,@后面是公有IP)
Saved Sessions: ithome
图 08. PuTTy 组态设定
接着选择 Connection -> SSH -> Auth 选项,输入联机设定
Private key file for Authentication: 请选择刚刚转换好的 .ppk 檔
图 09. PuTTy 安全联机设定
设定完毕后再选 Session 选项,记得先按 Save 存盘,再按 Open 去进行联机,联机成功后会显示 PuTTy 的联机警告,按下 Yes 后就可以顺利联机。
图 10. PuTTy 联机警告
Amazon EC2 上安装 Docker
在 Amazon EC2 实例上安装 Docker
# 更新已安装的套装服务
sudo yum update -y
# 安装最新的 Docker Community Edition
sudo amazon-linux-extras install -y docker
# 启动 Docker 服务
sudo service docker start
# 设定 Docker 服务会自动启动
sudo systemctl enable docker
# 将 ec2-user 新增至 docker 群组,让您可以在不使用 sudo 的情况下执行 Docker 命令。
sudo usermod -a -G docker ec2-user
# Log out and log back in again
login ec2-user
# 验证 ec2-user 可以执行 Docker 命令
docker info
如果上述指令操作无误的话应该会出现以下画面
图 11. Docker 安装且启动成功
建立 Docker 影像
透过 PuTTy 编辑 Dockerfile ,也可以在 Windows 编辑完后,透过 FileZilla 上传到 EC2,内容如下,特别要注意的是 wget 这一行,务必要完成 S3 对象的上传,而得到对象 URL
FROM amazonlinux:2
# 安装相关套件
RUN yum install -y \
wget \
httpd \
php \
&& ln -s /usr/sbin/httpd /usr/sbin/apache2
# Install app
RUN rm -rf /var/www/html/* && mkdir -p /var/www/html
# 昨天放在 S3 上的档案,务必要修改正确
RUN wget https://bucket-name.s3-ap-southeast-1.amazonaws.com/index.php
ADD index.php /var/www/html
# Configure apache
RUN chown -R apache:apache /var/www
ENV APACHE_RUN_USER apache
ENV APACHE_RUN_GROUP apache
ENV APACHE_LOG_DIR /var/log/apache2
EXPOSE 80
CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
接下来透过 PuTTy 在 EC2 命令行中输入以下指令
# 从 Dockerfile 建置 Docker 影像,务必跟 Dockerfile 在相同目录下
docker build -t ithome-container .
# 执行 docker images,验证映像已正确建立。
docker images --filter reference=ithome-container
# 检查服务器的网页服务器是否开启
sudo service httpd status
# 关闭服务器的网页服务器
sudo service httpd stop
# 执行新建置的映像,第 1 个 80 是容器的埠号,第 2 个 80 是主机的端口号
docker run -t -i -p 80:80 ithome-container
图 12. Docker 图像文件建置并启动
开启浏览器,然后指向执行 Docker 并托管容器的服务器,应该会看到这个网页内容
图 13. Container内的网页
References
- 什么是 Docker?, https://aws.amazon.com/tw/docker/
- Docker basics for Amazon ECS, https://docs.aws.amazon.com/AmazonECS/latest/developerguide/docker-basics.html
- Amazon Elastic Container Service, https://aws.amazon.com/tw/ecs/?nc1=h_ls
- Amazon ECS PHP Simple Demo, https://github.com/aws-samples/ecs-demo-php-simple-app
- 用30天来介绍和使用 Docker 系列, https://ithelp.ithome.com.tw/users/20103456/ironman/1320
- 30天铁人赛介绍 AWS 云端世界 - 28: AWS 上的容器服务 Elastic Container Service(ECS), https://ithelp.ithome.com.tw/articles/10195572
列, https://ithelp.ithome.com.tw/users/20103456/ironman/1320 - 30天铁人赛介绍 AWS 云端世界 - 28: AWS 上的容器服务 Elastic Container Service(ECS), https://ithelp.ithome.com.tw/articles/10195572
上一篇: Navicat 连接远程Mysql
下一篇: Navicat 连接 MySQL