MySQL 도커 컨테이너 실행 및 기본 설정에 대해 작성했습니다.
# Dockerfile 작성
일반적으로 도커 컨테이너 용량 컴팩트화를 위해서 응용프로그램을 모두 제거한 상태로 배포됩니다.
따라서, 컨테이너 내부에서 사용할 vi, nano 같은 에디터 들을 미리 설치합니다.
MySQL의 경우, Oracle 기반 Linux 배포로 변경된 상태기에
apk, yum, apt-get 을 사용하기위해서 debian을 사용했습니다.
FROM mysql:8.0-debian
RUN apt-get update
RUN apt-get install nano -y
RUN apt-get install vim -y
RUN apt-get install wget -y
RUN apt-get install apt-utils -y
*Dockerfile에 명령어, 패키지 등을 미리 baseline 정의하고 docker-compose를 통해 해당 baseline이미지를 가져와 사용합니다.
# docker-compose 작성
위에서 작성한 Dockerfile 을 이용해 자동으로 docker build 후 base 이미지로 사용합니다.
version: '3'
services:
mysql:
build:
context: .
dockerfile: Dockerfile
container_name: mysql
restart: always
ports:
- 3306:3306
environment:
MYSQL_ROOT_PASSWORD: admin
TZ: Asia/Seoul
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- ./volume/mysql/data:/var/lib/mysql
# 기본 설정
-- MySQL 접속
$ mysql
$ mysql -u root -p
-- 비밀번호 재설정
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'admin';
mysql> flush privileges;
다음과 같은 에러 발생 시, 아래와 같이 해결이 가능합니다.
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
$ mysql -h 127.0.0.1 -P 3306 --protocol=tcp -u root -p
$ mysql -u root -p
# 외부 접속 허용
mysql 이라는 계정에 외부접속 권한을 부여했습니다.
다음과 같이, "모든 IP 허용"이 가능합니다.
혹은 "특정 IP 대역대만 허용", "특정 IP 허용" 도 가능합니다.
(필요 시, 수행)
-- 방화벽 오픈 포트 확인
$ firewall-cmd --zone=public --list-all
-- '3306' 포트가 없으면 생성 필요 & reload 필수
$ firewall-cmd --permanent --zone=public --add-port=3306/tcp
$ sudo firewall-cmd --reload
(외부 접속 권한 )
-- root 계정에 현재 외부 접근 권한이 없는 것을 확인
mysql> SELECT host, user FROM mysql.user;
-- 외부 접속 허용 (모든 IP 허용)
mysql> create user 'mysql'@'%' identified by 'mysql';
mysql> grant all privileges on *.* to 'mysql'@'%';
mysql> flush privileges;
'Cloud Computing > Docker' 카테고리의 다른 글
# Portainer docker-compose (0) | 2022.12.20 |
---|---|
KeyCloak Docker 배포 & 적용 (0) | 2020.12.06 |