개발일기장

Docker 공부(3) - docker-compose 본문

STUDY/Docker

Docker 공부(3) - docker-compose

게슬 2022. 5. 27. 14:04
728x90

http://www.kyobobook.co.kr/product/detailViewKor.laf?barcode=9791158392864 

 

따라하며 배우는 도커와 CI 환경 - 교보문고

컨테이너 이론부터 Travis CI, AWS 실습까지 | ◎ 기본적인 도커 클라이언트 명령어 ◎ 도커를 이용한 간단한 Node.js 애플리케이션 만들기 ◎ 단일 컨테이너를 활용한 애플리케이션 개발과 배포 ◎

www.kyobobook.co.kr


1. docker-compose

복수의 컨테이너를 동시에 실행시킬 수 있다.

version: <버전 정보>
services:
  <서비스 이름1>:
    image: <사용할 이미지>
    
  <서비스 이름2>:
    build: <빌드 할 위치>
docker-compose up	//docker-compose 실행 (docker-compose 파일이 있어야한다.)
docker-compose stop //실행중인 docker-compose 종료
docker-compose -f <docker-compsoe-file이름> up //docker-compose 파일 지정
docker-compose up --build //할때마다 빌드

이런식으로 여러개의 container를 실행 시킬 수 있다.

ex)

version: "3.7"
services:
  redis-server:
    image: "redis"
    
  node-app:
    build: .
    ports:
     - "5000:8080"

redis이미지를 가지고와서 서버를 실행시키고

nodejs app을 실행시키는 docker-compose


2. docker-compose를 사용하여 ReactJS 실행(1)

npx create-react-app 리액트 application 구축

 

일단 Docker 파일을 만든다.

FROM node:16

WORKDIR /usr/src/app

COPY package.json ./

RUN npm install

COPY ./ ./

CMD ["npm","run","start"]

이전 포스팅처럼

1) 도커 내부의 /usr/src/app에서 실행하고 

2) package.json에서 패키지를 다운받은 다음 

3) 나머지 코드를 복사하고

4) 실행시키는 단계이다.

 

docker-compose-dev.yml 파일을 만들고

version: '3'

services:
  react:
    build: 
      context: .
      dockerfile: Dockerfile.dev
    
    ports:
      - "3000:3000"
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
    
    stdin_open: true

  test:
    build: 
      context: .
      dockerfile: Dockerfile.dev
    
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
    
    command: ["npm","run","test"]

실행 컨테이너, 테스트 컨테이너를 만들어주는 내용이다.

build.context의 경우 빌드할 코드들이 있는 위치

build.dockerfile은 빌드 할 정보들이 있는 도커파일이다.

 

Volume : node_modules의 경우 페키지가 전부 들어있어서 빌드 할 때마다 복사하기가 힘들기 때문에 참조하지 말라고 저렇게 설정하고.

나머지 코드들은 수정시 따로 빌드없이 바로 적용이 가능하도록 설정을 해둔다.

1) docker-compose -f docker-compose-dev.yml up
2) docker-compose -f docker-compose-dev.yml up --build

소스 수정을 하는경우가 생기면 --build를 꼭 입력해주자.

어짜피 다른부부들은 캐시되어 있어서 금방된다.


3. Nginx이용하여 React Application 실행하기

별거 없다

Docker파일에서 내용을 추가하는데

React application을 build한 다음에 nginx로 이동시켜주는 것만 하면 됨.

FROM node:16 as builder

WORKDIR /usr/src/app
COPY package.json ./
RUN npm install

COPY ./ ./
RUN npm run build

FROM nginx

COPY --from=builder /usr/src/app/build /usr/share/nginx/html

1. FROM node:16 as builder <- 어떤 단계인지 명시를 한다.

2. COPY <--from=builder> 단계로부터 <이동시킬 파일들> <어디로> 명시해주면 된다. 

 

4. Nginx, React 실제 운영할때 docker-compose.yml

version: '3'

services:
  react:
    build: 
      context: .
      dockerfile: Dockerfile
    
    ports:
      - "80:80"
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
    
    stdin_open: true

test단계를 빼주고 dockerfile을 dev가 아닌 원래파일로 바꿔준다.

nginx 포트가 80이므로 노출하는곳 80으로 해서 local도 80으로 해준다.

728x90
Comments