🧭 도커 컨테이너 구성 및 활용
1. 도커, 컨테이너에 대한 이해
2. MariaDB를 컨테이너로 구성 및 Python Flask 연동
3. docker compose를 통해 여러개의 컨테이너를 효과적으로 관리
1️⃣ 도커, 컨테이너에 대한 이해
✏️ Container
(1) Definition
✔️ Container : 하나의 컴퓨팅에서 다른 컴퓨팅 환경으로 빠르고 안정적으로 실행되도록 코드와 모든 dependencies를 패키징하는 소프트웨어 표준 단위이다.
EX) 코드, 런타임, 시스템 도구, 시스템 라이브러리 및 설정을 패키징한다.
Container vs VM
컨테이너 기술을 이해하려면, VM과 비교해보면 쉽다.
- 컨테이너 = 각각의 프로세스들을 격리시키는 기술 (가상머신 달리 격리된 프로세스들을 묶어서 배포하는 역할이다.)
- Virtual Machine = 가상화 기술 (하나의 emulation된 공간이다.)
도커(Docker)의 구조를 보면 하나의 HostOS(Host Operating System)위에 Docker를 설치하여 그 위에 각각의 서비스(Application) 환경들을 설치/운영하는 형태이다. 따라서 Application들은 각각 OS를 설치하는 것이 아니라 하나의 HostOS위에서 자원만 공유하기 때문에 상대적으로 매우 가볍다.
✔️ 컨테이너란 프로세스 단위의 분리 독립된 환경(공간) 안의 가상공간이다.
👉🏻 각각 <프로세스>들을 격리 시키고 독립시키는 기술이다.
- flask app 올리기 위해, 100MB (Container Image) vs 10GB (Virtual image) 에서 배포해서 관리하는 것은 performance 차이가 난다.
- 또한, Docker가 설치된 환경이라면 이미지(Image)가 사용 가능하기 때문에 어디서든 사용 가능하다.
(2) 활용
OS에 따라 실행 가능한 프로그램이 있고, 실행되지 않는 프로그램이 있다. 예를 들어, Microsoft Access는 Window 버전만 있다. 따라서 Mac OS에서 이 프로그램을 사용하려면, 가상 OS를 설치하여 프로그램을 사용해야 한다.
사용자마다 컴퓨팅의 환경이 다르다. 개발을 할 때에도, 여러가지 패키지를 설치하고 필요한 환경이 다르다. 이 때, 작업하는 환경에 따라서 매번 필요한 패키지를 설치하는 것은 번거로운 일이다.
어떠한 환경에서도 애플리케이션을 "쉽게" 개발, 실행, 테스트, 배포 등을 할 수 있도록 도와주는 것이 Container다.
✏️ Docker
(1) Definition
✔️ Docker : 컨테이너 기반의 가상화 시스템인 오픈소스 플랫폼이다.
👉🏻 Container가 <기술>이라면, Docker는 container 기술을 작동시키는 <플랫폼>이다.
(2) 활용
Docker Container의 장점으로는
- Standard : Container에 대한 industry standard를 개발하여 어디서나 사용이 가능
- Lightweight : Container가 machine's OS system kernel을 공유하므로 각 애플리케이션마다 OS가 요구되지 않음
→ 서버의 효율성 ⬆️, 서버 및 라이센스 비용 ⬇️ - Secure : Application은 Container에서 더 안전하고 Docker는 가장 강력한 default isolation capabilities을 제공
크게 3가지가 있기에 Docker Container를 사용한다.
(3) 컨테이너로 동작시키려면
컨테이너로 동작을 시키기 위해서는
1. 애플리케이션(app, library, code 등)을 Dockerfile이라는 이미지로 정의하여 만든다.
FROM openjdk:8-jdk-alpine #베이스 이미지 파일
COPY build/libs/demo-0.0.1-SNAPSHOT.jar app.jar #컨테이너 내부로 파일 복사
ENTRYPOINT ["java","-jar","/app.jar"] #컨테이너 생성되면서 실행
2. 이미지를 Docker 플랫폼에 빌드한다.
docker build -t {이미지명}:{태그} {Dockerfile 파일 위치}
- 태그는 버전관리 하기 위해서다. ex) old, lastest
3. 빌드한 이미지를 Run(실행)시킨다. 실행을 시키면, 컨테이너로 동작을 한다.
docker run --name {컨테이너 이름} -p {호스트 포트}:{컨테이너 포트} -d {이미지명}:{이미지태그}
2️⃣ MariaDB를 컨테이너로 구성 및 Python Flask 연동
컨테이너로 Python Flask 앱 및 DB 동작 여부 스크린샷
Dockerhub에 Container Image 업로드
3️⃣ docker compose를 통해 여러개의 컨테이너를 효과적으로 관리
✔️ Docker Compose
(1) 빌드한 이미지를 각각 Run을 시켜 구동할 수 있다. 하지만, 구동시켜야할 이미지가 여러 개인 경우, 번거롭다.
하나의 서버에서 여러 개의 컨테이너를 한번에 구동시키기 위해, 도커 컴포즈를 사용한다.
(2) yml 파일을 사용하여 애플리케이션을 정의하고, 구동한다.
docker-compose.yml 정의
version: "1"
services:
my-mariadb:
image: 0sunzero0/mariadb:v1.0.0
ports:
- "3306:3306"
my-flask-app:
links:
- my-mariadb
image: 0sunzero0/cloudflask:v1.0.0
ports:
- "5000:5000"
environment:
- DB_USER=root
- DB_PASSWORD=mysecret
- DB_NAME=cloud_user
- DB_HOST=my-mariadb
Docker Compose 수행
$ docker-compose up -d
환경 정리
$ docker-compose down
4️⃣ 용어
컨테이너 : 실제로 실행되는 프로세스다. 프로세스 단위의 분리 독립된 환경(공간) 안의 가상공간이다.
👉🏻 각각 <프로세스>들을 격리 시키고 독립시키는 기술이다.
도커 : 컨테이너 기반의 가상화 시스템인 오픈소스 플랫폼이다.
도커 이미지 : 컨테이너를 실행하긴 위해 필요한 파일들의 모음 이미지를 만들기 위해, Dockerfile이라는 이미지 생성 파일이 필요하다.
이미지 레이어 : 이미지를 만들 때 생성되는 파일 시스템 이미지 레이어는 컨테이너를 삭제하고 다시 만들어도 사라지지 않는다.
컨테이너 레이어 : 컨테이너를 실행하면 생성되는 파일 시스템 컨테이너가 삭제하면 레이어가 삭제되기 때문에 컨테이너를 다시 생성해도 존재하지 않는다. ex. 데이터베이스 컨테이너
5️⃣ Docker의 단점
Docker의 단점은 컴퓨터 한 대만 관리할 수 있다. 컴퓨터 2대를 연동해서 관리할 수 없다.
컴퓨터 1대만 관리하는 것은 무리가 있다.
고로, Docker Orchestration(= 여러대 컴퓨터에 배포를 하고, 배포 후에도 확장 관리하는 것)인 Kubernetes를 사용한다.
+ 🤔 컨테이너와 이미지의 차이
Image
이미지는 도커에서 서비스 운영에 필요한 서버 프로그램, 소스 코드, 라이브러리, 컴파일 된 실행 파일을 묶는 형태를 말한다.
특정 프로세스를 실행하기 위한 모든 파일과 환경을 말한다.
즉, 더이상 의존성 파일들을 컴파일 하거나 설치할 필요가 없는 상태의 파일을 의미한다.
Container
이미지를 실행한 상태이다.
응용프로그램 자체를 패키징하여 격리된 공간에서 프로세스를 동작시키는 기술이다.
'Project > TIL, WIL' 카테고리의 다른 글
TIL(41) 21-11-20 : 조회수, comment 기능 구현 (Flask) (0) | 2021.11.20 |
---|---|
TIL(40) 21-11-17 : @Transactional / 스프링 Controller가 Client로 부터 파라미터를 받는 방법 / Lambda와 Stream (0) | 2021.11.17 |
TIL(38) 21-11-10 : Spring Security + OAuth2 (0) | 2021.11.10 |
TIL(37) 21-11-09 : Object Oriented Programming (0) | 2021.11.09 |
TIL(36) 21-11-08 : Spring DI / IoC (0) | 2021.11.09 |