ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [docker] mysql 을 docker 로 시작하기
    인프라/docker 2020. 7. 5. 17:28

    성능을 떠나서 로컬 개발시 도커로 인프라를 구성하면 조금 관리하기 편한 면이 있을 것 같아 docker 로 mysql 을 올려봤다.

    간단히 docker 명령어 만으로 mysql을 올려보자.

    1. mysql docker 이미지 다운로드

    태그에는 MySQL 버전을 명시하며. 만약 태그에 버전을 명시하지 않으면, 최신 버전인 latest를 가져온다.

    docker pull mysql:lastest

    2. docker 이미지 확인

    docker images

    3. 저장소 설정

    • 호스트의 /Users/{내계정}/{마운트시킬폴더명} 디렉토리를 컨테이너의 /var/lib/mysql 디렉토리로 마운트
    • docker에 mysql과 같은 DB를 설치하는 경우 컨테이너 삭제와 함께 데이터도 날라가므로, 저장소는 반드시 외부 저장소를 사용한다.

    4. docker 실행 명령어

    docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password --name jun-mysql -v /Users/사용자명/마운트시킬폴더명:/var/lib/mysql mysql:버젼

    위를 보면 docker 실행명령어가 너무 길다.
    그래서 docker-compose 라는 docker 기능을 이용하여 docker 를 실행시키자

    5. docker-compose 로 실행

    아무 폴더경로에, 실행시키고자 하는 파일경로
    docker-compose.yml 파일 생성.

    version: "3.3" # 파일 규격 버전
    services: # 이 항목 밑에 실행하려는 컨테이너 들을 정의
      db: # 서비스 명
        image: mysql:5.7 # 사용할 이미지\
        container_name: jun-mysql # 컨테이너 이름 설정
        ports:
          - "3306:3306" # 접근 포트 설정 (컨테이너 외부:컨테이너 내부)
        environment: # -e 옵션
          MYSQL_ROOT_PASSWORD: '루트 비밀번호'  # MYSQL 패스워드 설정 옵션
          MYSQL_USER: '계정'
          MYSQL_PASSWORD: '비밀번호'
        volumes:
          - /Users/{계정명}/{마운트할 폴더명}:/var/lib/mysql  

     

    위와 같이 docker-compose.yml 이라는 명으로 파일 만든뒤
    해당 파일 있는 경로에서 명령어로 파일 실행

    • 백그라운드로 실행시 -d 옵션으로 실행

      docker-compose up -d

    6. docker 프로세스 확인

    docker ps -a

    7. mysql 컨테이너 접속

    docker exec -it jun-mysql bash
    여기서 jun-mysql 은 도커 컨테이너 명이다.

    8. 주의사항

    mysql 이 8 버젼 부터는 password 인증방식이 mysql_native_password 에서 caching_sha2_password 로 변경 되어 config 파일 변경 및 docker 실행 후 유저에 대한 인증 방식을 각각 native 로 바꿔줘야 한다.

    방법1

    config 파일 생성.
    $ sudo nano /usr/local/opt/mysql/config/my.cnf
    `

    파일추가 내용
    [mysqld] default-authentication-plugin=mysql_native_password

    방법 2

    mysql bash shell 접속 후
    docker exec -it CONTAINER_ID bash

    루트계정으로 로그인.
    mysql --user=root --password

    각 계정의 패스워드 디폴트 인증방식 변경.
    ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';

    두가지 방법으로도 나는 해보지는 않았다.
    그냥 매번 새로운 환경마다 docker-compose 로 올리면 수정을 해줘야 해서, 5.7 로 버젼을 명시하고 사용했다.

    반응형

    댓글

Designed by Tistory.