Как в настоящее время устанавливается Docker на инстанс AWS EC2 с AMI? Был анонс Docker Enterprise Edition а теперь я хочу знать, изменилось ли что-нибудь. До сих пор я использовал yum install docker
и получите версию Docker на 1.12.6, build 7392c3b/1.12.6
прямо сейчас (03.03.2017). Тем не мение, репозиторий Docker на GitHub говорит мне, что уже есть более новые выпуски.
Я помню, в официальном репозитории Docker (пакетов) был пакет с именем docker-engine
замена docker
некоторое время назад, а теперь они, кажется, разбили пакет на docker-ce
и docker-ee
, где, например, «Docker Community Edition (Docker CE) не поддерживается в Red Hat Enterprise Linux». [Источник]
Так что, или все же будет правильным использовать приведенное выше, чтобы получить последнюю стабильную версию Docker на экземплярах EC2, на которых запущен AMI, или мне нужно вытащить пакет откуда-то еще (и если да, то какой из них, CE или EE)?
Чтобы запустить 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 в группу docker, чтобы вы могли выполнять команды Docker без использования sudo.
[ec2-user ~]$ sudo usermod -a -G docker ec2-user
После этого вы сможете запускать все команды докеров, не требуя sudo
. После выполнения 4-й команды мне нужно было выйти и снова войти в систему, чтобы изменения вступили в силу.
Самым сложным во всем этом было требование контейнера selinux. Просто найдите последнюю версию в http://mirror.centos.org/centos/7/extras/x86_64/Packages/ и сначала установите его. Кроме того, экземпляры EC2 могут не иметь надлежащего генератора энтропии, поэтому haveged
может потребоваться установка.
Остальное взято из https://docs.docker.com/install/linux/docker-ce/centos/ с добавлением hasged и 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
должен уступить на момент публикации ...
Client: Version: 18.03.0-ce API version: 1.37 Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:09:15 2018 OS/Arch: linux/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.03.0-ce API version: 1.37 (minimum version 1.12) Go version: go1.9.4 Git commit: 0520e24 Built: Wed Mar 21 23:13:03 2018 OS/Arch: linux/amd64 Experimental: false
За https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html
Текущий AMI, оптимизированный для Amazon ECS (amzn-ami-2017.09.j-amazon-ecs-optimized), состоит из:
- Последняя минимальная версия AMI Amazon Linux
- Последняя версия агента контейнера Amazon ECS (1.17.2)
- Рекомендуемая версия Docker для последней версии агента контейнера Amazon ECS (17.12.0-ce)
- Последняя версия пакета ecs-init для запуска и мониторинга агента Amazon ECS (1.17.2-1)
Вы можете увидеть историю на https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html
В дополнение к моему предыдущему ответу. Если вы используете Terraform, я также создал модуль Terraform, который можно использовать для создания Docker Swarm.
https://registry.terraform.io/modules/trajano/swarm-aws/docker
Разница между подходом, который я использовал ранее, и подходом, которым я являюсь на данный момент работа с модулем terraform заключается в использовании пакетов Docker, предоставляемых AWS. Это не включает в себя полную сборку докеров и тому подобное, но вам обычно не требуются эти пакеты на сервере.
Поскольку я использую тот, который предоставил Amazon, это уже не последняя версия 18.09, а версия 18.06. Однако настройка проще, и мне не нужно играть в догонялки с container-selinux.
Единственная внешняя зависимость, которую я использую, - это EPEL для хэширования, потому что вам все еще нужен хороший случайный источник для некоторых приложений.
Я также полагался на группы безопасности AWS, а не на явную настройку firewalld, и использовал настройку SELinux, установленную по умолчанию в образе AMI.