이번 포스팅에서는 Docker에대하여 다뤄 보려합니다.
이미 Docker를 이용해서 container-image를 이용하여 서비스 애플리케이션을 동작하거나,
여러 오픈소스를 사용 하는 것은 일상이 되어 있습니다.
여러 블로그 자료들이 있는데,
유튜브 컨텐츠를 만들면서 개인적으로도 더욱 자세히 Docker에 대하여 알아보고자 작성하게 되었습니다.
Docker란?
Docker는 애플리케이션을 컨테이너(container)라는 독립된 공간에서 실행시키는 플랫폼입니다.
운영체제에 직접 설치하지 않고, 애플리케이션 실행에 필요한 모든 환경(라이브러리, 코드, 실행파일 등)을 하나의 이미지로 패키징하여 실행할 수 있습니다.
개인적으로 Docker에 대한 사용 방법을 알야아 하는 이유를 꼽아보라 한다면,
쿠버네티스를 이용한 MSA환경에서도 Container-image가 필수 적으로 필요합니다.
또한 과거에는 베어메탈 서버나, 가상머신에 패키지로 배포하던 웹서버나 DB등 미들웨어를 요새는 컨테이너로 많이 배포하기도합니다. 따라서, 시스템 엔지니어, 데브옵스 엔지니어, 개발자 등 직무에 상관없이 모두 Docker에 대하여 알고 있어야 한다 생각합니다.


그 밖에 컨테이너를 이용하게 되면, 다양한 운영체제 및 클라우드, 온프레미스 환경의 종속성을 어느정도 벗어 나 이식성이 좋아진다는 점이 이점으로 작용 할 수 있을것 같습니다.
Infra
인프라라는 단어의 의미를 생각해볼 필요가 있을 것 같습니다. 간단하게 인프라에 대하여 설명해보면 물리적인 장비로 생각을 할 수 있는데, 더 나아가 IT서비스를 제공하는 데 필요한 모든 기반 요소를 포함 한다 생각하는 것이 더 맞을 것 같습니다. 즉, 서버와 스위치 같은 물리장비 + 클라우드 서비스 + 미들웨어 등 서비스를 구동할 수 있는 기반이 되는 요소들을 포함한다 생각 할 수 있습니다.
IaC(Infrastructure as Code)
클라우드를 이용하거나 하이퍼바이저를 이용한 가상 머신을 이용하고 있고, Docker나 Kubernets를 이용하여 인프라를 구성하는 경우 Code를 이용한 File들로 인프라를 관리 할수 있게 됩니다. 이를 IaC 즉, Infrastructure as Code라 부릅니다. 예를들면 Kubernetes의 yaml 파일, Docker의 dockerfile, docker-compose.yaml 그리고 AWS에서 사용하는 클라우드 포메이션이나 Terraform을 예로 들 수 있습니다.

[ docker-compose.yaml 샘플]
Docker 주요 기능
Build
애플리케이션에 필요한 소스코드, 라이브러리, 아티팩트 등 모든 것을 하나로 모아 Docker를 이용하여 Build를 하면 container-image가 생성 됩니다.
하나의 container-image에는 하나의 애플리케이션을 구성하도록 하고 필요시 여러개의 container를 엮어서 서비스를 만들 수 있도록 합니다. 이때 필요한것이 docker-compose기능이라 볼 수 있을 것 같습니다.
Run
생성된 container-image를 실행하는 기능 입니다.
…작성중…