如何使用 AMI 在 AWS EC2 实例上安装 Docker(CE/EE 更新)

如何使用 AMI 在 AWS EC2 实例上安装 Docker(CE/EE 更新)

目前在运行 AMI 的 AWS EC2 实例上安装 Docker 的方法是什么?Docker 企业版发布现在我想知道是否有任何变化。到目前为止,我一直在使用yum install dockerDocker,并且确实获得了1.12.6, build 7392c3b/1.12.6当前版本(2017 年 3 月 3 日)。然而,GitHub 上的 Docker 存储库告诉我已经有更新的版本了。

我记得官方的 Docker(包)存储库不久前有一个名为docker-enginereplacement 的包,现在他们似乎将该包拆分为和,例如“Docker 社区版(Docker CE)不支持 Red Hat Enterprise Linux。”[dockerdocker-cedocker-ee来源]

那么,使用上述方法在运行 AMI 的 EC2 实例上获取最新的稳定 Docker 版本是否仍然正确,或者我是否需要从其他地方提取软件包(如果是的话,哪一个,CE 还是 EE)?

答案1

要使 Docker 在 AWS AMI 上运行,您应该遵循以下步骤(这些都假设您已通过 ssh 连接到 EC2 实例)。

  1. 更新实例上的软件包

    [ec2-user ~]$ sudo yum update -y

  2. 安装 Docker

    [ec2-user ~]$ sudo yum install docker -y

  3. 启动Docker服务

    [ec2-user ~]$ sudo service docker start

  4. 将 ec2-user 添加到 docker 组,这样您无需使用 sudo 即可执行 Docker 命令。

    [ec2-user ~]$ sudo usermod -a -G docker ec2-user

然后,您应该能够运行所有 docker 命令,而无需sudo。运行第 4 条命令后,我确实需要注销并重新登录以使更改生效。

答案2

最难搞清楚的是 container-selinux 的要求。只需找到最新版本即可http://mirror.centos.org/centos/7/extras/x86_64/Packages/并首先安装它。此外,EC2 实例可能没有合适的熵生成器,因此haveged可能需要安装。

其余取自https://docs.docker.com/install/linux/docker-ce/centos/加上 haveged 和 firewalld。所有这些都必须以 root 身份进行,这样才sudo合适。

yum install -q -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.42-1.gitad8f0f7.el7.noarch.rpm
yum install -q -y http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/h/haveged-1.9.1-1.el7.x86_64.rpm
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -q -y firewalld docker-ce
systemctl enable firewalld
systemctl start firewalld
firewall-cmd --add-port=2377/tcp --permanent
firewall-cmd --add-port=2376/tcp --permanent
firewall-cmd --add-port=7946/tcp --permanent
firewall-cmd --add-port=7946/udp --permanent
firewall-cmd --add-port=4789/udp --permanent
firewall-cmd --zone=public --permanent --add-masquerade
firewall-cmd --reload
systemctl enable haveged
systemctl start haveged
systemctl enable docker
systemctl start docker
setenforce 1

启用 SELinux通过修改 /etc/sysconfig/selinux

SELINUX=enforcing
SELINUXTYPE=targeted

然后通过发出以下命令重启实例shutdown -r now

执行sudo docker version应该在发布时产生结果......

客户:
 版本:18.03.0-ce
 API 版本:1.37
 Go版本:go1.9.4
 Git 提交:0520e24
 建立时间:2018 年 3 月 21 日星期三 23:09:15
 操作系统/架构:linux/amd64
 实验:错误
 编排者:swarm

服务器:
 引擎:
  版本:18.03.0-ce
  API 版本:1.37(最低版本 1.12)
  Go版本:go1.9.4
  Git 提交:0520e24
  建立时间:2018 年 3 月 21 日星期三 23:13:03
  操作系统/架构:linux/amd64
  实验:错误

答案3

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html

当前针对 Amazon ECS 优化的 AMI (amzn-ami-2017.09.j-amazon-ecs-optimized) 包括:

  • Amazon Linux AMI 的最新最低版本
  • 最新版本的 Amazon ECS 容器代理 (1.17.2)
  • 最新 Amazon ECS 容器代理 (17.12.0-ce) 的推荐 Docker 版本
  • 用于运行和监控 Amazon ECS 代理的 ecs-init 包的最新版本 (1.17.2-1)

您可以查看历史记录https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html

答案4

除了我之前的回答。如果你使用 Terraform,我还创建了一个 Terraform 模块,可用于创建 Docker Swarm

https://registry.terraform.io/modules/trajano/swarm-aws/docker

我以前的方法和我现在的方法的区别目前使用 terraform 模块的目的是利用 AWS 提供的 Docker 包。这不包括完整的 docker-compose 和其他内容,但您在服务器中通常不需要这些包。

因为我使用的是亚马逊提供的版本,所以它不再是最新的 18.09 版本,而是 18.06 版本。但是,设置更简单,我不需要追赶 container-selinux。

我使用的唯一外部依赖项是 EPEL,因为对于某些应用程序来说,您仍然需要良好的随机源。

我还依赖 AWS 安全组,而不是明确设置防火墙,并使用 AMI 映像中默认的 SELinux 设置。

相关内容