AWS EC2에 Docker 설치 및 Dockerfile로 웹서버 구동시키기

wimes·2020년 4월 7일
0

CI/CD tutorial

목록 보기
2/7

본 포스팅은 동빈나 님의 Docker 활용 및 배포 자동화 실전 초급을 보고 정리한 글입니다.

Docker 설치

Docker를 설치하기 전에 우리의 메모리가 얼마나 사용이 가능한지 체크를 해보도록 합니다.
df -h

sudo apt update

필요한 util들을 설치해주도록 합니다.
sudo apt install apt-transport-https

sudo apt install ca-certificates

sudo apt install curl

sudo apt install software-properties-common

이제 curl을 이용해서 docker를 설치해줍니다. 그 후 그 내용을 apt 기능을 위한 리스트에 추가해주도록 합니다.

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"

sudo apt update

이제 apt list에 도커를 다운로드 받을 수 있는 경로가 추가가 되었습니다.
도커를 다운로드 받도록 하겠습니다.
apt-cache policy docker-ce

다운로드가 완료되었으면 docker-ce를 설치하도록합니다.
sudo apt install docker-ce

*도커는 설치가 되면 자동으로 system service에 등록이 되기때문에 항상 실행할 수 있습니다.

docker로 웹서버 구동

docker로 본격적인 웹서버 구동을 하기 전에 test image를 받아 한번 실행해보도록하겠습니다.
sudo docker pull hello-world

sudo docker run hello-world

![image-20200407173445360](Docker 활용 및 배포 자동화 실전 초급2.assets/image-20200407173445360.png)

test를 마쳤으니 해당 container를 지워주도록 합니다.
sudo docker ps -a

sudo docker rm 87

container를 지우더라도 image가 남아있기 때문에 언제든지 run 명령어를 이용해 실행할 수 있습니다.

Dockerfile 작성하기

cd ~

mkdir example

sudo vim Dockerfile 도커파일은 항상 Dockerfile이라는 이름을 가지고 있어야합니다.

FROM ubuntu:18.04 # server image는 ubunutu 18.04를 사용
MAINTAINER Wimes <dev.wimes@gmail.com> # Dockerfile 작성자

# image가 올라갔을 때 수행되는 명령어들
RUN apt-get update
# -y 옵션을 넣어서 무조건 설치가 가능하도록 한다.
RUN apt-get install -y apache2 # install Apache web server (Only 'yes')

# apache가 기본적으로 80포트를 사용하기 때문에 expose를 이용해 apache server로 접근이 가능하도록 한다.
EXPOSE 80 # Open HTTP Port

# 명령어가 다 수행이 되고나면 도커는 곧바로 종료가 되기 때문에 apache가 항상 실행중인 상태로 만들어준다.
# apachectl을 foreground(즉, deamon)상태로 돌아가도록 한다.
CMD ["apachectl", "-D", "FOREGROUND"]

작성된 Dockerfile을 빌드해보도록 하겠습니다. docker image의 이름은 example이고 현재 경로(.) 에서 수행하도록 합니다.

sudo docker build -t example .

docker images 명령어를 통해 확인해보도록 합니다.

sudo docker images

ubuntu image 베이스로 만들기 때문에 ubuntu image가 만들어졌고, 위에 none이라고 나와있습니다.
이는 image 생성 시 무언가 잘못되었다는 것을 의미합니다.

이전에 dockerfile을 build했을 때 출력되는 에러를 한번 찾아보겠습니다.

80 포트가 잘못된 포트라고 알려줍니다.
EXPOSE 80 이라는 명령어를 적을 때 # 을 붙이면 안됩니다.(즉, 주석 불가)

다시 Dockerfile을 수정해주도록합니다.

sudo vim Dockerfile

FROM ubuntu:18.04 # server image는 ubunutu 18.04를 사용
MAINTAINER Wimes <dev.wimes@gmail.com> # Dockerfile 작성자

# image가 올라갔을 때 수행되는 명령어들
RUN apt-get update
# -y 옵션을 넣어서 무조건 설치가 가능하도록 한다.
RUN apt-get install -y apache2 # install Apache web server (Only 'yes')

# apache가 기본적으로 80포트를 사용하기 때문에 expose를 이용해 apache server로 접근이 가능하도록 한다.
# Open HTTP Port
EXPOSE 80 

# 명령어가 다 수행이 되고나면 도커는 곧바로 종료가 되기 때문에 apache가 항상 실행중인 상태로 만들어준다.
# apachectl을 foreground(즉, deamon)상태로 돌아가도록 한다.
CMD ["apachectl", "-D", "FOREGROUND"]

다시 빌드를 합니다.

sudo docker build -t example .

정상적으로 image가 만들어진 것을 확인 할 수 있습니다.

Dockrefile로 작성된 image 실행하기

image를 실행시킬건데 EC2의 포트와 example 포트를 연결해줄 필요가 있습니다.
-p {hostPort}:{container port}

sudo docker run -p 80:80 example

마찬가지로 AWS EC2 dashboard에 가서 보안그룹의 인바운드 규칙을 편집해주도록 합니다.

EC2 인스턴스의 80 포트에 접속했을 때 아래와 같은 화면이 나옵니다.

profile
iOS/Swift & Node.js Dev.

2개의 댓글

comment-user-thumbnail
2020년 4월 17일

docker file 작성후 빌드하면
'Error response from daemon: Dockerfile parse error line 1: FROM requires either one or three arguments'
위와 같은 에러가 발생하는데 무슨 문제 일까요..?

1개의 답글