[TIL] # 42 Docker

ddalkigum·2021년 2월 6일
1

TIL

목록 보기
41/50
post-thumbnail

Docker

컨테이너라는 가상환경을 띄워 서버를 자동으로 띄워 주는 기술

컨테이너 기술은 it업계에서 빼놓을 수 없는 필수적인 요소로 자리잡았고,

Docker는 가상화 시스템중 하나이고, 최근 기세가 많이 기울어졌지만
여전히 컨테이너 가상화기술의 대표적인 이름으로 쓰입니다

Docker 상황

컨테이너 가상화 기술에 관심이 많아지고
IT, 클라우드 공급자들은 컨테이너 기반의 솔루션을 발표하는데

여기서 문제가 발생하는데 바로...

포맷런타임에 특정한 규격이 없다는데 있었고,
이러한 불안정한 시장에서 Docker가 등장하게 된다

Docker는 현재까지 컨테이너 가상화 기술의 대명사같이 쓰여왔지만

Docker의 경우 Client인 Docker CLI와 서버인 Docker Daemon으로 구성되는데
여기서 서버는 컨테이너 이미지를 빌드하고 관리, 공유, 실행, 컨테이너 인스턴스 관리등 ..
너무 여러가지 기능을 담당하게 되어 굉장히 무거워 진다는 문제점을 제기했고

Buildah, Podman, Skopeo등 도커가 한번에 하는 기능을 나누어
역할별로 구현해주는 툴이 떠오르게 된다

Docker 이외에 Buildah, Podman, Container D 등 여러가지의 컨테이너 기술이
있으며, 지금까지 그래왔듯이 새로운 기술들이 등장하고,
Docker또한 이러한 상황을 넘기기위한 무언가가 필요하지 않을까 생각한다

Docker 명령어

Docker의 실행 플로우는

이미지를 빌드하고, Docker hub에 push 하고, 서버에서 pull을 받아
컨테이너를 띄우는 방식으로 진행된다

Dockerfile을 이용하여 빌드를 진행하며, 상황에 따라서는 여러개의
컨테이너를 띄우게 도와주는 Docker-compose를 사용하여 한번에 빌드하기도 한다

Docker를 사용한 Django 배포를 할때 사용했던 명령어

image build

Docker build -t <docker id>/tag 

image

Docker images

명령어를 입력하면 현재 가지고 있는 이미지 목록을 볼 수 있다

push

Docker push <docker id>/tag

Docker hub에 이미지를 push

pull

Docker pull <docker id>/tag

서버를 통해 배포하기 위해서는 aws 서버에서 docker image를 pull 받아서 실행하면 된다

run

Docker run -d -p 8000:8000 --name <name> <docker id>/tag

Docker를 실행하는데 있어 -d 와 -p 그리고 --name 옵션을 사용했는데

-d 는 daemon의 약자이고, 백그라운드로 실행을 하기위해 적는 명령어
-p 의 경우는 port forwading,
--name을 실행하려는 컨테이너의 이름을 정해줄 수 있다

이외에도 -rm 명령어를 사용하여 도커를 중지하게되면 바로 삭제를 하게 도와주는 명령어도있다.

Docker-compose

이번 프로젝트에서 Docker를 이용한 Django + Mysql + redis 를 함께 배포하려고 사용했고,

Docker-compose의 경우 Docker와 실행 명령어는 거의 비슷했고,
사용하기 위해서는 docker-compose.yml 파일을 만들어 실행해 주었다

Mysql의 경우는 RDS를 사용했으며,
데이터의 양이 많지 않았지만 Redis의 효과는 loadtest를 통해 눈으로 확인했다

결과적으로 여러개의 컨테이너를 띄우긴했지만
Django의 log를 확인해보면 레디스가 연결되지 않았고,
link를 사용해서 해결해보려했는데, 내 지식의 한계를 느꼇고

발표까지 얼마남지 않아 다음의 숙제로 놔두었다

Docker compose에 대해서 공부를 하다보니 자연스레

kubernetes, minikube, Docker swarm에 대해서 공부하게됬고,
이에 대한 블로깅은 내가 완전히 사용할 수 있게 된 그때, 글을 써볼 생각이다

profile
딸기검 -본캐🐒 , 김준형 - 현실 본캐 🐒

0개의 댓글