더듬이

[Docker] docker 로 mysql 사용하기 (mac m1에서 docker 사용하기) 본문

Docker

[Docker] docker 로 mysql 사용하기 (mac m1에서 docker 사용하기)

dbhang 2021. 8. 9. 03:01

1. Docker mysql image 가져오기 

아래 명령어 입력시 간단히 msyql docker 이미지를 가져올 수 있다.

기본적으로 docker pull image_name:tag 의 형태로 사용하면 된다. 

docker pull mysql
docker pull mysql:5.7

하지만 m1의 경우 아래와 같은 메시지가 뜰 것이다.

 

m1 노트북을 사용하는 경우에는 아래와 같은 명령어를 통해서 image를 받아오기로하자.

docker run --rm --platform linux/amd64 -it mysql:5.7

 

맨 밑에 erorr 는 무시하도록하자 사실 위 명령어는 mysql:5.7 이미지를 받아오는 것 뿐아니라 실행시키는 작업까지 포함인데 난 이미지 로드하는데만 사용하겠다.. 이게시글은 m1 아닌사람도 봐야하니깡...

 

2. 설치된 이미지 실행시키기 

아래 명령어를 사용하여 mysql image가 잘 다운받아져 있는지 확인후 실행시킨다. 

docker images

  • mysql 실행 명령어
docker run \
-p 3306:3306 \
--name mysq-django \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=mysql \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=userpwd  \
-v /Users/whatiy/PROJECT/test-example/mysql-data:/var/lib/mysql \
mysql:5.7
  • mysql 실행 명령어 (m1)
docker run --platform linux/amd64 \
-p 3306:3306 \
--name mysq-django \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=mysql \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=userpwd \
-v /Users/whatiy/PROJECT/test-example/mysql-data:/var/lib/mysql \
-d mysql:5.7

일반 사용자는 윗 명령어를

m1 사용자는 아랫 명령어를 통해 mysq 을 실행시킨다.

만약 이미 사용하고 있는 mysql DB 데이터가 없는 경우에는 -v 옵션을 사용하지 말 것 => -v사용시 위에 -e 옵션들은 전부 무시된다.

 

명령어에 옵션들을 간단히 정리하자면 

# p :  포트 바인딩
-p  <로컬port>:<contaienr 내부 port >
# e : 환경변수설정
-e 변수명=변수값
# v :  볼륨 연결
-v <로컬저장공간>:<컨테이너 내부 저장공간>
# d : 컨테이너 실행을 back그라운드에서 실행
image 이름 전에만 넣으면 된다~

 

 - 

아래 명령어를 통해 정상 실행되었는지 확인할 수있다.

만약 아래처럼 했는데 안나오면 docker ps -a 로실행해서 종료 상태인지 확인할 수있고 이경우에는 보통 명령어나 환경 변수가  잘못된 경우 이다.

-a 옵션은 all 을 의미하며 종료된 컨테이너 프로세스 들까지 모두 리스트업 해준다.

 

이경우 아래 명령어들을 이용해서 원인을 분석할 수있다.

docker ps -a
docker logs <container id>

 

 

3. mysql 터미널 접근

아래 명령어 docker exec 를 통하면 container 내부에 명령을 내릴 수있다. 

이중 옵션 -i:  상호작용하겟다.  -t :tty 사용하겠ㄷ.

를 사용하여 쉘이나 베쉬셀에 접근하면 컨테이너 내부터미널에 접근하는 것처럼 사용할 수있다. 

docker exec -it mysq-django /bin/bash

4. docker-compose 이용

매번 아래와 같은 명령어를 치기엔 힘들다 history가 남아있지도 않을수도 있고,,,

docker run --platform linux/amd64 \
-p 3306:3306 \
--name mysq-django \
-e MYSQL_ROOT_PASSWORD=root \
-e MYSQL_DATABASE=mysql \
-e MYSQL_USER=user \
-e MYSQL_PASSWORD=userpwd \
-v /Users/whatiy/PROJECT/test-example/mysql-data:/var/lib/mysql \
-d mysql:5.7

그래서 아래와같은 docker-compose.yml 파일을 생성하여 설정들을 기록해놓고 여러 앱들을 한번에 묶어서 실행시키거나 다운시킬 수있다.

위 명령어를 풀어서 사용하면 아래와 같다.

version: '3.8'
services:
  django-db:
    image: mysql:5.7
    container_name: mysql-django
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mysql
      MYSQL_USER: user
      MYSQL_PASSWORD: userpwd
    volumes:
      /Users/whatiy/PROJECT/test-example/mysql-data:/var/lib/mysql
    platform: linux/amd64

sevices 하위 속성으로 어떤 docker를 띄울 것인지 지정하고 djnago-db 처럼 서비스명을 임의로 지정할 수있다.

또 위에 명령어를 속서에 하나하나 넣어주면 된다. 

문법은 생각보다 간단해서 금방 할수있을 것이다.

 

아래 명령어를 통해 실행시키고

docker-compose up -d

아래와 같이 기본 docker 명령어나 docker-compose 명령어를 통해 확인 할 수있다.

docker ps
docker-compose ps