본문 바로가기
Docker

Docker - 컨테이너와 컨테이너를 연결하기

by DGK 2021. 12. 19.

 

도커 입문 수업을 듣고 중요한 내용을 정리했습니다.
개인 공부 후 자료를 남기기 위한 목적이므로 내용 상에 오류가 있을 수 있습니다.

 

컨테이너와 컨테이너를 연결하기

docker run 명령의 --link 옵션을 사용하여 컨테이너와 컨테이너를 연결하는 연습을 하고자 한다.

 

docker container & docker container

*dokcer run 명령의 --link 옵션 기본구조

 

  • --link <연결할 컨테이너명>:<컨테이너 연결에 사용할 이름>

 

[1단계]

docker run --rm -d --name mydb -v /home/ubuntu/mysqldata:/var/lib/mysql mysqldb

 

mysql이 실행되는 docker container를 생성하고 실행시키는 명령이다.

여기서 mysql이 실행되는 폴더인 /var/lib/mysql를 /home/ubuntu 안에 존재하는 mysqldata에 연결시켜 놓는다.

 

 

[2단계]

docker inspect mysqldb
ExposedPorts : 3306/tcp

 

"docker inspect 이미지명" 명령을 통해 mysqldb image의 외부 포트 정보를 알 수 있다.

해당 이미지로 실행되는 docker container는 외부 포트 3306이 열려 있음을 의미한다. 

 

즉, 외부에서 퍼블릭 IP를 통해 해당 컨테이너에 접속할 수는 없지만 외부 포트가 존재하기 때문에 다른 컨테이너가 해당 컨테이너에 접속할 수는 있다. (run 명령의 -p 옵션이 없기 때문에 외부에서 해당 컨테이너로 접속할 수는 없음)

 

 

[3단계]

docker run --rm -d -p 8888:8888 -v /home/ubuntu/2021_LEARN:/home/jovyan/work --link mydb:myjupyterdb jupyter/datascience-notebook

 

mysql이 실행되고 있는 docker container에 접속하기 위한 또 다른 docker container를 생성하는 명령이다.

해당 명령으로 주피터 노트북이 실행되는 docker container를 생성하고 실행시킨다. 

 

위의 명령에서 "--link mydb:myjupyterdb" 부분은 주피터 노트북이 실행되는 컨테이너에서 mysql이 실행되는 컨테이너로 연결할 때 정보를 의미한다. 

 

즉, link 옵션으로 연결할 컨테이너명은 mydb이며 주피터 노트북이 실행되는 컨테이너가 해당 컨테이너로 접근할 때 사용하는 이름이 myjupyterdb 라는 것을 뜻한다.

 

 

[4단계]

3.38.14.143:8888로 접속한 결과
3.38.14.143:8888로&amp;amp;amp;nbsp;주피터 노트북이 실행되는 폴더에 접속한 결과

 

외부에서 퍼블릭 IP:8888로 주피터 노트북이 실행되는 폴더에 접속한다. (자세한 방법은 이전 글 참조)

 

 

[5단계]

docker container에서 실행되는 주피터 노트북 파일로 sql 명령을 실행한 결과
docker container에서 실행되는 주피터 노트북 파일로 sql 명령을 실행한 결과

 

위의 결과는 주피터 노트북이 실행되는 컨테이너를 통해 주피터 노트북의 파일에 접근한 결과이다.

또한, 파이썬 문법을 활용하여 mysql이 실행되는 컨테이너에 접속하고 sql 명령을 실행한 결과를 보여는 것이다.

즉, --link 옵션을 통해 주피터 노트북이 실행되는 컨테이너와 mysql이 실행되는 컨테이너가 연결된 것이다.

 

 

*주의할 내용

  • 주피터 노트북에서 해당 파이썬 코드를 사용할 때에는 반드시 pymysql 라이브러리가 필요하다.
  • 파이썬 코드에서 host = " "에는 반드시 link 옵션에서 명시한 <컨테이너 연결에 사용할 이름>을 적어줘야 한다.
  • 또한, passwd =" " 와 db = " "에는 mysql 이미지를 만든 Dockerfile-mysql에서 ENV 명령으로 설정한 값들을 적어줘야 한다.
  • EC2 서버의 보안그룹 인바운드 규칙에 반드시 3306번 포트와 8888번 포트가 오픈 되어있어야 한다. 

 

*참고사항

Dockerfile-mysql

 

docker images

 

 

댓글