글

라벨이 container인 게시물 표시

Docker 도커 컨테이너 안에 TimeZone을 Dockerfile으로 셋팅하기

이미지
개발을 진행하다 보면 컨테이너 안의 TimeZone을 UTC 기준이 아닌 다른 시간대로 설정해야 하는 상황이 생깁니다. 컨테이너를 생성하면서 TimeZone을 변경하는 방법은 Dockerfile를 수정하면 됩니다. 저는 NodeJS을 사용하기 때문에 Base 이미지를 node로 하도록 하겠습니다. 일단 TimeZone을 셋팅하지 않은 상태에서 시간을 측정해보겠습니다. 먼저 간단한 서버를 작성합니다. (index.js) const http = require ( "http" ) const host = "localhost" const port = 8000 const requestListener = function ( req , res ) { res . writeHead ( 200 ) res . end ( "My first server!" ) } const server = http . createServer ( requestListener ) server . listen ( port , host , () => { console . log ( `Server is running on http:// ${ host } : ${ port } ` ) }) 먼저 일반 node 이미지로 작성한 Dockerfile입니다. # Base 이미지를 사용합니다. # FROM node:20.10.0 FROM node:20.10.0 # 코드들을 도커 이미지로 이동시킵니다. COPY . . # 서버의 노출된 포트를 표시한다 EXPOSE 8000 # nodejs 서버를 실행한다. CMD [ "node" , "index.js" ] 해당 Dockerfile을 기준으로 이미지를 생성합니다. 해당 이미지를 기준으로 컨테이너를 생성하고 컨테이너 내의 시간을 확인합니다. 위 터미널에서 나온것과 같이 UTC시간이 Default인것을 알...

docker-compose NodeJS(NestJS) 적용하기 -2

이미지
 이번에는 기존의 docker-compose를 이용하여 server에 postgers를 연결하도록 하겠습니다. 이전글 : docker-compose NodeJS(NestJS) 적용하기 -1 진행하기 전에 Docker와 Docker-Compose가 설치되 있어야 하고 OS는 Ubuntu(Linux)를 사용합니다.  docker install by terminal : ubuntu 20.04 docker-compose Ubuntu Install 먼저 해당 프로젝트에 '@nestjs/typeorm' 'pg'를 yarn으로 설치해 줍니다. $ yarn add @nestjs/typeorm pg typeorm copy 해당 typeorm 및 pg연결은 아래 링크를 참고해 주시기 바랍니다. mysql이라 하더라도 pg(postgres)으로 변경하면 됩니다. 링크1 : nest js -5 Connect to DataBase(mysql) with TypeORM 'docker-compose'파일에 변경사항이 있으니 참고해 주시기 바랍니다. --build를 추가하여 변경된 코드를 반영합니다. $ docker-compose up --build -d copy docker-compose up --build -d 이후 진행을 하면 database와 정상적으로 연결된 것을 알수 있습니다. 해당 gitHub(branch : docker-compose_NodeJS_NestJS_적용하기-1 -> docker-compose_NodeJS_NestJS_적용하기-2) 이후글 : docker-compose NodeJS(NestJS) 적용하기 -3

Docker MongoDB Container 생성하고 사용하기

이미지
 보통 MongoDB를 셋팅하는데 많이 귀찮습니다. 특히 MongoDB를 처음 셋팅할때는 자료들을 찾아봐야 합니다. 위 작업은 기본적으로 Docker가 설치되 있어야 합니다. 설치방법은 아래 링크를 참고해 주시기 바랍니다. 링크 : docker install by terminal : ubuntu 20.04 공식 MongoDB Image 사이트 : https://hub.docker.com/_/mongo 1) 도커 컨테이너로 MongoDB생성하기 - MongoDB 이미지를 이용하여 NoSQL 컨테이너를 만들기 $ docker run --name [컨테이너 이름] -p [지정할 포트]:27017 -e MONGO_INITDB_ROOT_USERNAME="[유저이름]" -e MONGO_INITDB_ROOT_PASSWORD="[비밀번호]" -d mongo:[테그] copy 만약 처음 셋팅한다면 위 사진과 같이 도커에서 이미지를 다운을 받을 것입니다.  이제 컨테이너가 구동이 되면 위 사진과 같이 돌아가는것을 확인할수 있습니다. 2) 도커 컨테이너로 접속하기(바로 mongosh로 접속) - MongoDB 컨테이너에 접속하기(mongosh) : admin mongosh mongodb://[username]:[password]@[ip address]:[port]/admin copy 위 방법으로 mongosh를 이용하여 mongoDB에 접속을 할수 있습니다. 하지만 mongosh가 local에 설치해야 한다는 문제가 있습니다. 이때는 docker container로 접속해서 직접 mongosh를 실행하는 방법이 있습니다. 3) 도커 컨테이너로 접속하기(컨테이너로 접속후 mongosh로 접속하기) - 해당 컨테이너에 접속 docker exec -it [컨테이너 이름 또는 id] bash copy - 접속한 컨테이너에서 mongosh를 실행하여 mongodb에 접속 mongosh mongodb...

