Docker로 언제든지 다시 만들 수 있는 로컬 DB를 만들어 봤습니다.

안녕하세요!
여러분이 업무 개발을 할 때 DB는 어떻게 했습니까?각자 지역 DB를 준비했습니까?아니면 공용 DB 를 사용합니까?
나는 평소에 업무 개발 때 검증용 DB에 자주 연결된다.본공연과는 다른 DB가 있는데, 개발할 때는 그 DB를 다 같이 쓰는 느낌이었다.여러분이 같은 DB를 쓰니까 조건이 맞으면 되지만, 다른 사람도 쓰는 물건이라 함부로 훼손해서는 안 된다.
이럴 때는 로컬이 망가져도 바로 다시 만들 수 있는 DB가 있으면 편리할 것 같아서 이번에 Docker로 해봤어요.

디렉토리 구조


mysql8입니다.0과 mysiql5.일곱 개를 만들었기 때문에 구성은 다음과 같다.
root/
   ├─ Dockerfile-5-7
   ├─ Dockerfile-8-0
   ├─ db-5-7
   ├─ db-8-0
   ├─ config
         └─ my.conf
그중 하나만 있으면 되는 경우 아래와 같습니까?
root/
   ├─ Dockerfile
   ├─ db
   ├─ config
         └─ my.conf

my.conf 생성


config 아래 my.conf를 만들고 mysql 설정을 작성하십시오.
my.conf
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
상술한 내용에 따르면 mysql에서 일본어는 부호화되지 않을 것이다.

Dockerfile-5-7


※mysql5.7 사용하지 않을 때는 필요 없어요.
Dockerfile-5-7
FROM mysql:5.7.34

ENV MYSQL_ROOT_PASSWORD rootpass
ENV MYSQL_DATABASE test
ENV MYSQL_USER testuser
ENV MYSQL_PASSWORD testpass

COPY ./config/my.conf /etc/mysql/conf.d/my.cnf

