[Docker 실습] 1. Docker로 Jupyter Notebook 서버 올려보기
반갑습니다!
이번 포스트에서는
jupyter notebook과 mysql 이미지를 이용하여
컨테이너를 실행시켜서 해당 서비스에 접근해보겠습니다 ^^
먼저 8888번 포트부터 열어주겠습니다 ^^
docker run 실행시 호스트 PC의 8888번 포트와
컨테이너 내부의 jupyter notebook 서버의 8888번 포트를
매핑시켜서 접근할 수 있도록 지정할 예정이기 때문입니다!
이미 docker login이 되어있기 때문에 docker hub의 이미지들을 pull해서 사용하셨었죠? ^^
웬만한 프로그램들은 허브에 이미지로 올라와있기 때문에 편하게 이용할 수 있는데요
위 예시 이미지의 docker run 명령과 같이 jupyter notebook 이미지를 이용하여서
해당 서버 컨테이너를 만들어주겠습니다
여기서 중요한 부분이 있습니다!
해당 이미지가 용량이 상당한데요
제가 EC2 인스턴스의 스토리지 용량을 8GB로 설정을 해놨었습니다 ^^;;
Free-Tier 이용자에게는 스토리지 제한이 30GB까지 지원이 되는데 생성할 때
그냥 디폴트 값인 8GB로 넘겼었거든요 ^^;;
만약에 EC2 인스턴스를 생성하실 때 스토리지 제한을 높여놓지 않으시고
저와 같이 디폴트 값인 8GB로 설정하셨다면
해당 디바이스의 잔여 공간이 부족하다고 에러 메세지가 출력될겁니다 ^^;;
용량과 관련된 부분이므로 다른 방도가 없습니다
EC2 인스턴스를 종료(=삭제)시키시고 다시 할당 받으셔서
세팅들을 재설정 해주셔야 합니다 ^^;;
저는 EC2 인스턴스를 다시 생성하고 재설정하였습니다 ^^;;
해당 인스턴스에 DOCKER_TEST라는 디렉토리를 만들어두고
FTP 프로그램인 FileZilla를 이용해서 테스트 파일인 mysql_in_docker.ipynb 파일을 넣어주었습니다
docker run 명령을 이용해서 아까 스토리지 용량 때문에 에러가 발생했던 작업을 다시 진행했습니다
해당 이미지가 없으면 docker hub에서 자동으로 다운로드를 받아옵니다 ^^
jupyter notebook 이미지를 다운 받은 후, 명령어의 옵션에 맞게 컨테이너가 생성되었습니다!
$ docker ps 명령어를 통해 조회해보니 성공적으로 컨테이너가 생성되어
동작 중인 것을 확인할 수 있겠습니다 ^^
EC2 인스턴스의 퍼블릭 IP주소와 8888번 포트를 이용하여
웹 브라우저에서 해당 주소로 접근하니 위와 같은 화면이 정상적으로 출력됩니다
컨테이너 서버가 잘 동작하네요 ^^
이제 Login을 해야하는데요
여기서 Token 정보가 필요합니다 ^^
이 정보는 어디에 있을까요?
$ docker logs 명령어를 이용해서 해당 작업 수행시 출력된 여러 로그들 중
token정보를 찾아보겠습니다 ^^
많은 메세지들이 출력되는데요 메세지들의 하단쯤에 token 정보가 보입니다
이 정보를 복사해서 입력하여 아래와 같이 Login을 진행해주시면 되겠습니다!
로그인에 성공하면 위와 같이 디렉토리가 하나 보입니다 ^^
해당 디렉토리에 들어가보니 아까 $ docker run시 지정해줬던
mysql_in_docker.ipynb 파일이 잘 보입니다 ^^
jupyter notebook을 이용해서 python 코드로 mysql에 접근해볼까요?
우선은 필요한 라이브러리부터 import 해주겠습니다 ^^
여기까지 mysql에 접근하기 위한 준비는 끝이 났고,
이제 mysql 서버가 구동이 되어야 하겠죠?
다시 또 docker로 돌아가서 해당 서버를 구동하기 위해 컨테이너를 생성하겠습니다 ^^
먼저 이미지 생성을 위해서 Dockerfile부터 작성해주겠습니다 ^^
위와 같이 dockerfile을 설정해주시면 되겠습니다 ^^
mysql 버전은 5.7로,
root 계정의 비밀번호는 편의상 1234,
데이터베이스의 이름은 제 임의의 문자열로 넣어주었습니다 ^^
dockerfile이 준비되었으니 이제 이미지를 생성하겠습니다 ^^
$ docker build 명령어를 사용하여
이미지 생성 작업이 성공적으로 수행된 것을 확인할 수 있겠습니다
이미지가 준비 되었으니 $ docker run 명령어를 사용하여 컨테이너를 실행시키겠습니다
-d 옵션을 이용해 백그라운드 실행으로 지정하고,
-p 옵션을 이용해서 호스트PC의 3306번 포트와 컨테이너 내부의 3306번 포트를 매핑해주겠습니다 ^^
해당 컨테이너의 이름은 --name 옵션을 이용하여 mydb로,
-v 옵션을 이용하여 상기 캡쳐 이미지와 같이 볼륨도 지정해주겠습니다 ^^
명령어 실행 결과로 컨테이너 ID가 무사히 생성된 것까지 확인할 수 있겠습니다!
이제 해당 포트를 열어주러 AWS로 가볼까요?
AWS에 로그인하시고 콘솔로 접근하셔서 EC2 서비스로 들어와주시면 되겠습니다
메뉴 목록 중에 보안 그룹을 선택해주시고,
해당 EC2 인스턴스가 속해있는 보안 그룹의 인바운드 규칙 편집을 해주시면 되겠는데요 ^^
캡쳐 이미지와 같이 3306번 포트를 열어주도록 하겠습니다 ^^!
이제 mysql 접속 코드를 실행해보겠습니다
호스트 부분에 EC2 인스턴스의 퍼블릭 IP 주소를,
사용자는 root로,
패스워드는 아까 dockerfile에서 지정한 비밀번호로,
db 또한 아까 dockerfile에서 지정한 임의의 문자열을 넣어주시면 되겠습니다 ^^
그리고 실행해주면 아무 에러 메세지 없이
정상적으로 동작한 것을 확인할 수 있겠습니다 !
이번 포스트에서는 간단한 실습을 진행해봤는데요
jupyter notebook과 mysql 이미지를 이용하여서 컨테이너를 생성해서
서버를 구동시켰습니다 ^^
호스트 PC와 컨테이너 내부의 포트를 매핑해서,
웹 브라우저에 EC2 인스턴스의 퍼블릭 IP주소와 해당 포트번호를 입력해
서버에 접근하여 캡쳐 이미지와 같이 정상적으로 서비스에 접속하였습니다 ^^
작업 과정 내에 복잡한 부분은 없었습니다
지금까지 학습한 docker 주요 명령어들을 이용하여
이미지를 생성하고, 컨테이너를 실행시켜서,
호스트PC와 포트를 연결시켜준 다음 웹 브라우저를 이용해 해당 서비스에 접근했습니다 ^^
docker라는 최신 기술이 얼마나 매력적이고 편리하며 효율적인지
다시금 느낄 수 있는 간단한 실습이었습니다 ^^
다음 포스트에서는 도커 컨테이너와 컨테이너끼리 통신하는 방법을 실습과 함께
알아보도록 하겠습니다
포스트 읽어주셔서 감사드리고 다음 포스트로 찾아뵙겠습니다 ^^!