우노
[Docker] AWS EC2에서 Docker를 이용한 Apache 웹서버 구축 본문
AWS란?
- AWS(Amazon Web Service)는 아마존닷컴의 클라우딩 컴퓨팅 사업부이다. 현재 클라우드 분야에서 세계1위의 점유율을 차지하고 있다.
- 간단하게 말하자면 컴퓨터의 모든 기능을 AWS를 이용해 직접 서버나 컴퓨터를 구매하지 않고 간단하게 구현할 수 있다.
EC2란?
- Elastic Compute Cloud — 줄여서 EC2라고 한다.
- EC2는 AWS 서비스의 핵심으로써 사용자는 아마존의 가상컴퓨터를 임대받아 그 위에 자신만의 컴퓨터 프로그램을 실행해 원하는 기능을 컴퓨터를 따로 살 필요 없이 필요한 성능, 용량만큼 간단하게 구축할 수 있다.
- 이 서비스는 CPU사용량(연산횟수)으로 결제하는 것이 아닌 인스턴스를 켜 놓은 시간을 기준으로 결제하는 구조다.
EC2 인스턴스 생성
AWS 에 접속 후 지역은 Asia Pacific(Tokyo) ap-northeast-1 로 설정
AWS EC2 콘솔로 들어가 인스턴스 시작을 눌러 인스턴스 생성을 시작한다.
AMI 선택
- 인스턴스를 시작하는 최초의 설정(운영체제, 애플리케이션 서버, 애플리케이션)을 의미하며 이를 이미지라고 한다.
- Amazon Linux 2 AMI (HVM), SSD Volume Type 를 선택한다.
인스턴스 유형 선택
- 프리티어인 t2.micro 선택
인스턴스 세부 정보 구성
- 따로 건드릴 옵션이 없다면 넘어간다.
스토리지 추가
- 만약 당신이 더 많은 저장 공간이 필요하다면 초기설정보다 크기를 더 늘려주면 된다.
- 하지만 우리가 만들 인스턴스는 많은 저장 공간이 필요 없으므로 그냥 넘어간다.
태그 추가
- 인스턴스가 어떤 역할인지 누가 관리하는지 메모해 두는 것이다.
- 필요 없다면 넘어간다.
보안 그룹 구성
- 인스턴스의 트래픽을 제어하는 방화벽 규칙을 구성하는 단계이다.
- Default로는 SSH 22번 포트가 열려 있다.
- 외부에서 EC2 Instance로 접근 가능하도록 포트를 추가로 열어준다.
- Type : HTTP
- Port range : 80
- Source : Anywhere
- 인스턴스 생성 후에도 수정이 가능하다.
- 설명 작성 시 한글이면 인스턴스 생성이 안 되니 꼭 영어로 작성해주자.
키페어 생성
- 마지막으로 이 인스턴스의 비밀번호와 같은 키 페어를 지정 해준다.
- 기존에 존재하는 키페어를 사용하거나 새로 생성할 수 있다.
- pem key는 인스턴스에 접속 할 수 있는 유일한 키이므로 자신이 잘 기억하고 관리할 수 있는 공간에 저장해 둔다.
- 재발급의 과정이 매우 복잡하니 꼭 잘 관리하자.
- 이 인스턴스에 접근 할 때 필요한 키 페어를 지정 한 후 인스턴스를 시작하면 인스턴스가 구동되기 시작한다.
EC2 Instance 접속
EC2 Instance에 접속하는 방법은 EC2 Instance Connect, Session Manager, SSH Client가 있다.
SSH Client로 접속
SSH 클라이언트를 연다.
인스턴스 생성 시 발급한 개인 키 파일을 찾는다.
개인 키 파일의 권한을 수정한다.
chmod 400 capstone.pem
개인키와 Public DNS를 사용하여 인스턴스에 연결한다.
ssh -i "capstone.pem" ec2-user@ec2-54-168-186-158.ap-northeast-1.compute.amazonaws.com
패키지 업데이트
sudo yum update -y
Docker 설치 및 실행
Docker 설치
아래 명령 실행 후 재접속
sudo yum update -y sudo yum install docker -y sudo service docker start sudo usermod -a -G docker ec2-user
Docker 설치 확인
설치되어 있는 이미지 확인
docker search ubuntu
Apache Dockerfile 작성
Container는 Dockerfile → image → container 의 구조로 생성됩니다.
따라서 Dockerfile부터 작성 해야합니다.
도커파일은 항상 Dockerfile이라는 이름을 가지고 있어야합니다.
cd ~ mkdir apache-dockerfile && cd apache-dockerfile vim Dockerfile
Dockerfile 내부
# server image는 ubunutu 18.04를 사용 FROM ubuntu:18.04 # Dockerfile 작성자 MAINTAINER Wimes <yms04089@kookmin.ac.kr> # image가 올라갔을 때 수행되는 명령어들 # -y 옵션을 넣어서 무조건 설치가 가능하도록 한다. RUN \ apt-get update && \ apt-get install -y apache2 # apache가 기본적으로 80포트를 사용하기 때문에 expose를 이용해 apache server로 접근이 가능하도록 한다. EXPOSE 80 # 컨테이너가 생성 된 이후에 내부의 아파치 서버는 항상 실행중인 상태로 만들어준다. # apachectl을 foreground(즉, deamon)상태로 돌아가도록 한다. CMD ["apachectl", "-D", "FOREGROUND"]
- Dockerfile 작성 방법은 다음을 참고하세요.
생성한 Dockerfile을 Image로 빌드
docker image의 이름은 apache-image이고 현재 경로(.) 에서 수행하도록 합니다.
docker build -t apache-image .
image 빌드 확인
docker images 명령어를 통해 확인합니다.
docker images
웹에 띄울 html 파일 생성
보통 웹으로 띄울 html 파일을 아파치 서버에 추가하고 싶을 땐
Dockerfile의 ADD / COPY를 통해 호스트의 파일을 아파치 서버 옮기는 명령어를 작성 후 빌드합니다.
하지만 이렇게 하면 호스트의 html 파일과 아파치 서버의 html 파일이 동기화 되어 있지 않기 때문에 매번 build를 해줘야합니다.
우리는 그럴 시간이 없습니다.
따라서 도커 볼륨을 사용해 호스트의 html 파일을 만들어놓고, 도커 컨테이너에서 그 파일에 접근해서 사용하는 방법으로 동기화 할 것입니다.
우선 호스트에 index.html 파일을 생성 및 수정합니다.
cd ~ mkdir html && cd html vi index.html
Hello world
image 로 Container 생성
이제 컨테이너 생성 시 도커 볼륨을 통해 host와 도커 컨테이너의 html 폴더를 동기화 하겠습니다.
docker run --name apache-container -d -p 80:80 -v ~/html/:/var/www/html apache-image
- --name : 컨테이너 이름
- -d : 백그라운드모드로 실행
- -p : [호스트포트][컨테이너포트] 포트 연결
- -v : 로컬과 컨테이너 파일 연동
접속 확인
- EC2 Instance의 Public DNS를 80번 포트로 접속해 접속을 확인합니다.
'DevOps > Docker' 카테고리의 다른 글
[Docker] Dockerfile 개념 및 작성법 (0) | 2020.10.06 |
---|---|
[Docker] AWS EC2에서 Docker를 이용한 Nodejs 웹서버 구축 (0) | 2020.10.04 |
[Docker] Image 생성 및 삭제 (0) | 2020.07.16 |
[Docker] Container 생성, 접속, 삭제 (0) | 2020.07.16 |
[Docker] AWS EC2 Docker 설치 (Linux, Ubuntu) (0) | 2020.07.02 |