0. 강의 소개
이번 강의에서는 가상화의 개념과,
최근 개발환경 설정 및 서비스 배포에 가장 많이 사용되는 Docker에 대해 학습하는 시간을 가져보도록 하겠습니다.
1. Docker 소개
1.1 가상화란?
- 문제가 되는 것!!
- 운영에 사용하는 서버에 직접 들어가서 개발 하지 않음
- -> Local에서 개발 후, Staging, Production 서버에 배포
- 개발을 진행한 환경과, Production 서버 환경이 다를 수 있음
- OS가 다르기 때문에 라이브러리, 파이썬 등 설치할 때 다르게 진행해야 함
- 운영에 사용하는 서버에 직접 들어가서 개발 하지 않음
- 어떻게 해결하지?
- 다양한 설정을 README 등에 기록하고, 항상 실행하도록 하는 방법
- 사람이 진행하는 일이라 Human Error 발생
- 매번 이런 작업을 해야 하는 과정이 귀찮음
- 서버 환경까지도 모두 한번에 소프트웨어화 할 수 없을까?
- 밀키트처럼!!! 간단하게!
- 다양한 설정을 README 등에 기록하고, 항상 실행하도록 하는 방법
- 위와 같은 문제들을 해결하기 위해 나온 개념이 가상화!
- 특정 소프트웨어 환경을 만들고, Local, Production 서버에서 그대로 활용
- 개발(Local)과 운영(Production) 서버의 환경 불일치가 해소
- 어느 환경에서나 동일한 환경으로 프로그램을 실행할 수 있음
- 개발 외에 Research도 동일한 환경을 사용할 수 있음
1.2 Docker 등장하기 전
- VM(Virtual Machone)을 사용
- 호스트 머신
- 실제 물리적 컴퓨터에 OS를 포함한 가상화 소프트웨어를 두는 방식
- E.G
- 호스트 머신은 Window인데, Window에서 Linux를 실행
- 호스트 머신은 Mac인데, Mac에서 Window를 실행
- GCP의 Compute Engine 또는 AWS EC2가 이런 개념을 활용
- 클라우드 회사에서 미리 만든 이미지를 바탕으로, Computing 서비스를 통해 사용자에게 동일한 컴퓨팅 환경을 제공
- 하지만!! OS위에 OS를 하나 더 실행시키는 것으로 매우 리소스를 많이 사용
- 무겁다!! 느리다!!
- Container
- VM의 무거움을 덜어주면서, 좀 더 경량화된 프로세스의 개념으로 만들어진 기술
- 훨씬 빠르고 가볍게 가상화 구현 가능
1.3 Docker 소개
- Container 기술을 쉽게 사용할 수 있도록 나온 도구가 바로 Docker
- 2013년에 오픈소스로 등장
- 컨테이너에 기반한 개발과 운영을 매우 빠르게 확장
- Docker의 핵심
- Docker Image
- 컨테이너를 실행할 때 사용할 수 있는 “템플릿”
- Read Only
- Docker Container
- Docker Image를 활용해 실행된 인스턴스
- Write 가능
- Docker Image
1.4 Docker로 할 수 있는 일
- 다른 사람이 만든 소프트웨어를 가져와서 바로 사용할 수 있음
- 예) MySQL을 Docker로 실행
- 예) Jupyter Notebook을 Docker로 실행
- 다른 사람이 만든 소프트웨어 : Docker Image
- OS, 설정을 포함한 실행 환경
- Linux, Window, Mac 어디에서나 동일하게 실행할 수 있음
- 즉!
- 자신만의 이미지를 만들면 누구에게나 쉽게 공유가능!!
- 원격 저장소: Container Registry 에 저장!
2. Docker 실습하며 배워보기
2.1 설치하고 실행하기
- Os 맞게 설치하기
- 리눅스 - 우분투 설치 가이드
-
Set up the repository
1. apt-get update 2. apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release 3. curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 4. echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
-
Install Docker Engine
1. apt-get update 2. apt-get install docker-ce docker-ce-cli containerd.io 3. apt-cache madison docker-ce # 옵션 4. apt-get install docker-ce=5:18.09.1~3-0~ubuntu-xenial docker-ce-cli=5:18.09.1~3-0~ubuntu-xenial containerd.io 5. docker run hello-world
-
- 리눅스 - 우분투 설치 가이드
- docker images : 다운받은 이미지 확인
- docker run “이미지 이름:태그”
- 다운받은 이미지 기반으로 Docker Container를 만들고 실행
- shell을 꺼도 이미지가 꺼지지 않게 백그라운드 옵션을 주자!
- 실행한 컨테이너는 docker ps 명령어로 확인할 수 있음
- docker exec -it “컨테이너 이름(혹은 ID)” /bin/bash
- “컨테이너이름” -u root -p -> 컨테이너 안으로 들어갈 수 있음
- 다운받은 이미지 기반으로 Docker Container를 만들고 실행
- 기본 명령어 정리
- docker pull “이미지 이름:태그” : 필요한 이미지 다운
- docker images :다운받은 이미지 목록 확인
- docker run “이미지 이름:태그” : 이미지를 기반으로 컨테이너 생성
- docker ps : 실행중인 컨테이너 목록 확인
- docker exec -it “컨테이너 이름(ID)” /bin/bash : 컨테이너에 진입
- docker stop “컨테이너 이름(ID)” : 실행중인 컨테이너를 중지
- docker rm “컨테이너 이름(ID)” : 중지된 컨테이너 삭제
- 다양한 도커 이미지
Reference
- AI boot camp 2기 서빙 강의