Docker에 대해서 잠깐 알아보기

예빈·2022년 8월 17일
0

ETC

목록 보기
5/15
post-thumbnail

Docker란? 🐳

컨테이너를 사용해서 응용프로그램을 더 쉽게 만들고 배포하고 실행할 수 있도록 설계된 오픈소스 가상화 플랫폼이다. 서버를 구축할 때 운영체제, 컴파일러, 패키지 등에 따라 차이가 발생하게 되는데, 도커는 작업자가 원하는 시점의 서버 상태를 정해둘 수 있기 때문에 항상 똑같은 상태의 서버를 만들 수 있게 해준다.


Dockerfile

Dockerfile은 컨테이너에 설치해야하는 패키지, 소스코드, 명령어, 환경변수설정 등을 기록한 하나의 파일이다. 이를 빌드하면 Docker image가 생성된다.
이때, Dockefile은 개발환경 파일운영환경 파일 두개를 이용하는것이 일반적이다.


Dokerfile 작성

# 베이스 이미지로 사용할 노드 설치
FROM node:alpine

# 리액트를 저장할 컨테이너의 경로로 이동(=cd)
WORKDIR /app

# /app/node_modules/.bin을 $PATH에 추가
ENV PATH /app/node_modules/.bin:$PATH

# package.json을 /app/package.json에 복사
COPY package.json /app/package.json

# 명령어로 package.json을 설치
RUN npm install

# 컨테이너가 시작할 때 사용할 명령어
CMD ["npm", "start"]

Dockerfile은 개발단계를 위한 것(Dockerfile.dev)과 실제 배포 후를 위한 것(Dockerfile)을 따로 작성하는 것이 좋다고 하지만, 여기서는 연습삼아 Dockerfile만 사용해보겠다.


docker-compose


여러개의 컨테이너로부터 이루어진 서비스를 구축, 실행하는 순서를 자동으로 하여 관리를 간단하게 하는 것으로, 여러개의 컨테이너 설정 내용을 하나의 yaml 파일에 모아서 사용한다. compose 파일을 준비해서 커맨드를 1번 실행하는 것만으로 그 파일로부터 설정을 읽어들여 모든 컨테이너 서비스를 실행시킬 수 있다.


docker-compose 작성

version: "3.7"

services:
  app:
    container_name: pick-up-app
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ".:/app"
      - "/app/node_modules"
    ports:
      - "3000:3000"
    environment:
      - NODE_ENV=development
    stdin_open: true
    tty: true

마지막의 두 줄 stdin_open: true tty: true은 docker가 interactive mode를 유지하기 위한 명령어이다. 컨테이너를 종료하지 않은채로, 터미널의 입력을 계속해서 컨테이너로 전달하기 위해서 사용한다. 이게 없다면 volumes을 이용하더라도 react의 변경 내용이 바로 반영되지 않는다.


docker 실행

아래 명령어로 Docker-compose.yml을 실행시켜주면, docker 이미지와 컨테이너가 실행이 된다.

docker-compose up -d --build
[+] Building 2.3s (9/9) FINISHED                                                                                       
 => [internal] load build definition from Dockerfile                                                              0.0s
 => => transferring dockerfile: 476B                                                                              0.0s
 => [internal] load .dockerignore                                                                                 0.0s
 => => transferring context: 2B                                                                                   0.0s
 => [internal] load metadata for docker.io/library/node:alpine                                                    2.2s
 => [internal] load build context                                                                                 0.0s
 => => transferring context: 34B                                                                                  0.0s
 => [1/4] FROM docker.io/library/node:alpine@sha256:0738685cff8a6bbace6a8f308986729e9b31b07083de252d3b2a321473f9  0.0s
 => CACHED [2/4] WORKDIR /app                                                                                     0.0s
 => CACHED [3/4] COPY package.json /app/package.json                                                              0.0s
 => CACHED [4/4] RUN npm install                                                                                  0.0s
 => exporting to image                                                                                            0.0s
 => => exporting layers                                                                                           0.0s
 => => writing image sha256:8892ef357e9edff2cc55ffc7c8a11e7fbba3683116169e2901a2ba5ef767107d                      0.0s
 => => naming to docker.io/library/pick-up-web_sample                                                             0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 2/2
 ⠿ Network pick-up-web_default  Created                                                                           0.1s
 ⠿ Container pickupWeb          Started 

Docker 확인

Docker Desktop에서 실행 중임을 확인할 수 있다. 🐳

React 확인

http://localhost:3000/ 리액트가 잘 실행되고 있다. 🥳


🧸💗 참고 블로그

profile
작전명 청춘 💫

0개의 댓글