AWS EC2에 docker를 이용한 정적 사이트를 아주 간단하게 배포해보기
개요
클라우드 환경에 docker를 이용한 미니멈한 정적 사이트(html, css, js 만으로 쓰여진)를 배포하는 과정
1. EC2 준비하기
인스턴스를 하나 생성하는데 이하의 조건이 충족해야 한다.
- 인스턴스에 탄력적 IP를 할당
- 보안그룹에서 정적 사이트를 배포할 포트를 하나 새로 생성
보안그룹 포트 생성 ↓
2. 인스턴스에 docker를 설치
ssh를 통해 인스턴스에 원격 접속을 하고
chmod 400 aws20221103.pem #굳이 이렇게 권한을 변경하는 이유는 ssh접속을 할 때 이 파일에 대한 권한이 너무 안맞으면 에러가 나면서 접속이 불가능하기 때문이다.
ssh -i key.pem ubuntu@고정IP주소
이하의 코맨드를 이용해 도커를 설치
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
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 $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce
# docker-compose 필요한 경우
sudo apt install docker-compose
버전이 잘 나오면 성공!
docker -v
3. FTP를 이용해 배포할 파일을 인스턴스에 업로드
Filzilla를 이용해 업로드
1. 접속할 리모트 서버 셋팅
2. 업로드 (드래그 앤 드롭으로 배포할 파일 옮기면 된다.)
4. 도커를 이용한 배포
이하의 코맨드를 ssh를 이용한 인스턴스 내부에서 실행한다.
docker run -d -p 7777:80 -v /home/ubuntu/startbootstrap-freelancer-gh-pages:/usr/local/apache2/htdocs httpd
run: pull, create, start를 합친 명령어로써 이미지가 없으면 가져와서 설치하고 컨테이너를 생성하고 컨테이너를 가동시킨다.
-d: 리눅스의 &과 비슷한? 느낌으로 도커의 실행을 백그라운드에서 하겠다 라는 의미
-p 7777:80: NAPT(Network Address Port Translation) 이라는 도커의 기술로 호스트PC의 특정 포트에 접근하면 도커 컨테이너 내부의 특정 포트와 연결 시켜주는 기술이다. 여기서는 호스트pc의 7777에 접속하면 도커의 80 포트에 연결하겠다 라는 의미
-v ${호스트PC의 파일 절대경로}:${컨테이너 안의 파일 절대경로}: 이건 호스트 PC안에 배포할 파일들을 컨테이너 안으로 집어 넣겠다라는 의미로 -v는 volumn의 약자라고 한다.
httpd: docker hub에 있는 apache의 공식 이미지이다. 이걸 가져와서 아파치 웹서버 이용해 내 정적 사이트를 배포하겠다.
docker run을 실행했을때 이하의 에러 발생시
Couldn't connect to Docker daemon at http+docker://localhost - is it running?
sudo usermod -aG docker $USER
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
sudo service docker restart
# 일단 종료하고 재접속해야 권한설정이 다시된다.
exit