관리 메뉴

bright jazz music

[Docker]docker에서 mariadb 컨테이너 구동하는 방법(docker-compose) 본문

OS 및 기타/docker & kubernetes

[Docker]docker에서 mariadb 컨테이너 구동하는 방법(docker-compose)

bright jazz music 2023. 4. 20. 20:20


1. Docker 설치: 
먼저 Docker를 설치돼 있어야 한다. Docker Desktop 또는 Docker Engine을 설치하면 된다.

2. MariaDB 이미지 가져오기:
Docker Hub에서 MariaDB 이미지를 가져온다. 터미널에서 다음 명령어를 실행한다.

docker pull mariadb


3. 컨테이너 실행:
다음 명령어를 사용하여 MariaDB 컨테이너를 실행한다. 이 명령어는 MariaDB 컨테이너를 실행하고 임의의 이름을 지정한다. 여기에서는 "my-mariadb"로 지정.

(나는 호스트의 3306 포트를 마리아디비 컨테이너의 3306 포트와 매핑해 주었다. 마리아디비 컨테이너를 구동하면 기본 포트는 3306으로 되어 있다.)

docker run -d -p 3306:3306 --name my-mariadb -e MYSQL_ROOT_PASSWORD=my-secret-pw mariadb


4. 컨테이너에 접근:
다음 명령어를 사용하여 컨테이너에 연결합니다.

docker exec -it my-mariadb mysql -u root -p




5. 데이터베이스 생성:
다음 명령어를 사용하여 데이터베이스를 생성한다. 임의의 테스트 DB명을 입력한다. 여기서는 mydatabase
(컨테이너 내부에서 명령어를 입력해야 함에 주의)

 

CREATE DATABASE mydatabase;




6. 사용자 생성:
다음 명령어를 사용하여 임의의 사용자를 생성하고 데이터베이스에 대한 권한을 부여.

CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'%';
flush privileges;




7. 컨테이너 종료:
다음 명령어를 사용하여 컨테이너를 종료. (컨테이너가 종료되므로 DB동작 역시 멈추고 내부의 데이터까지 삭제된다. 컨테이너 종료 시에도 데이터를 유지하고 싶다면 docker volume을 사용해 데이터를 호스트 시스템에 저장해야 한다.)

docker stop my-mariadb





hjcha@hjcha-AERO-15-Classic-SA:~$ sudo docker pull mariadb
Using default tag: latest
latest: Pulling from library/mariadb
74ac377868f8: Pull complete 
9f8acee20aa1: Pull complete 
11b336495e01: Pull complete 
20ab1641dd41: Pull complete 
eaf0c5c99086: Pull complete 
239335430207: Pull complete 
931baaab2c80: Pull complete 
f2e86cc8f052: Pull complete 
Digest: sha256:9ff479f244cc596aed9794d035a9f352662f2caed933238c533024df64569853
Status: Downloaded newer image for mariadb:latest
docker.io/library/mariadb:latest
hjcha@hjcha-AERO-15-Classic-SA:~$ sudo docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
catnails     0.1       decc9ade4331   11 days ago   1.17GB
mariadb      latest    4a632f970181   5 weeks ago   401MB
rockylinux   9.1       656f801c021c   8 weeks ago   176MB
hjcha@hjcha-AERO-15-Classic-SA:~$ sudo docker run -d --name my-mariadb -e MYSQL_ROOT_PASSWORD=P@ssw0rd mariadb
5016cb3dcfb482a28fcb998d742589bba8f414c19ac9e16796c5f30675140545
hjcha@hjcha-AERO-15-Classic-SA:~$ docker exec -it my-mariadb mysql -u root -p
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/my-mariadb/json": dial unix /var/run/docker.sock: connect: permission denied
hjcha@hjcha-AERO-15-Classic-SA:~$ sudo docker exec -it my-mariadb mysql -u root -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.11.2-MariaDB-1:10.11.2+maria~ubu2204 mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>

 

기본 포트는 3306을 사용하므로 docker run -p 3306:3306을 이용해서  포트포워딩을 해주자.

 

 

 

 

 

 

 

 

 

=====================

 

 

 

 

 

도커 컴포즈를 이용해서 볼륨 연결

docker-compose.yml 로 파일 만들고 다음의 내용 입력 후 완료.

만약 임의의 파일명을 사용한다면 -f 옵션을 줘야 함.

 

해당 내용의 version: '3.8'은 도커 컴포즈 파일이 도커와 호환되는 버전을 명시한 것으로 임의의 버전을 사용하는 것이 아님. 버전을 지켜 줘야 함.

 

 

version: '3.8'

services:
  mariadb:
    image: mariadb:latest
    container_name: mariadb-server
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: testdb
      MYSQL_USER: your_user
      MYSQL_PASSWORD: your_password
    volumes:
      - type: bind
        source: D:/personal/infra/mariadb/mariadb_data
        target: /var/lib/mysql
    restart: unless-stopped

 

해당 컴포즈 파일을 기반으로 구동시키려면

 

docker compose up -d

 

명령어 사용할 것. 주의, 윈도우에서 제공하는 리눅스 쉘을 사용할 경우 docker를 찾지 못하는 경우가 있음. 차라리 윈도우 터미널이나 파워쉘 사용.

 

 

 

 

만약 이 도커 컨테이너가 구동되는 호스트 시스템에서 해당 컨테이너에, 

 

mysql -u root -p

와 같은 명령을 내리려고 한다면 아래와 같은 오류가 출력되며 실패한다.

 

bash: mysql: command not found

 

이는 호스트 시스템에 mysql 클라이언트가 설치돼 있지 않기 때문이다. 도커 컨테이너에서 구동되고 있는 것은 mariadb-server(또는 mysql-server)이다. 따라서 호스트시스템의 외부에서 HeidSQL이나 Dbeaver와 같은 툴로는 접근이 되지만, 호스트 시스템에 이러한 클라이언트가 설치돼 있지 않다면 실패하는 것이다.

 

호스트 시스템에서 접근하기 위해서는 mysql 클라이언트를 설치해야 한다.

 

/*  레드햇 계열(centos, rocky 등)*/
sudo yum install mysql

/* 데비안 계열 */
sudo apt-get install mysql-client

 

DBMS(mysql-server)가 설치되는 것이 아니므로 걱정하지 않아도 된다.

 

 

그리고 호스트시스템에서 아래와 같은 명령어로 컨테이너에서 구동되는 mariadb 에 명령을 내릴 수 있다.

 


mysql -h 127.0.0.1 -P 30366 -u root -p

/*

-h: 연결할 호스트. 여기서는 자신의 내부에 있는 컨테이너에게 명령을 내리므로 127.0.0.1
-p: 연결할 포트: 여기서는 호스트 시스템의 3306포트가 3306포트로 포트포워딩 돼 있다.
	만약 호스트의 30336 포트가 컨테이너의 3306포트로 포워딩 되도록 설정했다면, 3306 대신 30336으로 써주면 된다.
-u: 연결할 사용자
-p: 해당 사용자 계정에 대한 비밀번호

*/

 

 

 

컨테이너의 mariadb-server 접근에 성공하였다.

 

 

 

 

호스트 시스템 외부에서 db클라이언트(db툴)로 접근 테스트

 

잘 된다.

'OS 및 기타 > docker & kubernetes' 카테고리의 다른 글

[Docker] volume  (0) 2023.04.11
docker file 도커파일 만들기  (0) 2023.03.31
[Docker] 테스트 서버 구축  (0) 2023.03.08
[Docker] 기초 명령어  (0) 2023.01.15
[Docker] CentOS 환경에서 docker설치  (0) 2023.01.15
Comments