-
Docker - BasicServer Side/Docker 2020. 3. 28. 20:31
Docker를 실제로 적용해볼일이 있어서 개념과 사용법을 간단하게 정리해보았다. 학원에서 실행하는 것만 따라해보면서 마냥 신기했던 기억이 있는데, 개념을 이해하고 실제로 적용해보니 정말 편리하고, 많은 기업들이 Docker를 사용하는 이유를 알 수 있었다. 앞으로도 도커를 적극적으로 활용하고 컨테이너를 시스템에 의해 처리할 수 있는 쿠버네티스에 대해도 공부해볼 생각이다.
Docker 란?
기존의 Virtual Machine의 단점을 개선한 컨테이너 기반 가상 머신. docker는 크게 이미지(파일)와 컨테이너(프로세스)로 구성된다.
Image: 어플리케이션(소스 코드)과 라이브러리(또는 프레임워크)를 담고 있는 하나의 파일. 구성하고자 하는 환경을 설치하기 위한 스크립트를 담고 있는 파일이라고 생각하자.
Container: Image의 실행 상태(프로세스). 이미지를 이용해 실행 상태로 만든다.
-> 하나의 Image를 이용해 여러개의 Container를 생성할 수 있다.
-> Docker의 Container는 자체 컨테이너를 사용한다. (과거에는 리눅스 컨테이너를 사용했다.)
기존의 가상 머신(VM)과 차이점
기존의 가상머신은 호스트 OS위에 게스트 OS를 가상화
- 호스트OS 위에 게스트OS를 올리고 그 위에 어플리케이션을 동작시킨다.
Host OS(Hypervisor) - [Guest OS1 - Application1], [Guest OS2 - Application2], ...
-> 무겁고 느려진다는 단점(실제 서비스하기 어려움)
Docker
- 호스트 OS위에 도커 엔진을 설치하고 여기에서 어플리케이션을 동작시킨다.
Host OS - Docker Engine - [Application1], [Application2], [Application3],... 구조로 실행 속도가 매우 빠르다. - 하나의 OS에 여러개의 컨테이너가 독립적으로 실행된다.
- git처럼 이미지를 저장소(Dockerhub)에 저장하거나 불러와 쉽게 환경을 구축할 수 있다.
도커 설치 및 사용법
기본 설정
-
도커 허브 계정 생성 - Docker Hub
-
도커 데스크탑 설치- Docker Desktop
# 설치가 끝나고 도커 버전확인 $ docker --version
도커 이미지 생성
# docker 파일 생성 - 일반적으로 Dockerfile(또는 Dockerfile.base)로 생성하는듯 $ touch Dockerfile # 스크립트 작성 $ vim Dockerfile #################################################################### # From을 이용해 다른사람이 올려놓은 python3.7 이미지를 사용한다. FROM python:3.7 RUN apt-get update && apt-get install -y --no-install-recommends \ python3-setuptools \ python3-pip \ python3-dev \ python3-venv \ git \ && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* CMD python -c "print('hello world')" ####################################################################
FROM: 누군가 올려놓은 기존 이미지를 사용
RUN: 쉘 커맨드에서 사용할 명령
ENV: 환경 변수를 설정할 때 사용
CMD: 도커 설정이 완료되고 실행될 명령(파이썬을 실행한 후 print('hello world') 명령 → 화면에 hello world가 출력된다.)
ADD: 로컬 파일을 이미지에 올릴 때 사용
ex) ADD ./game_of_life/game_of_life.py /var/www/streami/game_of_life/game_of_life.py
= game_of_life.py를 해당 이미지로 생성된 컨테이너의 디렉토리(/var/www/streami/game_of_life/)에 추가한다.
도커 주요 명령
# 빌드 이미지 -> 도커 파일(Dockerfile)을 docker image로 생성 $ docker build -t <your-tag> -f Dockerfile . # ex) docker build -t hello-world -f Dockerfile .
-t: 태그를 생성할 때 사용
-f: Dockerfile의 디렉토리를 의미한다.(위 코드는 현재 폴더의 Dockerfile을 이용해 이미지를 생성함)
# 내 시스템에 생성한 이미지 $ docker images # 내 시스템 모든 이미지 삭제 $ docker rm $(docker ps -a -q) # 이후 $ docker rmi $(docker images -q) # 현재 실행중인 컨테이너 $ docker ps -a # 도커 실행 $ docker run -it <your-tag> # ex) docker run -it hello-world # 'hello world'가 출력된다. # -d: 백그라운드에서 실행되어야할 경우 필요한 옵션 $ docker run -d -it <your-tag> # 현재 실행중인 컨테이너 아이디 확인 $ docker ps - a # 컨테이너 중지 $ docker stop <your-container-id> # 도커 실행 후 bash shell 실행 docker run -it <your-tag> /bin/bash # --rm: 컨테이너가 종료될 경우 해당 컨테이너 삭제 docker run -it --rm <your-tag>
Reference
도커 개념: https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
도커 기본 사용법: http://pyrasis.com/Docker/Docker-HOWTO
리눅스 컨테이너: https://www.44bits.io/ko/keyword/linux-container
'Server Side > Docker' 카테고리의 다른 글
도커 이용중 Python 한글 인식 오류(Docker(ubuntu 16.04)) (0) 2020.03.28 - 호스트OS 위에 게스트OS를 올리고 그 위에 어플리케이션을 동작시킨다.