Docker/Docker 실습&연습

[Docker 실습] 2. 도커와 도커 연결해보기

Fletcher 2024. 8. 15. 09:30

 

반갑습니다!

 

이번엔 컨테이너와 컨테이너끼리 내부 네트워크망을 이용해서

서로 통신할 수 있도록 연결을 해보겠습니다 ^^

$ docker run 명령시 --link 옵션을 이용하면 간단하게 연결할 수 있습니다!

 

 

우선 기존의 컨테이너들을 모두 삭제한 다음에 다시 컨테이너를 실행하도록 하겠습니다 ^^

 

이번에 mysql 컨테이너를 실행할 때는 -p 옵션을 사용하지 않겠습니다

내부 포트는 열려있지만 외부 호스트PC의 포트와 매핑되어 있지 않기 때문에

외부에서 별도로 접근할 수 없는 상태입니다 ^^

 

 

 

ExposedPorts에 대한 정보로 3306번 포트는 기본적으로 열려있습니다

다만 -p 옵션을 사용하지 않았기 때문에 외부 호스트PC의 포트와 매핑되어 있지 않은 것 뿐이죠 ^^

 

 

 

jupyter notebook 서버 컨테이너는 -p 옵션을 사용해서

컨테이너 외부의 호스트 PC의 8888번 포트와 매핑을 시켜서

손쉽게 접근할 수 있도록 설정하겠습니다 ^^

 

그리고 여기서 --link 옵션을 사용할건데요

mysql 컨테이너를 실행할 때 mydb라고 이름을 지어줬었죠

해당 컨테이너와 네트워킹할 때 myjupyterdb라는 이름으로 접근하겠습니다 ^^

 

 

 

그리고 방금 생성한 jupyter notebook 서버에 접근하기 위해서

$ docker logs 명령어를 이용하여 token 정보를 조회하겠습니다 ^^

해당 토큰 문자열을 복사해주시면 되겠습니다

 

 

 

웹 브라우저의 주소창에 EC2 인스턴스의 퍼블릭 IP주소와

8888번 포트를 입력해서 서버에 접근해주시면 되겠습니다 ^^

그리고 토큰 정보를 입력해서 로그인해주세요!

 

 

 

이제 jupyter notebook에서 python 코드를 이용해서

mysql 서버에 접근할 수 있는지 테스트를 해볼까요?

필요한 라이브러리들을 import 해주신 다음에

mysql connect 설정시

host는 myjupyterdb로,

포트는 3306으로,

유저는 root,

패스워드는 dockerfile 작성시 ENV 명령어로 설정한 문자열로,

db 또한 dockerfile 작성시 ENV 명령어로 설정한 문자열을

입력해주시면 되겠습니다 ^^

 

실행 결과 에러 메세지가 출력되지 않았습니다

정상적으로 네트워킹이 수행됐다는 것을 알 수 있겠네요 ^^

 

 

 

MySQL 서버에 접근해서 connection까지 됐으니 나머지 작업들도 수행해주시면 되겠습니다 ^^

테이블을 하나 만들고 해당 작업에 대해 commit을 해준 뒤

리소스를 닫아주시면 되겠습니다 ^^

 

 

한 번 테스트를 해볼까요?

cursor 객체를 이용해서 fetchone() 명령어로 결과값을 담아서 조회해보니,

아까 생성한 product 테이블의 이름이 고스란히 출력되는 것을 확인할 수 있겠습니다 ^^

 

 

 

보통 도커를 이용해서 구성하는 경우에,

데이터베이스는 모든 IP에서 접근할 수 있도록 설정하지 않습니다 ^^

 

다음 내용에서 살펴볼 Docker Compose를 이용해서,

컨테이너끼리 네트워킹을 하면 되니까요 ^^

 

일종의 엔트리포인트가 될, 외부 접속이 가능할 컨테이너를 하나만 설정해두고

해당 컨테이너를 통해서 데이터베이스라던가 여러 컨테이너와 네트워킹하는 형식으로

보안에 대해 취약점을 방비하는 구성을 만들죠 ^^

 

이번 포스트에서는 $ docker run 명령어 수행시 --link 옵션을 이용해서

컨테이너끼리 내부 네트워킹이 가능하도록 실습을 해봤습니다 ^^

 

이제 다음 포스트부터는 Docker Compose에 관련된 주요 명령어와 내용들을 학습하며

도커를 이용한 서버 구성에 대한 기본적인 이해도를 높여보겠습니다 ^^!