目前在运行 AMI 的 AWS EC2 实例上安装 Docker 的方法是什么?Docker 企业版发布现在我想知道是否有任何变化。到目前为止,我一直在使用yum install docker
Docker,并且确实获得了1.12.6, build 7392c3b/1.12.6
当前版本(2017 年 3 月 3 日)。然而,GitHub 上的 Docker 存储库告诉我已经有更新的版本了。
我记得官方的 Docker(包)存储库不久前有一个名为docker-engine
replacement 的包,现在他们似乎将该包拆分为和,例如“Docker 社区版(Docker CE)不支持 Red Hat Enterprise Linux。”[docker
docker-ce
docker-ee
来源]
那么,使用上述方法在运行 AMI 的 EC2 实例上获取最新的稳定 Docker 版本是否仍然正确,或者我是否需要从其他地方提取软件包(如果是的话,哪一个,CE 还是 EE)?
答案1
要使 Docker 在 AWS AMI 上运行,您应该遵循以下步骤(这些都假设您已通过 ssh 连接到 EC2 实例)。
更新实例上的软件包
[ec2-user ~]$ sudo yum update -y
安装 Docker
[ec2-user ~]$ sudo yum install docker -y
启动Docker服务
[ec2-user ~]$ sudo service docker start
将 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 设置。