반응형

성능을 떠나서 로컬 개발시 도커로 인프라를 구성하면 조금 관리하기 편한 면이 있을 것 같아 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 로 버젼을 명시하고 사용했다.

반응형

+ Recent posts