시작 전
지난 3월달에 이어서 이번 5월 달에도 교육을 진행하게 되었다.
시험이 얼마 남지 않은 입장에서 새로운 주제를 가져오는건 다소 부담이 되었기에..
학교 전공 수업인 '소프트웨어공학'에서 배우기도 했고 졸업프로젝트에도 사용하고 있는 '도커'에 대해 교육을 진행하게 되었다.
준비를 하는 과정에서 교육 팀원들도 처음 접하는 주제였고 나 또한 누군가에게 가르칠 정도로 잘 알진 못하였기에 많은 시간과 노력을 들이게 되었다.
그래도 나름대로 교육을 준비하며
0. intro
프로젝트 배포를 하다보면 '내 pc에서는 잘 되는데 왜 배포하면 안될까?'라는 의문을 한번씩 가지게 되는 순간이 온다.
이에 대한 이유로는 os 환경이 달라서, java 버전이 달라서 등등 여러가지가 있는데..
이런 번거로움을 해결하기 위해서 `Docker`가 등장하게 되었다.
교육 목표
1) 도커의 개념에 대해 이해해보자
2) 도커 배포 과정에 대해 이해해보자
1. 도커란?
도커란, 컨테이너 기반의 오픈소스 가상화 플랫폼으로, 응용 프로그램과 그 종속성을 격리된 환경인 컨테이너로 패키징하여 실행하는 기술이다.
여기서 컨테이너는 무엇인가?
컨테이너는 가상화 기술을 이용하여 어플리케이션과 개발 환경을 격리된 공간에서 실행하는 단위를 나타낸다.
2. 가상머신 vs 도커 컨테이너
도커에 대해 본격적으로 알아보기 전에 가상머신과 도커 컨테이너의 개념에 대해 알아보고 비교해보자.
Virtual Machine
- 기존의 가상화 기술은 하드웨어 Infrastructure 위에, Hypervisor software를 이용해서 각각의 가상의 머신을 만들 수 있음.
- 즉, 하나의 운영체제 위에서 각각의 고립된 다른 환경에서 구동하기 위해서 VM을 사용함.
- 각각의 고립된 다른 환경들(Virtual Machine)은 운영체제(OS)를 포함하고 있기 때문에, Mac 위에서 리눅스나 윈도우 같은 운영체제를 사용하는 것이 가능함.
그렇다면 왜 이러한 가상 머신을 사용하는가?
이는 효율성 때문이다.
가상 머신을 통해서, 여러 사용자가 하나의 컴퓨터를 동시에 사 용할 수 있도록 여러 대의 작은 컴퓨터로 분할 사용하거나, 운영체계나 하드웨어 등의 구성을 달리하여 운영하고자 할 때 주로 사용된다.
그러나, 기존의 가상화 기술은 고립된 환경마다 운영체제를 포함하고 있기 때문에 굉장히 무거워짐. (구동 시간 오래 걸림, 컴퓨터의 리소스를 많이 사용함, …)
이런 가상머신의 컨셉을 가져오면서도 경량화한 모델이 바로 Container이다.
Container
- 하드웨어에서 설치된 Host OS 위에, Container Engine이라는 소프트웨어를 설치하면 각각의 어플리케이션을 고립된 환경(Container)에서 실행할 수 있음.
- VM과 다르게 고립된 환경에서 운영체제를 포함하지 않고, Container Engine에 설치된 Host OS를 공유함.
- Container를 구동하기 위해, Container Engine이 필요하고 그 엔진이 Host OS에 접근해서 필요한 것들을 처리하는 방식임.
- 이 Container Engine 중에서 가장 많이 사용하는 것이 Docker (Docker != Container, = Container Engine)
3. 도커 사용 이유
- 환경 일치성: 다양한 환경에서 동일한 실행 환경을 보장한다. 개발 환경과 운영 환경의 차이로 인한 문제를 방지하며, 응용 프로그램을 어디서든 실행할 수 있다.
- 편리한 배포: 도커 컨테이너는 이미지로 패키징되어 배포되므로, 어플리케이션 배포가 간단해진다. 이미지를 공유하거나 배포할 때 용이하며, 빠른 확장이 가능하다.
- 격리된 환경: 도커는 각 컨테이너를 격리된 환경으로 실행하므로, 하나의 컨테이너에서 발생한 문제가 다른 컨테이너에 영향을 주지 않는다.
- 자원 효율성: 가상 머신과 비교해 더 가볍고 빠르며, 호스트 시스템의 리소스를 효율적으로 활용할 수 있다.
- 스케일링: 컨테이너 기반 아키텍처는 쉬운 스케일링이 가능하여 요구에 따라 응용 프로그램을 확장할 수 있다.
4. 도커 구성 요소
컨테이너를 만들기 위해서는 dockerfile 만들기 → dockerfile을 build해서 image 만들기 → container 구동하기
Dockerfile
- 컨테이너를 어떻게 만들어야하는지 recipe!
- 필요한 파일, dependencies, 환경변수, 실행 스크립트 등 포함
- DSL(Docker Specific Language) 언어를 사용해 이미지를 생성할 수 있음.
Image
- Dockerfile을 build해서 이미지 생성.
- 실행되고 있는 application의 상태를 스냅샷!
- 변경 불가능
- 객체지향의 class같은 개념! 붕어빵 틀~
- [저장소 이름]/[이미지 이름]:[태그] 형식
- 저장소 이름: 이미지가 저장된 장소. 저장소 이름이 명시되지 않은 이미지는 도커 허브의 공식 이미지를 뜻함
- 이미지 이름: 해당 이미지가 어떤 역할을 하는지 나타내며 필수로 설정해야 함
- 태그: 이미지의 버전을 나타냄. 태그를 생략하면 도커 엔진은 latest로 인식함
Container
- 이미지를 고립된 환경에서 프로세스를 실행할 수 있음
- 이미지를 이용해서 구동(컨테이너 = 이미지를 실행한 상태)
- 컨테이너에서 개별적 수정 가능. 수정해도 이미지에는 영향을 끼치지 않음.
- 도커 이미지가 도넛 레시피라면, 도커 컨테이너는 레시피를 이용해 만든 도넛으로 비유 가능!
5. container 공유 방법
- docker도 github처럼 도커에서 관리하는 호스팅된 docker container registry인 dockerhub가 존재한다.
- git, github같은 개념 (= docker, dockerhub이 있음)
- local에서 dockerfile 생성, 빌드 → image 생성 → Image container registry에 푸시하기 → Server에서 pull해서 실행
- 참고로, container repository에는 public, private가 있다.
- Public: dockerhub, RED HAT, GitHub Packages
- Private: AWS, GoogleCloud, Microsoft Azure
6. 도커를 이용한 애플리케이션 배포 방법
- 도커 파일 생성 (이미지 준비)
- 도커 이미지 빌드
- 도커 컨테이너 실행
- 도커 컨테이너 관리
- 도커 컴포즈를 이용한 배포
참고자료
https://seosh817.tistory.com/345
https://velog.io/@gkrry2723/원리-공부-Docker란-도커-동작-원리-도커-개념
https://velog.io/@xeonu/SpringBoot-프로젝트-docker로-배포하기
https://gr-st-dev.tistory.com/731 https://velog.io/@devmin/Docker-deployment https://subicura.com/2017/01/19/docker-guide-for-beginners-1.html
https://peterica.tistory.com/212 https://lucas-owner.tistory.com/48
'👥대외활동 > 🥔코테이토' 카테고리의 다른 글
IT연합동아리 코테이토 활동 및 회장 회고록 (8기 회고) (0) | 2024.08.23 |
---|---|
IT연합동아리 코테이토 활동 및 운영지원팀장 회고록 (7기 회고) (0) | 2024.06.24 |
IT연합동아리 코테이토 활동 회고록 (6기 회고) (2) | 2024.05.01 |
SCRUM (스크럼) (0) | 2024.03.23 |
제 3회 코테이토 해커톤 후기 (2) (1) | 2024.01.10 |