Welcome to yet another Docker-themed post. In this post, we'll look at how to run Docker images in AWS EC2 instances. It's a straightforward process that combines Docker and AWS. Let's get to it.
Normally, I'm used to running containers directly on my MacOS laptop. However, I recently faced a situation where multiple individuals and systems needed to access the container. Naturally, it's not feasible to keep my laptop on 24/7 for this purpose, so I decided to shift to AWS. For this guide, I'll be using Amazon Linux 2 EC2 instance.
Please ensure that you choose Amazon Linux 2 and not Amazon Linux 2023 AMI.
Once the instance is up and running, SSH into it and run the following commands.
sudo yum update -y sudo amazon-linux-extras install docker sudo service docker start sudo systemctl enable docker sudo usermod -a -G docker ec2-user ! REBOOT ! docker version
Let's break down what these commands are doing
sudo yum update -y: This command updates all the packages to their latest versions on your Amazon Linux 2 instance. It's always a good practice to start with an updated system.
sudo amazon-linux-extras install docker: This is a specific command for Amazon Linux 2 that installs Docker. Amazon Linux 2 provides additional software through the
amazon-linux-extrastool. In this case, we're using it to install Docker.
sudo service docker start: This command starts the Docker service on the instance.
sudo systemctl enable docker: Ensures that Docker will start up automatically with the system every time your instance boots.
systemctlis a tool for controlling the initialization of system services, and by using the
enablecommand, we're setting Docker to auto-start.
sudo usermod -a -G docker ec2-user: This command adds the default
ec2-userto the Docker group. By doing this, you allow
ec2-userto run Docker commands without needing
sudofor each command.
! REBOOT !: This isn't a command but a reminder. After making these configurations, it's a good idea to reboot your instance to ensure all changes are properly applied.
docker version: Once the system is back up after the reboot, this command lets you check the installed version of Docker to confirm that everything is set up correctly.
ec2-user@ip-10-10-15-8 ~]$ docker version Client: Version: 20.10.23 API version: 1.41 Go version: go1.18.9 Git commit: 7155243 Built: Tue Apr 11 22:56:36 2023 OS/Arch: linux/amd64 Context: default Experimental: true !! Truncated !!
Run the Apache HTTPD Container
For this demonstration, we'll use the
httpd Docker image, which is an official image for the Apache HTTP Server.
[ec2-user@ip-10-10-15-8 ~]$ docker run -d --network host --name web-server httpd Unable to find image 'httpd:latest' locally latest: Pulling from library/httpd 360eba32fa65: Pull complete 2832a695827e: Pull complete b57c1299d233: Pull complete 45a0ea29816d: Pull complete 8c226ac2053e: Pull complete Digest: sha256:0adbefbee65176b93e4135f5c133072e2fb963187b00df565e6c73814894af5c Status: Downloaded newer image for httpd:latest 985852dd960a598e50f2e6a98a65b4d89a1cef6fdcb88b49db366e5fd5d0ad5b
When we issue the command
docker run -d --network host --name web-server httpd, we are instructing Docker to launch a new container based on the
httpd image, which is an official image for the Apache HTTP Server. The
-d flag ensures that the container runs in detached mode, meaning it operates in the background and won't tie up the terminal with log outputs. By specifying
--network host, we're telling the container to use the host network driver. This means that the Apache server in the container will directly bind to the host's IP address and port.
--name web-server portion of the command provides our container with a specific name, "web-server", rather than leaving Docker to assign a random default name.
Finally, you can navigate to
http://docker_host_ip:80 to view the web-page
Running Docker on AWS EC2 is easy and useful. It lets us use containers on a cloud server, making our apps available to everyone without keeping our own computers on all the time.