개발을 진행한 Local 환경과 Production 서버 환경이 다른 경우
OS가 다르기 때문에 라이브러리, 파이썬 등 설치할 때 다르게 진행해야 한다.
Local 환경과 서버가 같은 OS를 사용해도, 환경변수 혹은 사용자그룹, Permission이 일치하지 않아 서버에서 올바르게 작동하지 않을 수 있다.
따라서, 다양한 설정을 README 등에 기록하고, 항상 실행하도록 하여 문제를 해결
만약 운영하고 있는 Server가 100대이고, 특정 서버 업데이트가 진행되었다면, 모든 서버가 모두 업데이트 될 필요가 있다.
Research / Production 환경에서 공통적으로 사용하는 템플릿이 있다면 생산성을 높일 수 있을 것이다.
가상화 기술은 주로 VM(Virtual Machine)을 사용한다.
VM이라는 호스트 머신이라고 물리적 컴퓨터 위에, OS를 포함한 가상화 소프트웨어를 두는 방식
우리의 컴퓨터 위에 다른 가상화 소프트웨어가 있다고 생각하면 됨
ex) 호스트는 Window인데 Window에서 Linux실행
Docker Image
Docker Container
Docker로 할 수 있는 일
MySQL 프로세스로 들어가기
내 의도와 다르게 실행이 되지않을때, 접근이 안될때 디버깅을 확인하기 위해 컨테이너 진입
- MYSQL이 실행되고 있는지 확인하기 위해 컨테이너 진입
- docker exec -it “컨테이너 이름(혹은 ID)” /bin/bash
- Compute Engine에서 SSH와 접속하는 것과 유사
mysql -u root -p 입력 후 비밀번호 입력
실행중인 컨테이너 중지
작동을 멈춘 컨테이너 확인하기
그 외 docker run 할 때 파일을 공유하는 방법
Docker와 Container 내부는 특별한 설정이 없으면 컨테이너를 삭제할 때 파일이 사라짐 → Host와 Container 간 파일 공유가 되지 않음
파일을 공유하고 싶으면 Host와 Container의 저장소를 공유해야 하는데, Volume Mount를 진행하면 Host와 Container의 폴더가 공유된다
-v 옵션을 사용하며, -p(Port)처럼 사용한다. -v Host_Folder:Container_Folder
대표적으로 jupyter notebook 사용할 때 많이 사용
ex ) docker run it -p 8888:8888 -v /some/host/folder/for/work:/home/jovyan/workspace/jupyter/minimal-notebook
Dockerhub
FROM “이미지 이름:태그”
COPY “로컬 디렉토리(파일)” “컨테이너 내 디렉토리(파일)”
WORKDIR “컨테이너 내 디렉토리”
ENV “환경변수 이름=값”
RUN “실행할 리눅스 명령어”
CMD [”실행할 명령어”,”인자”,...]
Docker image build
여기서는 백그라운드 실행을 하지 않았기에 로그가 남지만, 백그라운드 실행하게 되면 완료되었다 문구만 뜬다.
컨테이너 실행
그 외에 Dockerfile에서 사용하는 것
EXPOSE : 컨테이너 외부에 노출할 포트 지정
ENTRYPOINT: 이미지를 컨테이너로 띄울 때 항상 실행하는 커맨드