文本使用一台Amazon Linux EC2云服务器,在Linux环境上,创建一个hello world的docker程序,并且发布到AWS ECR镜像仓库。在开发者本地的Mac或者Linux创建docker的过程大同小异,仅供参考。
1、配置docker准备环境
创建一台EC2节点,使用Amazon Linux 2操作系统,选择较小规格如t2.small即可。
2、安装docker,以root身份执行如下命令:
yum update -y
amazon-linux-extras install docker
service docker start
usermod -a -G docker ec2-user
3、下载sample应用程序
首先安装git程序,并下载对应的演示代码。
yum install -y git
git clone https://github.com/awslabs/ecs-demo-php-simple-app
下载后进入目录,可以看到里边包含一系列源文件。找到其中的 Dockerfile文件(无扩展名),使用文本编辑器修改之,加入下边内容:
FROM amazonlinux:2
# Install dependencies
RUN yum install -y \
curl \
httpd \
php \
&& ln -s /usr/sbin/httpd /usr/sbin/apache2
# Install app
RUN rm -rf /var/www/html/* && mkdir -p /var/www/html
ADD src /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"]
在中国区做测试时候,需要注意AWS中国区域没有ICP备案的环境无法暴露80、443、8080等端口,另外5800、5900等端口也是被屏蔽。因此在测试中建议docker内发布80端口,通过ALB负载均衡器映射将80端口映射为50001等特殊端口。测试即可通过。
4、配置AWS CLI认证
这里需要在本机上安装AWS CLI并配置好access key,同时具有操作ECR的权限。
5、在ECS的图形界面上创建ECR仓库
这一步可以通过CLI操作,也可以通过Console图形界面操作。

操作完成后,复制下来仓库地址,即上图中红色部分。
6、通过AWS CLI完成对ECR镜像仓库的身份验证。
在刚才编辑Dockerfile的机器上,执行如下命令。
$(aws ecr get-login --no-include-email --region cn-northwest-1)
操作成功后应显示登陆成功,如下图。

7、在本地创建并编译docker生成image
上传到AWS的ECR之前,需要在本地先创建并编译docker生成image。执行如下命令。
docker build -t phpdocker .
操作完成后,执行docker images可以看到刚才创建的image。

8、对要上传的镜像打tag
执行如下命令。其中的的URI需要替换为前文的ECR镜像仓库的地址。
docker tag phpdocker:latest 420029960748.dkr.ecr.cn-northwest-1.amazonaws.com.cn/phpdocker:latest
9、将image push到ECR上
执行如下命令。 其中的的URI需要替换为前文的ECR镜像仓库的地址。
docker push 420029960748.dkr.ecr.cn-northwest-1.amazonaws.com.cn/phpdocker:latest
上传成功可以看到提示。

在Console界面上,查看ECR就已经可以看到image了。

10、检查镜像的安全隐患
在上传镜像完成后,可以在容器镜像仓库里边看到,镜像存在安全缺陷。如下图。

点击详情进入后,发现安全漏洞是因为组件不是最新版本造成的。如下截图。

为此需要更新镜像到最新版本。
11、修改镜像Dockerfile进行升级
登录到刚才build docker的EC2上,编辑上文用到的Dockerfile文件,找到“Install dependencies”一段,在开头加入如下一行:
RUN yum update -y
保存退出。
执行如下命令重新build镜像。
docker build -t phpdocker:2 .
这里的命令比第一次build时候增加了 :2 ,表示第二个版本tag。build成功后如下图。

执行docker images命令,可以看到当前EC2环境上,镜像已经新版本已经编译完成。

12、上传新版本到AWS ECR 容器镜像仓库
与前文介绍过的顺序一样,分别执行登录、打tag的操作,最后是push。执行如下命令:
$(aws ecr get-login --no-include-email --region cn-northwest-1)
docker tag phpdocker:2 420029960748.dkr.ecr.cn-northwest-1.amazonaws.com.cn/phpdocker:2
docker push 420029960748.dkr.ecr.cn-northwest-1.amazonaws.com.cn/phpdocker:2
注意以上命令的版本tag需要替换为 :2 。执行后效果如下。

此时从控制台上,访问ECR,查看镜像仓库,可以看到新上传的版本已经被识别出来,且通过了安全扫描,没有漏洞。

全文完。