체인의정석

docker compose 사용법 정리 본문

개발/docker & linux

docker compose 사용법 정리

체인의정석 2024. 7. 18. 10:32
728x90
반응형

1. docker-compose.yml 파일을 작성한다.
환경 변수의 경우 여기서 방법이 2가지 있는데 env파일을 따로 만들어 주는 것과 environment를 통해 직접 설정해 주는것이다.
아래 예시에서는 db는 후자, event_sub는 전자에 해당된다.

version: '3.7'

services:
  mysql_db:
    image: mysql:latest
    container_name: database
    command: --max-connections=10000
    ports:
      - "33306:3306" //왼쪽은 내 컴퓨터에서의 포트, 오른쪽은 도커 안에서의 포트
    environment:
      MYSQL_ROOT_PASSWORD: 비밀번호입력
      MYSQL_DATABASE: db이름입력
      MYSQL_USER: db유저입력
      MYSQL_PASSWORD: db비밀번호 입력
    volumes: //voulme이 없으면 db에 만든 테이블 및 데이터가 기록되지 않음
      - mysql_data:/var/lib/mysql
      - ./event_bot/etc:/docker-entrypoint-initdb.d

  event_sub:
    build: . //build 파일의 위치
    container_name: example_event //컨테이너에서 표시될 이벤트
    ports:
      - "3002:3000" //왼쪽은 내 컴퓨터에서의 포트, 오른쪽은 도커 안에서의 포트
    env_file: "dev.env" // 사용할 env 파일의 이름
    volumes:
      - ./event_sub:/app //volume의 위치
    depends_on:
      - mysql_db //위의 db가 있을때만 실행가능하게 의존성 설정
    restart: always // 만약 꺼지면 계속해서 재시작 하도록 설정

volumes:
  mysql_data:

2. DockerFile을 작성한다. 여기서는 이벤트 구독 봇의 설치 (npm install, 및 실행 커멘드 등을 넣으면 된다.)

# Use an official Node runtime as a parent image
FROM node:16-alpine

# Set the working directory
WORKDIR /usr/src/app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application
COPY . .

# Set the working directory to event_bot
WORKDIR /usr/src/app/event_sub

# Expose the port the app runs on
EXPOSE 3000

# Define the command to run the app
CMD ["node", "event_sub.js"]

3. 실행

도커의 경우 먼저 빌드를 하고 실행을 시켜야 한다. 아래는 기본적인 명령어 들이다.

#도커 빌드하고 띄우기 따로
docker-compose build
docker-compose up

#도커 띄우고 뒤에서 실행
docker-compose up -d 

#도커 빌드 후 띄우고 뒤에서 실행
docker-compose up -d --build

#도커 모두 종료시키기
docker-compose down

#도커 상황 보기
docker-compose ps -a

#로그 보기
docker-compose logs -f -t 컨테이너이름


4. 주의 할점
위에서 포트를 설정할 때. 3002:3000 으로 해두었다면 내 컴퓨터에서는 3002번 포트로 띄워져있지만 도커에서 내부적으로는 3000포트를 쓴다. 이에따라 도커 안의 프로그램끼리 통신을 하는 상황이라면 도커 내부의 포트를 사용해서 접근해야 에러가 나지 않는다.

도커를 사용하다보면 volume이 꼬여서 "Access denied for user ‘root’@’localhost’ (using password:YES)" 에러가 뜨면서

내 환경에서는 작동하던 것이 다른 사람의 컴퓨터에서는 작동하지 않을 수도 있는데 이경우  volume을 삭제하면 해결이 될 수 있다. 삭제하고 싶은 경우에는 다음과 같이 하면 된다.

docker-compose down -v

https://velog.io/@ppinkypeach/Docker-Compose%EB%A1%9C-Mysql-%EC%8B%A4%ED%96%89-%EC%8B%9CAccess-denied-for-user-rootlocalhost-using-passwordYES-%ED%95%B4%EA%B2%B0

 

Docker Compose로 Mysql 실행 시 Access denied for user ‘root’@’localhost’ (using password:YES) 해결

nest와 mysql을 docker로 돌려서 개발을 진행하고 있었다. 팀원이 내 docker compose를 build해서 백엔드 서버를 실행하자마자 아래와 같은 에러가 떴다.MY-013360 Plugin sha256_password reported: ''sha256_

velog.io

 

728x90
반응형
Comments