https://docs.docker.com/desktop/mac/apple-silicon/
위 사이트에 접속해서 M1 칩 전용 도커를 다운로드 받습니다.
1. docker-compose.yml 파일 작성
아래 docker-compose.yml 파일을 복사하여 생성합니다.
version: '3' # 파일 규격 번호
services:
local-db:
platform: linux/x86_64 # 추가된 라인 M1 에서만 추가
image: library/mysql:8.0.23
container_name: local-db
restart: always
command: # 명령어 실행 한글 깨짐 방지
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
ports:
- 13306:3306 # 호스트 : 컨테이너
environment:
MYSQL_ROOT_PASSWORD: root # 초기비밀번호
TZ: Asia/Seoul
volumes:
- ./db/mysql/data:/var/lib/mysql # 디렉토리 마운트 설정
저는 아래 이미지 처럼 보이는 경로에 작성하였습니다.
- version : 파일의 규격 번호입니다. docker-compose파일을 해석하기 위한 버전 같은 것이라고 보면 됩니다.
- services: 컨테이너에 어떤 서비스를 넣을 건지 지정합니다.
- local-db : 서비스의 별칭입니다.
- platform: 원래는 플랫폼을 명시하지 않아도 되지만 mac m1에서는 명시하지 않으면 "no matching manifest for linux/arm64/v8 in the manifest list entries" 라고 에러를 냅니다. 참고 : https://unluckyjung.github.io/develop-setting/2021/03/27/M1-Docker-Mysql-Error/
- restart : docker가 재시작된 경우 컨테이너도 재시작 할건지 옵션. 예상치 못한 에러로 도커가 재시작된다면 always인 경우 컨테이너는 항상 재시작합니다.
- command: 명령어를 실행할 수 있는데 mysql의 문자열 옵션을 주었습니다.
- ports: 호스트 환경과 컨테이너 환경간 통신을 위한 포트 번호입니다.
- environment: 데이터베이스의 초기 비밀번호를 지정합니다.
- volumes: 컨테이너와 호스트의 디렉토리를 마운트 합니다. 마운트 볼륨과 볼륨생성은 조금 다른데 다음에 도커를 다룰때 자세하게 해보겠습니다. 지금은 mysql 환경설정에만 집중합니다.
docker-compose 명령어를 통해서 컨테이너를 생성합니다. 아래 명령어는 반드시 docker-compose.yml 파일이 있는 곳에서 해야합니다.
docker-compose up -d
그러면 아래와 같이 도커 컨테이너가 실행중이면서 생성되었습니다.
2. MySQL 접속하기
아래 명령어로 현재 실행중인 컨테이너 목록을 확인합니다.
docker ps -a
저는 local-db 라는 컨테이너 이름으로 실행되고 있는 목록이 보입니다.
local-db 의 bash 쉘에 접속합니다.
docker exec -it local-db bash
mysql 을 실행합니다.
mysql -u root -p
설정한 비밀번호인 "root" 를 입력하면 아래 화면 처럼 접속됩니다.
3. GUI 설치 ( MySQL workbench)
https://archive-me-0329.tistory.com/10
위 글 참고 하셔서 workbench를 설치합니다. 저는 8.0.21 버전입니다.
참고로 설치 경로는 아래 경로입니다.
https://downloads.mysql.com/archives/workbench/
4. GUI 와 도커 연결
MySQL Connections 옆에 + 모양을 클릭합니다.
Connection name 아무거나 입력해주고
Hostname 은 로컬호스트인 127.0.0.1 로 지정합니다.
포트번호는 13306 입니다. 위에서 호스트의 포트번호를 13306으로 지정했기 때문입니다.
그리고 OK 버튼 누르면 이상한 경고문이 뜨긴하는데 계속 클릭하다보면 비밀번호를 입력하라고 창이 뜹니다.
비밀번호에 "root" 를 입력하면 아래와 같이 나오면 성공입니다.
5. 테스트
아래 명령어를 쭉 복사하고 cmd + enter 키를 이용해 하나하나 씩 잘 되는 지 확인해봅니다.
show databases;
create database testdb;
show databases;
use testdb;
show tables;
CREATE TABLE professor (
professor_id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) NOT NULL,
belong VARCHAR(12) DEFAULT 'FOO',
phone VARCHAR(12)
) ENGINE=INNODB;
desc professor;
INSERT INTO professor (name, belong, phone) VALUES('유재석', 'IDE','01112345678');
SELECT * FROM professor;
6. 컨테이너를 중지한다면 ??
docker 어플리케이션을 클릭하여 중지버튼을 눌러봅니다.
아래 명령어를 통해 컨테이너의 상태가 exited 임을 확인합니다.
docker ps -a
그리고 workbench 에 접속해보면 정지되어있다고 나옵니다.
그렇다면 데이터도 날아갔을까요??
다시 도커 어플리케이션을 열어 시작버튼을 누르고 workbech 에서 아래 SQL을 실행합니다.
use testdb;
select * from professor;
컨테이너가 중지되든 말든 데이터는 존재합니다.
이유는 컨테이너에서 mysql의 데이터저장된 경로를 호스트로 마운트했기 때문입니다.
'Database' 카테고리의 다른 글
[realmySQL][4] 시스템 변수 (1) | 2022.05.06 |
---|---|
[realMySQL][3] MySQL 서버설정파일 우선순위(my.cnf) (1) | 2022.05.06 |
[2] MySQL 8 설치 및 설정 (MAC) (1) | 2022.04.16 |
[데이터베이스] transaction manager, storage manager, query manager (0) | 2020.06.11 |
[데이터베이스] 기본키와 외래키 그리고 제약조건의 설계 (0) | 2020.06.11 |
댓글