도커+mysql

도커+mysql

카테고리
Docker
날짜
2024년 06월 16일
작성자
JeongjungsikJeongjungsik
태그

docker-compose.yaml

 
# docker-compose.yaml version: '3.7' services: my-backend: build: context: . dockerfile: Dockerfile volumes: - ./src:/myfolder/src ports: - 3000:3000 env_file: - ./.env.docker my-database: image: mysql:latest environment: MYSQL_DATABASE: 'mydocker' MYSQL_ROOT_PASSWORD: 'root' ports: - 3306:3306
 

my-backend 컨테이너 살펴보기

  • volumes ⇒ 컨테이너와 호스트 시스템 간에 데이터를 공유하거나 컨테이너 간에 데이터를 공유하는데 사용됨
    • 여기선 현재 로컬 경로의 /src 폴더를 도커 컨테이너 /myfolder/src와 공유하는 설정임
 
  • env_file ⇒ 현재 경로의 .env.docker파일을 연결
 

my-database 컨테이너 살펴보기

  • image: mysql:latest ⇒ 최신버전의 mysql 도커컨테이너에 가져옴
  • environment: ⇒ mysql의 데이터베이스 이름을 mydocker 로 설정하고, 도커 컨테이너에서 mysql에 접속할 때의 비밀번호를 설정함
 

Dockerfile

FROM node:18 // 기존 node:16하면 에러나서 변경해줌 COPY ./package.json /myfolder/ COPY ./yarn.lock /myfolder/ # 커서 위치 /myfolder 뒤로 변경 WORKDIR /myfolder/ RUN yarn install COPY . /myfolder/ CMD yarn dev

app.module.ts 파일 설정

import { ConfigModule } from '@nestjs/config'; // .env 불러오기위함 @Module({ imports: [ BoardsModule, ConfigModule.forRoot(), GraphQLModule.forRoot<ApolloDriverConfig>({ driver: ApolloDriver, autoSchemaFile: 'src/commons/graphql/schema.gql', }), // https://docs.nestjs.com/techniques/database 참고 TypeOrmModule.forRoot({ type: process.env.DATABASE_TYPE as 'mysql', host: process.env.DATABASE_HOST, port: Number(process.env.DATABASE_PORT), username: process.env.DATABASE_USERNAME, password: process.env.DATABASE_PASSWORD, database: process.env.DATABASE_DATABASE, entities: [Board], synchronize: true, logging: true, }), ], }) export class AppModule {}
 
  • .env - 로컬용
DATABASE_TYPE=mysql DATABASE_HOST=localhost DATABASE_PORT=3306 DATABASE_USERNAME=root DATABASE_PASSWORD=123456789 DATABASE_DATABASE=myproject
  • .env.docker - 도커용
DATABASE_TYPE=mysql DATABASE_HOST=my-database DATABASE_PORT=3306 DATABASE_USERNAME=root DATABASE_PASSWORD=root DATABASE_DATABASE=mydocker
 

에러

No module named 'distutils'

  • docker-compose build 명령어를 치면 다음과 같은 내용의 에러 나옴
..... from distutils.spawn import find_executable ModuleNotFoundError: No module named 'distutils'
 
여기 글을 참고하여 docker-compose를 삭제하고 재설치해서 해결해줌
 

Public key retrieval is not allowed

  • dbeaver에서 mysql 데이터베이스를 생성하기전에 테스트 커넥션할 때 에러가 발생했음
  • Driver properties 탭에서 allowPublicKeyRetrieval:false → true로 변경해서 해결

댓글

guest