How to install Docker on Amazon Linux 2
Tags: docker, aws
Published: 2022-07-28 15:47:00

How do I install docker and docker-compose on Amazon Linux 2 running on the EC2 or Lightsail cloud instance?

Before you read this article, consider using [AWS Fargate](https://aws.amazon.com/fargate/).

1. First step is to access the operating system with SSH. This step depends on how your machine is configured. I'll show two options to get access:

SSH with a private key

```
ssh -i /path/to/the/key.pem ec2-user@ec2-ip-address-dns-name-here
```

OR ```
ssh ec2-user@ec2-ip-address-dns-name-here
```

2. Apply pending updates using the [yum command](https://access.redhat.com/articles/yum-cheat-sheet "How"): ```
sudo yum update
```

3. Search for Docker package: ```
sudo yum search docker
```

4. Install docker with the command below: ```
sudo yum install docker
```

5. Add group membership for the default "ec2-user" so you can run all docker commands. ```
sudo usermod -a -G docker ec2-user
id ec2-user
```

6. Enable docker service at boot time: ```
sudo systemctl enable docker.service
```

7. Start the Docker service: ```
sudo systemctl start docker.service
```

8. Check docker service status, run: ```
sudo systemctl status docker.service
```

The expected return would be something like this ```
● docker. Service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-09-08 05:03:52 EDT; 18s ago
     Docs: https://docs.docker.com
  Process: 3295 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS)
  Process: 3289 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS)
 Main PID: 3312 (dockerd)
    Tasks: 9
   Memory: 39.9M
   CGroup: /system.slice/docker.service
           └─3312 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/c...

Sep 08 05:03:51 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:51 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:51 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:51 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:52 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:52 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:52 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:52 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Sep 08 05:03:52 amazon.example.local systemd[1]: Started Docker Applicatio...
Sep 08 05:03:52 amazon.example.local dockerd[3312]: time=2021-09-08T05:03...
Hint: Some lines were ellipsized, use -l to show in full.
```

9. Check the Docker version: ```
docker version
```

The return would be something like this: ```
Client:
 Version:           20.10.13
 API version:       1.41
 Go version:        go1.16.15
 Git commit:        a224086
 Built:             Thu Mar 31 19:20:32 2022
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server:
 Engine:
  Version:          20.10.13
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.15
  Git commit:       906f57f
  Built:            Thu Mar 31 19:21:13 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.13
  GitCommit:        9cc61520f4cd876b86e77edfeb88fbcd536d1f9d
 runc:
  Version:          1.0.3
  GitCommit:        f46b6ba2c9314cfc8caae24a32ec5fe9ef1059fe
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
```

- - - - - -

### Need docker-compose too?

You have two alternatives to install. See below: 

Install using [pip](https://pip.pypa.io/en/stable/) (*recommended*) ```
sudo pip3 install docker-compose
```

**OR**Manually install ```
wget https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m) 
sudo mv docker-compose-$(uname -s)-$(uname -m) /usr/local/bin/docker-compose
sudo chmod -v +x /usr/local/bin/docker-compose
```

To verify that the installation was successful, can you use the command: ```
docker-compose version
```

Should you see something like: ```
docker-compose version 1.29.2, build unknown
docker-py version: 5.0.3
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017
```

- - - - - -

### Bonus: install ctop

[ctop](https://github.com/bcicen/ctop) provides a concise and condensed overview of real-time metrics for multiple containers. ![ctop](https://raw.githubusercontent.com/bcicen/ctop/master/_docs/img/grid.gif)```
sudo wget https://github.com/bcicen/ctop/releases/download/v0.7.7/ctop-0.7.7-linux-amd64 -O /usr/local/bin/ctop
sudo chmod +x /usr/local/bin/ctop
```

That tip was given by [@marcelomichels](https://dev.to/marcelomichels); thanks!