컨테이너라는 가상환경을 띄워 서버를 자동으로 띄워 주는 기술
컨테이너 기술은 it업계에서 빼놓을 수 없는 필수적인 요소로 자리잡았고,
Docker는 가상화 시스템중 하나이고, 최근 기세가 많이 기울어졌지만
여전히 컨테이너 가상화기술의 대표적인 이름으로 쓰입니다
컨테이너 가상화 기술에 관심이 많아지고
IT, 클라우드 공급자들은 컨테이너 기반의 솔루션을 발표하는데
여기서 문제가 발생하는데 바로...
포맷과 런타임에 특정한 규격이 없다는데 있었고,
이러한 불안정한 시장에서 Docker가 등장하게 된다
Docker는 현재까지 컨테이너 가상화 기술의 대명사같이 쓰여왔지만
Docker의 경우 Client인 Docker CLI와 서버인 Docker Daemon으로 구성되는데
여기서 서버는 컨테이너 이미지를 빌드하고 관리, 공유, 실행, 컨테이너 인스턴스 관리등 ..
너무 여러가지 기능을 담당하게 되어 굉장히 무거워 진다는 문제점을 제기했고
Buildah, Podman, Skopeo등 도커가 한번에 하는 기능을 나누어
역할별로 구현해주는 툴이 떠오르게 된다
Docker 이외에 Buildah, Podman, Container D 등 여러가지의 컨테이너 기술이
있으며, 지금까지 그래왔듯이 새로운 기술들이 등장하고,
Docker또한 이러한 상황을 넘기기위한 무언가가 필요하지 않을까 생각한다
Docker의 실행 플로우는
이미지를 빌드하고, Docker hub에 push 하고, 서버에서 pull을 받아
컨테이너를 띄우는 방식으로 진행된다
Dockerfile을 이용하여 빌드를 진행하며, 상황에 따라서는 여러개의
컨테이너를 띄우게 도와주는 Docker-compose를 사용하여 한번에 빌드하기도 한다
Docker를 사용한 Django 배포를 할때 사용했던 명령어
Docker build -t <docker id>/tag
Docker images
명령어를 입력하면 현재 가지고 있는 이미지 목록을 볼 수 있다
Docker push <docker id>/tag
Docker hub에 이미지를 push
Docker pull <docker id>/tag
서버를 통해 배포하기 위해서는 aws 서버에서 docker image를 pull 받아서 실행하면 된다
Docker run -d -p 8000:8000 --name <name> <docker id>/tag
Docker를 실행하는데 있어 -d 와 -p 그리고 --name 옵션을 사용했는데
-d 는 daemon의 약자이고, 백그라운드로 실행을 하기위해 적는 명령어
-p 의 경우는 port forwading,
--name을 실행하려는 컨테이너의 이름을 정해줄 수 있다
이외에도 -rm 명령어를 사용하여 도커를 중지하게되면 바로 삭제를 하게 도와주는 명령어도있다.
이번 프로젝트에서 Docker를 이용한 Django + Mysql + redis 를 함께 배포하려고 사용했고,
Docker-compose의 경우 Docker와 실행 명령어는 거의 비슷했고,
사용하기 위해서는 docker-compose.yml 파일을 만들어 실행해 주었다
Mysql의 경우는 RDS를 사용했으며,
데이터의 양이 많지 않았지만 Redis의 효과는 loadtest를 통해 눈으로 확인했다
결과적으로 여러개의 컨테이너를 띄우긴했지만
Django의 log를 확인해보면 레디스가 연결되지 않았고,
link를 사용해서 해결해보려했는데, 내 지식의 한계를 느꼇고
발표까지 얼마남지 않아 다음의 숙제로 놔두었다
Docker compose에 대해서 공부를 하다보니 자연스레
kubernetes, minikube, Docker swarm에 대해서 공부하게됬고,
이에 대한 블로깅은 내가 완전히 사용할 수 있게 된 그때, 글을 써볼 생각이다