Docker 작성

00_8_3·2021년 1월 29일
0

Docker와 Docker-compose

Docker는 무엇인가

Docker란 Go언어로 작성된 리눅스 컨테이너 기반으로하는 오픈소스 가상화 플랫폼이다.

간단히 말하면 어디서나 동일한 개발 환경을 제공 할 수 있습니다.

Docker-compose 란?

Docker compose는 yaml(또는 yml) 파일로 여러 개의 도커 컨테이너의 정의를 작성하여 한 번에 많은 컨테이너들을 작동시키고 관리할 수 있는 툴 입니다.

Docker 설치

도커 다운로드 URL에서 Docker for Window or Docker for Mac을 다운 받으면
Docker-compose도 같이 다운로드가 된다.

Docker --version Docker-compose --version으로 설치를 확인 할 수 있다.

Dockerfile 작성

FROM node:15.5.1-alpine3.12 as base

WORKDIR /app
COPY package*.json ./

ENV NODE_ENV=development \
    TZ=Asia/Seoul
RUN npm install && npm cache clean --force

RUN npm install -g typescript
RUN npm install -g sequelize-cli
  • FROM: Docker-Hub에 올라와 있는 어떤 이미지를 기반으로 할지 설정한다.
    이미지이름:tag
  • WORKDIR: 디렉토리 설정, /app을 root로 하는 폴더 생성(가상 환경에 생성)
  • COPY: package 이름이 들어가는 모든 json 파일을 ./(가상환경)으로 복사한다.
  • ENV: 환경 변수 설정
  • RUN: 셸 스크립트 또는 명령을 실행, 복사한 package.json의 dependency를 모두 설치 해준다.

Docker-compose.yml 작성

version: '3.7'

networks:
  app-tier:
    driver: bridge

services:
  server:
    networks:
      - app-tier
    build: .
    restart: unless-stopped
    command: npm run dev
    ports:
      - '3001:3001'
    environment:
      - PORT=3001
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=project-android
      - MYSQL_PASSWORD=password
    volumes:
      - ./:/app:delegated
      - /app/node_modules
    links:
      - mysql
    depends_on:
      - mysql

  mysql:
    networks:
      - app-tier
    image: mysql
    command: --lower_case_table_names=1
    restart: always
    ports:
      - '3307:3306'
    environment:
      - MYSQL_USER=root
      - MYSQL_ROOT_PASSWORD=password
      - MYSQL_DATABASE=project-android
      - MYSQL_PASSWORD=password
    volumes:
      - /var/lib/mysql
  • version: compose 파일의 버전을 의미한다.
  • networks: 기본적으로 Dockser-compose는 하나의 Default 네트워크에 모든 컨테이너를 연결 합니다. Default 네트워크 이름은 docker-compose.yml가 위치한 디렉토리 이름 뒤에 _default가 붙는데
    예를 들어, 디렉토리 이름이 app이라면 네트워크 이름은 app_default가 됩니다.
    $ docker network ls로 네트워크 목록을 조회 가능합니다.
    • networks 이해가 완벽하지 않아 추후에 수정하겠습니다.

  • services: 컨테이너들을 정의합니다.
  • server: server라는 이름으로 컨테이너 정의
  • networks: app-tier이름의 네트워크 정의
  • build: 특정 이미지 대신 build 옵션 사용 가능, build .는 default로 root 디렉토리의 Dockerfile을 갖습니다.
  • image: Dockerfile의 FROM과 비슷, docker-hub의 이미지를 불러온다.
  • restart: 재시작하는 옵션으로 no always on-failure unless-stopped을 갖습니다.
    • no : 수동으로 재시작
    • always : 수동으로 끄기 전 까지 항상 재시작
    • on-failure : 오류가 있을 시 재시작
    • unless-stopped : 명시적으로 중지되거나 도커 자체가 중지되는 경우 재시작

  • command: Dockerfile에서 CMD역할을 했던 명령을 Override 합니다. (Dockerfile과 같이 사용하는 경우 Dockerfile의 CMD명령이 아닌 Docker-compose의 command명령이 실행)
  • ports: 호스트와 컨테이너 포트를 설정합니다. Dockerfile에서 expose와 동일합니다.
  • environment: 환경 변수를 설정합니다.
  • volumes: 지정한 경로의 볼륨을 마운트 합니다.
  • depends_on: 서비스간 종속을 설정 합니다.

실행

docker-compose up root 디렉토리에서 터미널에서 실행하면 된다.
docker-compose up -d 백그라운드로 실행, 콘솔로 빠져나온다.
docker-compose up --build 서비스 시작 전 이미지를 새로 만든다.
docker-compose down 서비스 지운다.
docker-compose down --volume 볼륨과 같이 지운다.


pgAdmin4 추가

  pgAdmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    restart: always
    environment:
      - PGADMIN_DEFAULT_EMAIL=dohan@pgadmin.com
      - PGADMIN_DEFAULT_PASSWORD=passwd
      - PGADMIN_LISTEN_PORT=80
    ports:
      - '8080:80'
    volumes:
      - ./pgadmin/data:/var/lib/pgadmin
    depends_on:
      - pg
    links:
      - 'pg:pgsql-server'

localhost:8080으로 접속 후 이메일과 패스워드로 로그인을 한다.
그 후 Server 우 클릭 후 생성하기 해서 Host Namepgsql-server를 넣고 저장하면 db가 생성된다.

tip

npm

npm install --only=production

dependencies만 설치

npm install --only=development

devDependencies만 설치

docker

도커 윈도우를 설치 후 실행 하면 vmmem 프로세서가 메모리를 끝없이 잡아 먹는 것을 볼수 있습니다.
그럴 경우 C:\Users\유저이름.wslconfig파일을 만듭니다.

[wsl2]
memory=6GB
swap=0

메모리 부분을 유저의 PC 메모리 사양에 따라 설정 하시면 됩니다.

0개의 댓글