Infra/Docker

Mysql 8.0, phpMyAdmin 세팅 (with.docker-compose)

dundun213 2024. 6. 30. 13:28

 

 

DateFilm Project Series 글 목록

 

 

시작

도커 컴포즈를 이용해서 mysql 과 DB를 보다 편하게 관리하기 위해 phpMyAdmin 를 세팅합니다.

실습 환경 정보

실습 환경 정보는 다음과 같습니다.

OS : Ubuntu 22.04.4 LTS  
Docker : 26.1.4

구성 폴더 구조

docker
├── docker-compose.yml
└── mysql
    ├── conf
    │   └── mysqld.cnf
    ├── data
    └── log
    └── init.sql

docker-compose.yml

Mysql-8.0 버전의 이미지를 사용합니다.
services: 밑에 'mysql-datefilm' 와 container_name 는 사용하려는 서비스 DB 이름이 datefilm 이어서 사용하는 목적에 맞게 수정해서 사용하시면 됩니다.
DB의 데이터와 로그, 설정 경로를 원하는 위치 볼륨에 마운트합니다.

services:
  mysql:                                            
    image: mysql:8.0
    container_name: mysql                            
    command:             # 인증 플러그인 사용, 유니코드 문자 지원 명령어
      mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: root_pwd
      MYSQL_DATABASE: database
      MYSQL_USER: user
      MYSQL_PASSWORD: user_pwd                      
      TZ: Asia/Seoul
    ports:                # 호스트 포트 (외부) : 컨테이너 포트 (내부)
      - "3306:3306"                
    restart:            # 서버 재시작 시 컨테이너도 같이 재시작
      unless-stopped
    volumes:            # 호스트 경로 (실제) : 컨테이너 경로 (가상)
      - .mysql/data:/var/lib/mysql                  
      - .mysql/log:/var/log/mysql
      - .mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
    networks:
      - service_network

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3306
      MYSQL_ROOT_PASSWORD: root_pwd
    restart: unless-stopped
    ports:
      - "8085:80"
    volumes:
      - phpmyadmin_session:/sessions
      - phpmyadmin_config:/config.user.inc.php
    depends_on:        # 종속성 부여 : mysql 서비스가 시작된 이후 phpmyadmin 시작
      - mysql
    networks:
      - service_network
    volumes:
      phpmyadmin_session:
      phpmyadmin_config:

networks:
  service_network:        # 컨테이너들을 연결할 네트워크 (compose 실행전 미리 생성)
    external: true

mysqld.cnf

mysqld.cnf 는 /etc/mysql/mysql.conf.d/mysqld.cnf 를 가져와서 원하는 목적에 맞게 설정하시면 됩니다.
저는 외부 접속도 허용하기 위해 bind-address 만 수정했습니다.

bind-address            = 0.0.0.0

 


실행

docker-compose를 실행하기전에 컨테이너들을 연결시켜줄 네트워크를 생성후 서비스를 시작합니다.

Docker-Compose 명령어

명령어 모음

# 도커 네트워크 생성
docker network create [네트워크 이름]

# run
docker-compose up -d

# stop
docker-compose stop

# 현재 실행중인 컨테이너 확인
docker ps docker-compose ps

# 모든 컨테이너 확인
docker ps -a

도커 컨테이너 확인 예시

# 예시
:~/docker/mysql-8.0#docker-compose ps
NAME                IMAGE                   COMMAND                  SERVICE             CREATED          STATUS          PORTS
mysql-datefilm-01   mysql:8.0               "docker-entrypoint.s…"   mysql-datefilm-01   40 minutes ago   Up 26 minutes   0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp
phpmyadmin          phpmyadmin/phpmyadmin   "/docker-entrypoint.…"   phpmyadmin          26 minutes ago   Up 26 minutes   0.0.0.0:8080->80/tcp, :::8080->80/tcp

확인

Mysql 컨테이너 연결

mysql 컨테이너 실행 명령어
docker exec -it [컨테이너 이름] mysql -u [사용자이름] -p

 

Mysql 컨테이너 연결 예시

# 예시
# docker exec -it mysql-datefilm mysql -u user -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 56
Server version: 8.0.37 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

phpMyAdmin 연결

로컬 호스트 혹은 컨테이너가 올라간 서버에 접속후 설정한 사용자와 암호를 입력하면 사용할 수 있습니다.

접속 url  
http://localhost:[설정한 포트]/index.php

phpMyAdmin 초기 로그인 화면

 

 

참고자료
- https://velog.io/@hansung/MySQL8-Simple-example-with-docker-compose#connecting-to-mysql
- https://velog.io/@hansung/phpMyAdmin-%EA%B5%AC%EC%B6%95%ED%95%98%EA%B8%B0