Назад | Перейти на главную страницу

Как установить Docker на экземпляр AWS EC2 с AMI (обновление CE / EE)

Как в настоящее время устанавливается 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).

  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 в группу 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.