Anyway

[Docker] 도커에 mariaDB 설치하기 본문

개발

[Docker] 도커에 mariaDB 설치하기

무튼 2021. 11. 24. 13:22
반응형

Image pull

먼저 만들고 싶은 환경의 이미지를 가져온다. 여기서는 mariaDB 환경을 만들어볼 것이다. mariaDB 이미지를  👉 Docker Hub 에서 검색한다. 그럼 Official Image 라는 태그가 달린 도커에서 기본적으로 제공해주는 이미지가 뜨는데, 해당 이미지에 들어가면 Pull 명령어가 있다.

pull 명령어를 복사해 터미널에 입력해준다. 뒤에 :latest 옵션을 붙이면 최신 버전으로 다운받는데, 이 옵션은 default 이니 안 붙여줘도 된다.

 

잘 다운되었는지 docker images 명령어로 확인해본다.

$ docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
mariadb      latest    e2278f24ac88   2 weeks ago   410MB

 

container run

이제 다운받은 이미지를 컨테이너화하고 실행해보자.

 

도커 데스크탑을 이용해도 되지만, 여기서는 커맨드로 해볼 것이다. 명령어는 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 이다.

 

옵션이나 명령 없이 간단하게 생성하면 docker run mariadb 라고 입력하면 되는데, db 의 경우에는 초기 비밀번호를 필수로 요구하고 그 밖에 설정을 위해 아래처럼 입력해준다.

docker run --name mariadb -d -e MYSQL_ROOT_PASSWORD=1234 -p 3306:3306 mariadb

옵션 설명

  • --name : 컨테이너의 이름
  • -d : detack mode 로, 컨테이너를 백그라운드에서 실행시키겠다는 뜻.
  • -e : 컨테이너 내 환경변수 설정. 여기서는 root 계정의 비밀번호를 설정함.
  • -p : 포트 포워딩 설정. 외부에서 내가 설정한 local port 로 접속하면 container port 와 연결하는 것이다. 순서는 local:container 이다.

 

생성한 컨테이너를 확인해보자. 명령어는 docker ps 이다.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                    NAMES
8c66d4754f83   mariadb   "docker-entrypoint.s…"   19 seconds ago   Up 18 seconds   0.0.0.0:3306->3306/tcp   mariadb

 

컨테이너 배쉬 접속

이번에는 컨테이너 내의 배쉬에 접속해보자. 명령어는 docker exec 다. 여기서 -e LC_ALL=C.UTF-8 옵션은 배쉬에서 한글 입력을 가능하게 해주는 옵션이다. ko_KR.UTF-8 로 설정하고 싶다면 👉 이 게시물을 참고한다.

$ docker exec -e LC_ALL=C.UTF-8 -it mariadb bash
root@8c66d4754f83:/#

 

배쉬에 접속한 후 maria db에 로그인한다.

root@8c66d4754f83:/# mysql -u root -p
Enter password: [설정했던 비밀번호]
MariaDB [(none)]>

 

Character Set 설정

여기서 한글로 작업하면 다 깨지므로 컨테이너의 characterset 을 지정해줘야 한다. mariaDB에 접속한 상태에서 status 명령어를 입력하면 현재 characterset 이 어떤 걸로 지정되어 있는지 볼 수 있다. lantin1 을 utf8로 설정해줘야 한다.

MariaDB [(none)]> status
--------------

...

Server characterset:	utf8mb4
Db     characterset:	utf8mb4
Client characterset:	latin1
Conn.  characterset:	latin1

...

 

exit 명령어로 mariaDB 접속을 끊은 후 컨테이너 배쉬로 돌아온다. 언어 설정 환경 파일을 수정해주기 위해 vim 을 설치해준다. 아래는 컨테이너가 ubuntu OS 일 때의 설치방법이다. 자신의 컨테이너의 OS 는 cat /etc/*-realse 명령어를 입력하면 DISTRIB_ID 로 확인할 수 있다.

root@8c66d4754f83:/# cat /etc/*-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
...

확인했으면 아래 명령어로 vim을 설치해준다.

root@8c66d4754f83:/# apt-get update
root@8c66d4754f83:/# apt-get install nano
root@8c66d4754f83:/# apt-get install vim

설치가 됐다면 vim 에디터로 characterset 설정 파일을 수정해준다. 아래 [client], [mysql], [mysqld] 내용을 추가해준다. 참고로 방향키로 커서를 이동하고 i 를 누르면 커서 위치에서 편집할 수 있다. 편집 후에는 esc를 누른 후 :wq! 로 저장 후 종료한다.

root@8c66d4754f83:/# vi /etc/mysql/my.cnf


#
# This group is read both by the client and the server
# use it for options that affect everything
#

...

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

 

변경사항 적용을 위해 컨테이너를 다시 실행하자. exit 로 배쉬를 종료 후 컨테이너를 재실행한다.

root@8c66d4754f83:/# exit
exit
$ docker restart mariadb

 

다시 status 로 mariaDB의 characterset 을 확인해보면 바뀌어 있다.

$ docker exec -it mariadb bash
root@8c66d4754f83:/# mysql -u root -p
MariaDB [(none)]> status
--------------
...
Server characterset:	utf8mb3
Db     characterset:	utf8mb3
Client characterset:	utf8mb4
Conn.  characterset:	utf8mb4
...

 

테스트

데이터베이스와 테이블을 생성하고, 한글 값을 가진 테이블을 조회해서 테스트해보면 아주 잘 뜨는 걸 확인할 수 있다.

MariaDB [(none)]> create database test;
MariaDB [(none)]> use test;
MariaDB [test]> create table test(testCol VARCHAR(10));
MariaDB [test]> insert into test values('테스트');
MariaDB [test]> select * from test;
+-----------+
| testCol   |
+-----------+
| 테스트    |
+-----------+
1 row in set (0.000 sec)

 

컨테이너 시작&종료

컨테이너를 시작하고 종료하는 명령어는 아래와 같다. 참고로, exec 명령어로 컨테이너를 실행하는건 컨테이너를 start 하고 나서다.

$ docker container start mariadb
$ docker container stop mariadb
반응형