docker 도커에 환경변수(environment file)파일을 외부에 적용하기

이미지
 도커를 이용하여 컨체이너를 만들다보면 환경변수 파일을 어떻게 적용해야할지 난감한 경우가 있습니다. 단순한 방법으로 환경변수 파일까지 갖이 이미지로 만든 다음에 컨테이너로 만드는 방법이 있습니다. 이 방법은 다른 환경의 서버에서 적용할려면 각각의 서버에 이미지를 다 만들어야 하는 불편함이 있습니다. 관련 gitHub 링크 : https://github.com/Alex-Choi0/docker_nestjs_env.git 위의 링크에서 코드를 클론(branch : master)받으시고 아래 사진과 같이 이미지를 만듭니다. 필요한 의존성 이미지를 받고 Dockerfile을 기준으로 커스텀 이미지를 생성하게 됩니다. 커스텀 이미지의 태그는 'nestjs:env'입니다. 도커 이미지를 attach 모드로 컨테이너를 생성하면 위와 같은 에러가 나오는 것을 알수 있다. 해당 에러는 환경변수 'DATABASE_HOST'가 설정되지 않았다는 뜻이다. '.dockerignore'에서 확인하면 해당 env파일은 이미지에 들어가지 않았다. 따라서 컨테이너를 생성할때 env 파일을 지정해 줘야 한다. 위 사진과 같이 '.env'파일이 적용된 것을 확인할수 있습니다. 정상적으로 적용되어 NestJS 서버가 동작하는 것을 알수 있습니다. 하지만 개발용과 배포용 환경변수파일이 따로 있다면 어떻게 해야 할까요? 관련 gitHub 링크 : https://github.com/Alex-Choi0/docker_nestjs_env.git 위 링크에서 custom_env branch를 클론 위 링크에서 custom_env branch는 '.env'가 아닌 '.development.env'를 사용합니다. 따라서 컨테이너를 생성시 아래와 같이 작성해야합니다. 이후 정상 동작 되는것을 확인할수 있습니다.

Docker PostgreSQL Container 생성하고 사용하기

이미지
 보통 DBMS를 셋팅하는데 많은 시간이 걸립니다. 특히 PostgreSQL을 처음 셋팅할때는 기본이 Local에서만 접속할수 있고 config파일을 수정하고 재시작 해야지만이 외부에서 접속이 가능합니다. 위 작업은 기본적으로 Docker가 설치되 있어야 합니다. 설치방법은 아래 링크를 참고해 주시기 바랍니다. 링크 : docker install by terminal : ubuntu 20.04 1) 도커 컨테이너로 postgres생성하기 - postgresql 이미지를 이용하여 DataBase 컨테이너를 만들기 $ sudo docker run -p [접속할려는 포트]:5432 --name [컨테이너 이름] -e POSTGRES_PASSWORD=[비밀번호] -e TZ=Asia/Seoul -d postgres:12 copy 사진1) postgres 컨테이너 생성 사진2) postgres 접속 TZ=Asia/Seoul은 서울 타임존을 말한다. 필요시 다른곳으로도 옮길수 있습니다. 그리고 '-d postgres:12'은 postgres버전 12를 사용한다는 뜻입니다. 다른버전도 사용할수 있습니다. 그리고 컨테이너 안에 있는 데이터는 '/var/lib/postgresql/data'안에 있습니다. 컨테이너 밖으로 저장해야 할시 '-v [로컬경로]:/var/lib/postgresql/data'를 컨테이너 생성할때 추가하면 됩니다. 더 좋은점은 초기 셋팅과 달리 외부에서도 DB에 접근이 가능하다는 것입니다.

docker 도커를 이용하여 컨테이너(CONTAINER) 생성하기 : NestJS 사용

