본문 바로가기

STUDY/Docker & Kubernetes: 실전 가이드 -2022년판

(17)
15. 도커 배포 프로세스: AWS ECS 활용2 다중 컨테이너 서비스 여기 2개의 컨테이너로 goals 서비스의 docker-compose 파일이 있다. 이 서비스는 backend와 mongodb 컨테이너가 각각 동작하면서 사용자로부터 정보를 입력받아서 저장하고 보여준다. 이렇게 다중 컨테이너로 동작하는 서비스를 ECS로 올려보고자 한다. // backend의 app.js 파일 ... mongoose.connect( `mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@mongodb:27017/course-goals?authSource=admin`, { ... ECS로 컨테이너들을 올리기 전에 수정해야하는 부분이 있다. 위의 코드는 backend에서 mongodb에 접속하..
15. 도커 배포 프로세스: AWS ECS 활용1 EC2를 활용한 배포의 단점 앞서 해본 EC2를 활용한 도커 배포는 여러가지 단점이 있다. 먼저 서비스에 수정사항이 있다고 생각해보자. 먼저 로컬에서 소스를 수정하고 새로 이미지를 빌드한다. 그리고 새로운 이미지를 도커 허브에 업로드 한다. 이제 EC2 인스턴스로 이동하여 업로드된 이미지를 다시 가져오고, 컨테이너를 재시작 하면 서비스 수정이 완료된다. 이처럼 로컬과 EC2 인스턴스를 이동하며 작업을 진행해야하는 번거로움이 있다. 그리고 컨테이너가 EC2 인스턴스에서 실행되기 때문에, 해당 EC2 인스턴스를 생성하고 설정 및 관리하는 역할까지 수행해야한다. AWS ECS AWS ECS란 AWS에서 제공하는 완전관리형 컨테이너 배포 및 관리 서비스이다. EC2를 사용할 때는 컨테이너 및 서버를 관리하는 것..
14. 도커 배포 프로세스: AWS EC2 활용 NodeJS App 배포해보기 위와같이 단순한 화면을 출력하는 NodeJS 앱을 도커로 배포해보려고한다. 먼저 개발환경(로컬)에서 소스를 바탕으로 도커 이미지를 빌드하고 그 이미지를 도커 이미지 레지스트리(도커 허브)에 업로드 할 것이다. 그리고 배포환경(EC2)에서 해당 이미지를 가져오고 컨테이너를 실행하여 사용자에게 서비스를 제공하는 것을 목표로 한다. 이미지 생성 및 업로드 도커 배포를 위해서는 도커 이미지 레지스트리에 이미지를 업로드 해야 한다. 이를 위해서 도커 허브에 my-nodejs-app 이름의 이미지 레포지토리를 생성하였다. // .dockerignore 파일 node_modules Dockerfile > docker build -t my-nodejs-app . > docker tag m..
13. 유틸리티 컨테이너 어플리케이션 컨테이너 VS 유틸리티 컨테이너 우리가 지금까지 만들어온 컨테이너는 일반적인 어플리케이션 컨테이너이다. 어플리케이션 컨테이너는 실행환경와 어플리케이션을 모두 포함하고 있고 그 어플리케이션을 실행하기 위해 존재한다. 그에 반해 유틸리티 컨테이너는 실행환경만 포함하고 있다. 즉 nodejs, jdk 등 실행환경은 있으나 실제 동작시킬 앱은 없다는 말이다. 그렇다면 유틸리티 컨테이너는 왜 필요한 걸까? 여러 어플리케이션을 개발하다보면 여러 개발환경을 세팅하느라 번거로운 경우가 많다. 심지어 같은 nodejs라도 다른 버젼으로 다시 설치해야 하는 경우도 있다. 이때 유틸리티 컨테이너를 사용하면, 로컬에 환경을 세팅할 필요 없이 유틸리티 컨테이너를 통해 해당 환경이 세팅된것처럼 명령어를 사용할 수 있..
12. 도커 컴포즈: 다중 컨테이너 오케스트레이션 다중 컨테이너 일반적으로 하나의 서비스는 여러 컨테이너로 구성되어있다. 가장 단순한 To-Do 앱을 생각하더라도 사용자가 접속할 화면인 Frontend를 위한 컨테이너, 기능을 수행할 Backend 컨테이너 그리고 데이터를 저장할 database 컨테이너가 필요하다. 그리고 각각의 컨테이너는 상황과 역할에 맞게 컨테이너를 실행해주어야 한다. > docker network create goals-net > docker run -d --rm --name mongo --network goals-net -v goals-mongo:/data/db -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=secret mongo > docker build ..
기타: Docker commands
11. Docker로 다중 컨테이너 어플리케이션 구축 실습할 어플리케이션 여기 Goals 서비스가 있다. 유저는 목표를 추가할 수 있고, 추가된 목표들이 화면에 나타난다. 그리고 추가된 목표를 클릭하여 삭제할 수도 있다. 이 서비스에는 유저가 접속할 Frontend와 목표를 추가하고 제거하는 API가 있는 Backend, 그리고 목표 데이터를 저장한 Database가 필요하다. 이 각각의 요소들을 다중 컨테이너로 구축해보고자 한다. 컨테이너화 어플리케이션은 Database, Backend, Frontend로 구성되어있고 이를 각각 컨테이너로 구성해야한다. Database는 MongoDB로 구동되고 컨테이너가 중지되어도 저장된 데이터는 유지되어야한다. 그리고 Backend에서만 해당 데이터에 접근할 수 있도록 접근 제한이 되어야 한다. Backend는 Nod..
10. 네트워킹: 컨테이너 통신 통신의 종류 스타워즈 영화와 인물들을 검색하고 선호하는 영화와 인물을 저장하고 관리할 수 있는 favorite 어플리케이션이 있다. 이 어플리케이션으로 3가지의 네트워크 통신을 테스트해보고자 한다. 먼저 인터넷을 통한 어플리케이션과 외부 API와의 통신이다. favorite는 swapi.dev의 api로 요청을 보내서 스타워즈의 영화와 인물 정보를 가져온다. 그 다음은 컨테이너와 로컬 호스트의 통신이다. favorite는 localhost의 mongodb에 사용자의 데이터를 저장할 것이다. 마지막으로 컨테이너간의 통신이다. 이는 favorite의 사용자 데이터를 로컬호스트가 아니라 새로운 mongodb 컨테이너를 띄워서 저장할 것이다. 외부와의 통신 > docker build -t favorite . >..