!!!사실과 다른 부분이 있다면 지적해주시면 감사하겠습니다..!!!
도커로 ec2에서 배포하는 시나리오는 다음과 같다.
- 작성한 코드를 이미지화.
- 이미지를 도커허브에 배포
- EC2 인스턴스 생성
- EC2 환경에서 도커 설치 및 도커 이미지 Pull
- 도커 컨테이너 실행
도커파일은 다음과 같이 작성했다.
FROM node:19-alpine
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
CMD ["npm" , "run", "dev"]
이전 포스팅에서 작성한 것과 거의 동일하다
다음 명령어로 이미지를 빌드한다.
docker build --platform linux/amd64 -t holywatter/matching .
linux에서 돌리기 위해서
--platform linux/amd64 명령어를 꼭 같이 입력해줘야한다.
이미지파일 이름도 도커허브의 레포지토리 이름을 미리 알고 있다면 똑같이 작성해주면된다.
도커 허브에 접속한다. (아이디가 없다면 회원가입)
버튼을 눌러 레포지토리 생성을 한다.
다음과 같이 생겼는데 Name과 description은 간단하게 작성하자.
생성된 레포지토리는 다음과 같이 생겼다 이제 여기에 push를 하면 된다..
터미널로 돌아와 docker images로 만들어진 이미지들을 확인한다.
이미지의 이름과 레포의 이름이 동일해야한다.
따라서 이미지의 이름이 레포의 이름과 다르면 다시 빌드를 해야하지만 이름을 바꿔서 간단하게 복제하는 명령어가 있다..
docker tag [현재 이미지 이름] [바꿀이름]
으로 입력하면 된다
이름을 맞춰줬으면 push를 하면된다.
docker push holywatter/matching:latest
이렇게 입력하면 어쩌면 위와 같은 오류를 반환할지도 모르는데,, 권한이 없어서 로그인을 해야한다.
docker login을 치고 아까 도커허브에서 사용했던 아이디와 패스워드를 사용해서 로그인한다.
이후에 다시 명령어를 입력하면 정상적으로 올라갔다.
도커 허브 사이트에도 정상적으로 올라간 것을 확인!
1) 이름 및 태그, OS이미지, 인스턴스 유형
이름 및 태그는 간단하게 작성했고
OS이미지는 Linux로 설정했다. (필요한 운영체제에 맞게,, 보통 ubuntu 아니면 linux... )
인스턴스는 프리티어로 설정했다. (필요한 성능에 맞게!)
2) 키 페어 (접근권한을 위해서 필수설정)
키페어 이름을 설정하고 생성을 하면 파일이 다운로드 되어진다..
⛔️ 키페어는 없어지면 안되니,, 디렉토리에 저장을 해두고,, 이 키페어가 노출되면 어디서나 접근을 해서 채굴을 하는 경우도 있다고 하니 조심해서 관리하도록하자...⛔️
3) 네트워크 설정
초기에는 창이 다음과 같다. 오른쪽 위에 편집 버튼을 누르자
ssh에 처음에 소스유형애 0.0.0.0/0이 되어있는데 어디서나 내 인스턴스에 접근이 가능하게 설정하는 것으로,, 내 IP로 바꿔준다.
배포한 사이트가 다른 사람들에게 접근이 가능해야하므로 HTTP도 보안그룹에 추가시켜줘야한다.
4) 스토리지구성과 요약은 기본설정으로 두고 넘어갔다.
우선 만든 인스턴스를 내 로컬에서.. 실행해야한다.
다음 블로그 포스팅을 참조했다..
https://zzang9ha.tistory.com/338?category=999709
1) ssh key생성
터미널에서 다음 입력 설정창에서 엔터 쳐서 넘어감.
ssh keygen
2) ssh key 생성 디렉토리에 키페어파일(.pem)복사 및 권한설정
cp [키페어파일 경로]/[파일명.pem] ~/.ssh/
chmod 600 [키페어파일이름.pem]
3) config파일 생성 및 권한설정
다음 명령어 입력해서 config 파일 작성
vim config
Host는 실행명령어 키 (ssh 키이름 으로 앞으로 실행할 수 있다.)
HostName 은 aws인스턴스의 Ip주소를 입력해주었다.
User은 네트워크 커넥션에 사용되는 계정명
IdentityFile은 pem키의 위치를 적어준다.
저장 후 종료
권한설정
chmod 700 config
이후 ssh Host이름을 터미널에서 입력하면 linux가 실행된다..
sudo yum install docker
sudo systemctl start docker
sudo groupadd docker
sudo usermod -aG docker $USER
sudo systemctl restart docker
docker pull [레포지토리 이름]
권한이 없다고 뜨면 로그인..
docker run -p 80:3000 [이미지 이름]
아까 http설정을 80번 포트로 해놨기 때문에 80으로 내보내주고 도커환경에서는 3000번에 실행되기 때문에 3000으로 설정 해 두었다..
아마존 도메인 상에서 잘 돌아가는 모습...
aws가 아직 익숙하지 않아서 정말 많이 헤매고 힘들었지만 그래도 해내서 뿌듯...
아직 내것이 아니므로,, 더욱 공부해야겠다..
보안과 네트워크 부분을 잘 몰라서 헤맸으니까,, 그쪽도 이제 공부를 해야겠다.
다음에는 https설정도 해봐야겠다..