이미지
 안녕하세요. 저번에 이어서 이번에는 컨테이어를 만들어보겠습니다. 컨테이너를 만들기 위해서는 이미지가 필요합니다. 이전글을 참고해 주세요 이전글 : docker 도커를 이용하여 이미지(IMAGE) 생성하기 : NestJS 사용 이제 이전에 만든 이미지를 이용하여 컨테이너를 만들도록 하겠습니다. $ docker run -p [LOCAL PORT]:[CONTAINER PORT] [IMAGE ID OR REPOSITORY:TAG] copy 사진1) 이미지를 이용하여 컨테이너 생성 사진1과 같이 해당 터미널을 실행하면 위와 같이 NestJS가 컨테이너로 생성되면서 실행 되는 것을 알수 있습니다. 사진2) Local로 3000포트 접속  사진2에서 Local의 3000포트에 접속시 컨테이너 안의 NestJS서버와 정상적으로 연결이 됩니다. 그  이유는 Local에서 접속한 포트와 컨테이너에서 노출한 포트가 같기 때문입니다. 사진3) 도커 컨테이너 생성 터미널  터미널로 도커 컨테이너 생성시 실제 Local에서 접속하는 터미널은 [LOCAL PORT]입니다. 이때 컨테이너 내부에 연결되는 포트는 [CONTAINER PORT]입니다. 위 예제에서 3000:3000으로 연결했기 때문에 3000포트에 연결 됬지만 2500:3000으로 할시 Local에서는 2500포트로 접속해야 해당 컨테이너의 3000포트에 접근할수 있습니다. 다른터미널로 현재 돌아가고 있는 컨테이너 확인하기 $ docker ps copy 사진4) 현재 돌아가는 컨테이너 리스트 위 터미널을 이용하여 현재 실행되고 있는 컨테이너와 그 정보들을 알수 있습니다. 그런데 이미지와 마찬가지로 NAME을 따로 지정을 할수 있습니다. 현재 컨테이너를 삭제한 후 새로 생성하도록 하겠습니다. 실행하고 있는 컨테이너를 정지하기 $ docker stop [CONTAINER ID OR NAME] copy 사진5) 도커 정지 Name을 지...

Docker 개념

이미지
  안녕하세요. 알렉스 입니다. 제가 Docker 스택을 배우고 있습니다. 사용하면서 배운 내용들을 블로그 글로 정리할려고 합니다.  도커는 컨테이너를 이용하여 프로그램을 구동하는 방식입니다. 각각의 개발자들은 서로 다른 환경을 갖고 있고 그것을 일원하 하는데에도 많은 시간이 걸립니다. 이미 잘 동작되는 환경과 프로그램을 하나의 모듈로 만들고 그것을 필요한 요소마다 가져다 쓸수 있는것이 Docker Image 입니다. 사진1) Docker File에서 IMAGE 생성 지금은 개념만 알기 위해서 사진1과 같이 나타내지만 'Docker File'은 Docker Image를 생성하기 위한 문서 입니다. 이 문서를 이용해서 IMAGE를 생성합니다. IMAGE안에 단순히 코드 뿐만 아니라 추가로 받아야 할 다른 이미지, 작동 경로와 코드, 그외의 파일 및 실행방법들을 이미지로 만들어 줍니다. 이때 주의할 점은 아직 앱처럼 사용할수 없다는 것입니다. 이미지를 이용해서 컨테이너를 만들어야 비로서 서비스를 할수 있습니다. 사진2) IMAGE로 Container생성 사진2와 같이 이제 이미지로 컨테이너를 생성합니다. 이 컨테이너는 독립된 공간으로 최소한의 리소스를 이용하여 운영이 됩니다. 필요시 IMAGE를 이용하여 여러개의 칸테이너를 생성할수 있습니다. 사진3) Docker로 통신방법  도커의 컨테이너는 고립된 공간이다. 따라서 Local PC가 Container와 통신하기 위해서는 설정을 해줘야 한다. 외부에서 접속할때 허용하는 'Local PORT'가 3000이라고 예를 들겠다. 외부 어디든 3000포트를 통해 PC에 접속할수 있다 하지만 아직 도커의 컨테이너에는 접속할수 없다.  도커만 설치되어 있으면 설사 환경이 셋팅이 되지 않더라도 컨테이너를 통해서 해당 앱을 실행할수 있습니다.  이때 도커 컨테이너 안에서도 포트를 허용한다. 도커 내부에서 운영되는 서비스의 포트는 5000이다. 이때 'Local PORT'와 'Co...