What is the current way of installing Docker on an AWS EC2 instance running the AMI?
There has been an announcement of Docker Enterprise Edition and now I want to know if anything has changed.
Until now, I have been using yum install docker
and do get a Docker versioned at 1.12.6, build 7392c3b/1.12.6
right now (3/3/2017). However, the Docker repository on GitHub tells me that there are already newer releases.
I remember the official Docker (package) repository having a package named docker-engine
replacing docker
some time ago and now they seem to split the package up into docker-ce
and docker-ee
, where e.g. "Docker Community Edition (Docker CE) is not supported on Red Hat Enterprise Linux." [Source]
So is or will it still be correct to use the above to get the latest stable Docker version on EC2 instances running the AMI or do I need to pull the package from somewhere else (and if so which one, CE or EE)?
To get Docker running on the AWS AMI you should follow the steps below (these are all assuming you have ssh'd on to the EC2 instance).
Update the packages on your instance
[ec2-user ~]$ sudo yum update -y
Install Docker
[ec2-user ~]$ sudo yum install docker -y
Start the Docker Service
[ec2-user ~]$ sudo service docker start
Add the ec2-user to the docker group so you can execute Docker commands without using sudo.
[ec2-user ~]$ sudo usermod -a -G docker ec2-user
You should then be able to run all of the docker commands without requiring
sudo
. After running the 4th command I did need to logout and log back in for the change to take effect.The hardest part to figure all of this out was the container-selinux requirement. Just find the latest version in http://mirror.centos.org/centos/7/extras/x86_64/Packages/ and install that first. In addition EC2 instances may not have a proper entropy generator so
haveged
may need to be installed.The rest is taken from https://docs.docker.com/install/linux/docker-ce/centos/ with the addition of haveged and firewalld. All these have to be done as root so
sudo
appropriately.Enable SELinux by modifying
/etc/sysconfig/selinux
to beThen reboot your instance by issuing
shutdown -r now
Executing
sudo docker version
should yield as of the time of this posting...Per https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html
You can see the history at https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-ami-versions.html
In addition to my previous answer. If you use Terraform, I have also created a Terraform module that can be used to create a Docker Swarm
https://registry.terraform.io/modules/trajano/swarm-aws/docker
The difference between the approach I had done previously vs the approach I am presently doing with the terraform module is to utilize the AWS provided Docker packages. This does not include the full docker-compose and what not, but you don't require those packages normally in a server.
Because I am using the one Amazon had provided, it is no longer the latest 18.09 version but the 18.06 version. However, the set up is simpler and I don't have to play catch up to container-selinux.
The only external dependency I use is EPEL to get haveged because you still need a good random source for some applications.
I also relied on the AWS security groups rather than explicitly setting up firewalld and used the SELinux setting that is defaulted in the AMI image.