/home/jovyan 폴더를 호스트 pc의 /home/ubuntu/2021_LEARN 폴더로 바인딩(공유) 한다.(기존 /home/jovyan 폴더의 내용은 호스트 pc의 /home/ubuntu/2021_LEARN 폴더의 내용으로 대체된다)
이를 통해 /home/ubuntu/2021_LEARN 폴더의 파일들을 컨테이너 내에서 사용하거나 변경할 수 있고, 컨테이너를 삭제하더라도 컨테이너에서 /home/ubuntu/2021_LEARN 폴더에서 작업한 내용은 호스트 pc에 남아 있게된다.
docker run --rm -d -p 8888:8888 -v /home/ubuntu/2021_LEARN:/home/jovyan/work jupyter/datascience-notebook
/home/jovyan 폴더: 컨테이너 내부에서 jupyter notebook이 실행되는 폴더
위 명령어로 서버 실행 후 해당 EC2 Ip의 8888번 포트로 접속 시 token을 입력해야 로그인할 수 있다.
token은 docker logs [컨테이너 ID] 이후 token=~ 부분을 통해 확인할 수 있다.
Dockerfile_MYSQL 작성 예시
FROM mysql:5.7
ENV MYSQL_ROOT_PASSWORD=1234
ENV MYSQL_DATABASE=db
이미지 빌드
docker build --tag mysqldb -f Dockerfile_MYSQL .
컨테이너 생성 후 실행
docker run --rm -d --name mydb -v /home/ubuntu/mysqldata:/var/lib/mysql mysqldb
Jupyter Notebook 컨테이너를 mysql 컨테이너와 연결하여 실행 ( --link )
--link [연결할 컨테이너 이름]:[연결될 컨테이너 이름]
docker run --rm -d -p 8888:8888 -v /home/ubuntu/2021_LEARN:/home/jovyan/work --link mydb:myjupyterdb jupyter/datascience-notebook
myjupyterdb 컨테이너에 mydb 컨테이너를 연결하고, 외부 포트 8888번을 열어 실행한다. (자세한 옵션들 해석 생략.)
EC2 보안그룹에서 인바운드 큐칙으로 8888번 포트를 허용해주어야 한다.
-p 옵션이 없으면 외부에서는 해당 컨테이너에는 접속이 불가능하다. 하지만 포트 자체는 열려있어 컨테이너끼리는 연결이 가능하다.
- 기본 포트 설정
- MySQL : 3306번 포트
- Jupyter Notebook : 8888번 포트
docker inspect [컨테이너 이름/ID]를 통해 몇번 포트가 열려있는지 확인 가능하다.
mysql 접속 코드 참고
db = pymysql.connect(
host='실행 컨테이너 이름',
port=3306,
user='root',
passwd='1234',
db='db',
charset='utf8')