Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL Docker 컨테이너 생성 및 실행 방법 완벽 가이드

Docker 컨테이너화의 핵심 장점 중 하나는 애플리케이션 실행에 필요한 모든 의존성과 패키지가 설치된 독립적인 환경을 구축할 수 있다는 점입니다. 대부분의 애플리케이션은 데이터를 저장하기 위해 백엔드 데이터베이스를 필요로 하는데, Oracle은 컨테이너 내에서 MySQL을 실행할 수 있는 공식 Docker 이미지를 제공하여 데이터베이스 애플리케이션 테스트 환경을 손쉽게 구축할 수 있게 해줍니다. 테스트가 끝난 후에는 경량화된 MySQL 이미지 인스턴스를 간편하게 정리할 수 있다는 것도 큰 장점입니다.

Docker는 MySQL 바이너리와 의존성 패키지가 포함된 이미지를 다운로드하여 가상 파일 시스템을 생성합니다. 참고로 --rm 플래그와 함께 Docker 컨테이너를 시작하면, 컨테이너를 중지하는 시점에 전체 파일 시스템과 컨테이너 인스턴스가 함께 삭제됩니다. 따라서 이 플래그를 run 명령어와 조합하면 테스트 후 자동 정리 기능을 활용할 수 있습니다.

이 글에서는 애플리케이션 테스트를 위한 MySQL Docker 컨테이너를 생성하고 실행하는 방법을 단계별로 살펴보겠습니다.

MySQL용 Docker 컨테이너 생성

아래 명령어는 최신 버전의 MySQL 이미지 인스턴스를 생성하며, --rm 플래그는 컨테이너가 중지될 때 파일 시스템과 함께 컨테이너를 제거하는 역할을 합니다.

sudo docker run --rm --name=mysql-test -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql/mysql-server

위 명령어에서 --rm 플래그는 Docker 데몬에게 컨테이너가 중지된 후 해당 파일 시스템을 삭제하도록 지시합니다. --name 플래그는 컨테이너에 이름을 부여하며, "-e MYSQL_ALLOW_EMPTY_PASSWORD=yes" 옵션은 빈 root 비밀번호로 컨테이너를 생성하도록 지시합니다.

MySQL Docker 컨테이너 실행

MySQL 클라이언트 프로그램은 로컬 소켓 연결, 즉 localhost를 통해 접속합니다. 로컬 MySQL 연결을 생성하려면 다음 명령어를 사용할 수 있습니다.

sudo docker exec -it mysql-test mysql -uroot

exec 명령은 Docker 데몬에게 지정된 명령을 Docker 컨테이너 내부에서 실행하도록 지시합니다. -it 플래그는 대화형 셸(interactive shell)로 컨테이너를 열도록 하며, 컨테이너 내부에서 실행되는 셸 명령은 "mysql -uroot"입니다.

TCP/IP를 이용한 클라이언트 접속

앞선 단계의 명령어를 실행하면 Docker는 컨테이너에 사설 IP 주소를 할당하고, 시스템에 네트워크 인터페이스를 생성합니다. 이 두 요소는 서비스에 대한 TCP/IP 연결을 맺는 엔드포인트로 활용할 수 있습니다.

두 엔드포인트 간에 TCP/IP 연결을 설정하지 않으면 MySQL 서비스에 접근할 수 없습니다. 이를 위해서는 시스템의 가상 네트워크 인터페이스와 Docker 컨테이너 인스턴스의 IP 주소를 각각 확인해야 합니다. 아래 명령어를 사용하면 됩니다.

먼저 시스템 내 네트워크 인터페이스의 IP 주소를 확인하려면 다음을 실행합니다.

ip addr show docker0

위 명령어로 얻은 IP 주소는 클라이언트 애플리케이션이 연결할 엔드포인트 중 하나가 되며, MySQL 사용자 계정을 생성할 때도 사용됩니다.

다른 엔드포인트, 즉 MySQL용 Docker 컨테이너 인스턴스의 IP 주소는 다음 명령어로 확인할 수 있습니다.

sudo docker inspect mysql-test

이렇게 확보한 두 개의 IP 주소를 사용하면 TCP/IP 연결을 설정하고, 클라이언트 애플리케이션을 실행할 사용자를 생성할 수 있습니다.

비밀번호 없이 로컬 시스템을 root 사용자로 등록하려면 다음 과정을 따릅니다.

시스템 터미널에서 mysql-test Docker 컨테이너를 실행하여 mysql 셸에 접속합니다.

sudo docker exec -it mysql-test mysql -uroot

mysql 셸에 접속한 후, 아래 명령어를 실행하여 로컬 시스템을 root 사용자로 생성합니다.

create user root@<가상 네트워크 인터페이스 IP> identified by '';

주의할 점은, 위 명령어에서 사용하는 IP 주소가 앞선 단계에서 확인한 로컬 머신의 가상 네트워크 인터페이스 주소여야 한다는 것입니다.

생성한 사용자에게 모든 권한을 부여하려면 다음 명령어를 사용합니다.

grant all on *.* to root@<가상 네트워크 인터페이스 IP> with grant option;

모든 테스트를 마친 후 자동으로 정리하려면 stoprm 명령어를 사용해 컨테이너를 중지하고 제거하면 됩니다.

정리하면, 이 글에서는 MySQL Docker 컨테이너를 생성하고 실행하는 방법과, Linux 머신의 가상 네트워크 인터페이스와 Docker 컨테이너 간에 TCP/IP 연결을 설정하여 접속하는 방법을 알아보았습니다. 나아가 root 사용자를 생성하고 모든 권한을 부여하는 과정까지 함께 살펴보았습니다.