도커를 공부해본다 !
도커의 역할은 엄청나게 많다.
서비스를 생성, 테스트 및 배포할 수 있게 해주는 SW이다.
도커의 로고를 보면 고래 모양 위에 컨테이너 박스들이 있는 것을 알 수 있는데, 이는 도커가 지원하는 컨테이너
의 개념을 보여준다.
컨테이너 안 내용물들은 각각 다른 물건들이 적재되어있지만 각각 컨테이너라는 하나의 단위로 배에 실어진다.
컴퓨터에서도 물건대신 어플리케이션
을 패키지로 묶어 실행할 수 있다.
특징들이 너무 많지만 크게 살펴보면 아래와 같다.
앞서 잠깐 언급했듯이 컨테이너처럼 어플리케이션과 구성요소를 패키지로 묶을 수 있다.
가령 A 어플리케이션이 B, C 같은 어플들과 무조건 함께 작동되어야한다면 이 A,B,C를 하나의 패키지로 묶어 실행시킬 수 있다.
Docker 이미지
를 통해 배포하게되면 모두 같은 어플리케이션을 여러 환경에서 동작할 수 있다.
Docker 이미지?
실행시키고자하는 어플리케이션과 해당 어플리케이션을 실행하기 위해 필요한 모든 환경들을 포함한읽기 전용
템플릿
위에서 말한 이미지
를 실행한 상태를 말한다.
이미지 (정적인 상태) - 컨테이너 (동적인 상태)
GitHub! 에는 여러 사용자들의 코드들이 저장된다.
마찬가지로 Docker Hub에는 여러 이미지들이 저장되며, 여러 사용자들이 공개해놓은 이미지를 다운받을 수 있고 내가 저장공간에 이미지를 업로드 할 수도 있다.
볼륨은 컨테이너의 데이터를 지속적으로 저장할 수 있게 해주는 매커니즘.
Docker의 컨테이너는 우리에게 가상환경을 지원해준다.
만약 컨테이너 안에 운영되고 있는 파일을 내 PC local로 가져오려면?
내 PC와 컨테이너안의 파일을 바인딩하면된다!
바인딩된 컨테이너 속 파일을 지웠을때, 볼륨을 사용하면 데이터를 복구 할 수 있다.
Docker는 여러가지 네트워크 드라이버를 지원하므로 다양한 네트워크 설정을 할 수 있다.
도커는 여러 기능을 지원해준다.
도커를 통해 무엇을 할 수 있을까?
여러 사람이 한 기능이나 어플리케이션에 대해 같이 개발을 하게되면 많은 부분에서 문제가 발생하고 그 중 또 많은 부분을 차지하는게 버전관리
가 아닐까 싶다.
상위 버전에서 생겨난 메소드를 하위버전에서 쓸 수 없듯 같이 개발을 하는 사람들은 모든 환경이 동일하게 시작하면 여러 문제를 피하는 방법이 될 수 있다.
Docker는 동일한 환경을 세팅한 컨테이너를 실행하여 환경차이로 일어나는 문제를 줄일 수 있다 !
Docker이미지를 배포 후 컨테이너로 실행하게되면 어플리케이션을 위한 다른 구성요소를 다운받을 필요가 없기때문에 배포가 빨라진다 !
MSA와 컨테이너 구조는 비슷한 점이 있다.
서비스 별로 별도 관리가 가능하다는 점이다.
MSA에서는 한 어플리케이션에 있는 여러 서비스들을 각각 나누어 개발하기 때문에 여러 컨테이너를 사용해 해당 서비스들을 쉽게 관리 할 수 있다.
이전 포스트에 파이프라인과 관련된 내용이 나온다 !
CI/CD는 개발주기와 배포시간을 줄여주고 코드품질을 높여준다.
도커에서는 코드가 변경될 때, 자동으로 빌드, 테스트, 배포를 하도록 설정할 수 있기때문에 CICD 환경을 구축할 수 있다.
실제로 Docker와 많이 헷갈리는 내용이였다. (단지 비슷한 이름이라는 이유로 ㅎㅎ,,)
Docker Compose는 여러개의 Docker 컨테이너들을 정의하고 실행하기위한 일종의 도구이다.
명령어들이 적힌 docker-compose.yml 파일을 사용하여 관리한다.
해당 yml파일을 사용해서 정의할 수 있는 내용으로는 서비스, 네트워크, 볼륨 등이 있다.
yml 안에 명령어들을 빌드하고 시작하기위해서는 docker compose up
명령어를 사용한다.
백그라운드 환경에서 실행시키고 싶다면 맨 뒤에 -d
를 붙여준다.
반대로 실행중인 서비스들을 중지시키고 싶다면 docker compose down
명령어를 사용한다.