도커 (15) 썸네일형 리스트형 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 . >.. 9. 환경변수와 빌드인수 환경변수와 빌드인수 > docker build --build-arg > docker run --env 도커 이미지 빌드는 Dockerfile에 따라서 이루어지고, 도커 컨테이너의 실행은 도커 이미지에 따라서 이루어진다. 그런데 상황에따른 약간의 유연함은 항상 필요하다. 같은 Dockerffile로 빌드하더라도 상황에 맞게 일부 빌드 내용을 바꾸거나, 같은 이미지로 컨테이너를 실행하더라도 일부 설정을 다르게 해야할 수 있다. 이때 사용할 수 있는것이 환경변수와 빌드인수이다. 환경변수 // server.js ... app.listen(80); ... 위 코드는 nodejs로 작성된 웹서버이다. 마지막에 app.listen(80) 코드를 통해 80번 포트로 요청을 받아서 동작한다는 것을 알 수 있다. 이 소스.. 이전 1 2 다음