본문 바로가기
도커(Docker)

컨테이너와 컨테이너 연결

by Bentist 2022. 1. 28.

주피터 노트북 컨테이너에 mysql 컨테이너 연결

 

1) MYSQL 도커 파일 작성

$ vi Dockerfile_MYSQL

# Dockerfile_MYSQL

FROM mysql:5.7

ENV MYSQL_ROOT_PASSWORD=1004
ENV MYSQL_DATABASE=ben_db

 

2) 도커 파일 이미지 작성

$ docker build --tag mysqldb -f Dockerfile_MYSQL .

  • 도커의 build 명령어는 현재 디렉토리의 Dockerfile 이라는 이름을 가진 파일을 읽어서 이미지로 만든다.
  • --tag이미지 이름을 직접 설정하는 옵션, 작성을 안하면 디폴트로 latest가 태그로 부여진다.
  • -f도커 파일명을 지정하는 옵션, 작성을 안하면 디폴트로 Dockerfile 이름 파일이 이미지로 빌드됨

마지막 ' . '현재 폴더를 나타내는 것으로, 현재 폴더에 Dockerfile이 있다는 것이다.

 

3) MYSQL 컨테이너 실행

$ docker run -d --name mydb mysqldb(이미지)

명령어에 -p 옵션을 안 썼는데, 민감한 정보를 담고 있는 DB를 외부 IP에 개방할 필요는 없기 때문이다. 

 

$ docker inspect mysqldb 로 이미지를 확인해보자.

Dockerfile에서 작성한대로 ENV가 설정되어 있음을 볼 수 있다. 그리고 ExposePorts를 보면 디폴트 값으로 3306 포트가 지정되어 있는데, ExposePort는 docker 컨테이너의 특정 포트를 외부에 오픈하는 설정이다. Dockerfile에서 EXPOSE 포트 번호를 작성하면, docker run -p 옵션으로 host PC의 특정 포트를 컨테이너의 특정 포트와 매핑시키게 된다. MYSQL은 3306과 33060 포트를 기본적으로 오픈해둔 것을 확인할 수 있다.

 

4) --link 옵션

--link [컨테이너 이름:연결할 컨테이너를 지칭할 이름] [실행할 컨테이너]으로 주피터 노트북 컨테이너를 실행한다. 

$ docker run --rm -d -p 1111:8888 --link mydb:myjupyterdb jupyter/datascience-notebook

mysql이 실행되고 있는 docker container에 접속하기 위한 또 다른 docker container를 생성하는 명령이다. 해당 명령으로 주피터 노트북이 실행되는 docker container를 생성하고 실행시킨다. 

위의 명령에서 '--link mydb:myjupyterdb' 부분은 주피터 노트북이 실행되는 컨테이너에서 mysql이 실행되는 컨테이너로 연결할 때 정보를 의미한다. 즉, link 옵션으로 연결할 컨테이너명은 mydb이며 주피터 노트북이 실행되는 컨테이너가 해당 컨테이너로 접근할 때 사용하는 이름myjupyterdb라는 것을 뜻한다.

파이썬 문법을 활용하여 mysql이 실행되는 컨테이너에 접속하게 되는데, host는 외부 IP주소가 아니라 --link 옵션에서 명시했던 주피터 노트북과 연결할 컨테이너를 지칭할 이름을 넣어주면 되고, Dockerfile-mysql에서 ENV에서 설정한 mysql 비밀번호와 db명을 적어주면 올바르게 작동한다.

댓글