# docker build -t docker-mysql-5-7:1 -f Dockerfile-5-7 .
# docker run --name docker-mysql-5-7 -d -v $PWD/db-5-7:/var/lib/mysql -p 23306:3306 docker-mysql-5-7:1
# docker exec -it docker-mysql-5-7 bash
  • mysql: 5.7.34의docker 이미지를 사용합니다.
  • 환경 변수를 설정합니다.
    이것은 mysql에 로그인할 때의user와password입니다.
  • 아까 만든 my.conf를/etc/mysiql/conf.d/아래로 복사합니다.주석 아래의 세 줄은 실행할 명령입니다.

    build


    docker build -t docker-mysql-5-7:1 -f Dockerfile-5-7 .
    
    를 사용하는 Docker file을 지정합니다.아무것도 지정하지 않으면 Docker file이라는 파일을 찾습니다.이번에는 Docker file-5-7 파일을 사용해야 하기 때문에 지정했습니다.

    부팅


    docker run --name docker-mysql-5-7 -d -v $PWD/db-5-7:/var/lib/mysql -p 23306:3306 docker-mysql-5-7:1
    
  • -f에 컨테이너의 이름을 지정합니다.
  • --name에 볼륨을 지정합니다.내 컴퓨터가 이 명령을 실행한 곳의db-5-7 디렉터리와/var/lib/mysiql가 동기화되었습니다.
  • -v에 포트를 지정합니다.-p 자신의 PC의 23306번 포트에 접근하면 도커 용기의 3306번 포트에 접근할 수 있다.
  • 마지막 -p 23306:3306는 방금 제작한 docker 이미지를 사용합니다.
  • docker 용기 로그인 & mysql 로그인


    docker exec -it docker-mysql-5-7 bash
    
    상기 명령을 통해 docker 용기에 로그인합니다.
    mysql -u testuser -p
    testpass
    
    이렇게 mysql에 로그인하면 완성됩니다.

    Dockerfile-8-0


    ※mysql8.0이 아닌 경우 필요 없음
    평소7을 사용하다가 갑자기 8.0이 되면 연결이 되지 않을 수 있습니다.
    참조: https://www.chuken-engineer.com/entry/2020/09/04/074216
    Dockerfile-8-0
    FROM mysql:8.0
    
    ENV MYSQL_ROOT_PASSWORD rootpass
    ENV MYSQL_DATABASE test
    ENV MYSQL_USER testuser
    ENV MYSQL_PASSWORD testpass
    
    COPY ./config/my.conf /etc/mysql/conf.d/my.cnf
    
    # docker build -t docker-mysql-8-0:1 -f Dockerfile-8-0 .
    # docker run --name docker-mysql-8-0 -d -v $PWD/db-8-0:/var/lib/mysql -p 13306:3306 docker-mysql-8-0:1
    # docker exec -it docker-mysql-8-0 bash
    
  • mysql:8.0의docker 이미지를 사용합니다.
  • 환경 변수를 설정합니다.
    이것은 mysql에 로그인할 때의user와password입니다.
  • 아까 만든 my.conf를/etc/mysiql/conf.d/아래로 복사합니다.주석 아래의 세 줄은 실행할 명령입니다.

    build


    docker build -t docker-mysql-8-0:1 -f Dockerfile-8-0 .
    
    를 사용하는 Docker file을 지정합니다.아무것도 지정하지 않으면 Docker file이라는 파일을 찾습니다.이번에는 Docker file-5-7 파일을 사용해야 하기 때문에 지정했습니다.

    부팅


    docker run --name docker-mysql-8-0 -d -v $PWD/db-8-0:/var/lib/mysql -p 13306:3306 docker-mysql-8-0:1
    
  • docker-mysql-5-7:1에 컨테이너의 이름을 지정합니다.
  • -f에 볼륨을 지정합니다.내 컴퓨터가 이 명령을 실행한 곳의db-8-0 디렉터리와/var/lib/mysql가 동기화되었습니다.
  • --name에 포트를 지정합니다.-v면 자신의 PC의 1336번 포트에 접근하면 도커 컨테이너의 3306번 포트에 접근할 수 있다.
  • 마지막 -p는 방금 제작한 docker 이미지를 사용합니다.
  • docker 용기 로그인 & mysql 로그인


    docker exec -it docker-mysql-8-0 bash
    
    상기 명령을 통해 docker 용기에 로그인합니다.
    mysql -u testuser -p
    testpass
    
    이렇게 mysql에 로그인하면 완성됩니다.

    데이터 복제


    mysql에 로그인했는지 모르겠지만 데이터가 없습니다.
    mysqldump를 사용하여 공용 DB에서 데이터를 복사합니다.
    다음 명령을 실행합니다.
    mysqldump -u ユーザー名 -p -h 共用DBのホスト名 データベース名 > 〇〇.sql
    
    sql 파일의 이름은 모두 가능합니다. 이번에는 {항목명 + 날짜}입니다.sql가 결정되었습니다.
    다음에 제작된 ql 파일을 컨테이너에 보냅니다.
    방법은 간단하다. 아래 명령만 집행하면 된다.
    mysql5.7 의 경우
    docker cp {プロジェクト名 + 日付}.sql docker-mysql-5-7:/tmp/
    
    mysql8.0의 경우
    docker cp {プロジェクト名 + 日付}.sql docker-mysql-8-0:/tmp/
    
    ※ 이후는 mysql5.7의 명령만 표시됩니다.mysql8.0을 사용하는 사람은 적당히 고쳐 쓰십시오.
    이렇게 되면, sql 파일은 용기의 tmp 디렉터리로 전송됩니다.
    이번에는 이 ql 파일을 사용하여 docker가 만든 DB에 데이터를 넣습니다.
    먼저 도커 컨테이너에 로그인하세요.
    docker exec -it docker-mysql-5-7 bash
    
    다음 명령을 실행합니다
    mysql -u testuser -p test < tmp/{プロジェクト名 + 日付}.sql
    
    데이터는 Docker를 통해 생성된 DB에 복사됩니다.

    애플리케이션에서 접속


    응용 프로그램에서 Docker가 만든 DB에 연결합니다.
    이 방법도 매우 간단하다.아마도 호스트 이름,user, 비밀번호 등을 지정하는 곳이 있을 것입니다.그저 그곳을 아래의 모습으로 바꿀 뿐이다.mysql8.0을 사용하여 상술한 방법으로 시작하는 사람port은 1336이다.
    host: '127.0.0.1',
    user: 'testuser',
    password: 'testpass',
    database: 'test',
    port: 23306,
    

    총결산


    그게 다야.Docker 로컬에서 사용할 수 있는 DB를 만들 수 있습니다.이것을 사용하면 데이터를 삭제할 수 있는 지령도 주저하지 않고 실행할 수 있다.실패하면 다시 하면 돼.
    주의점은 PC의 전원을 끊으면 용기도 멈추기 때문에 다음 부팅 때 사용하려면 용기를 다시 부팅해야 한다.데이터가 아직 남아 있으니 안심하세요.-p 13306:3306에서 mysql의 용기 ID를 찾고 docker-mysql-8-0:1에서 시작합니다.

    좋은 웹페이지 즐겨찾기