[Docker] Docker Swarm
·
Infra/Docker
Docker Swarm 지금까지의 도커 사용은 단일 호스트에서만 이루어졌다. 애플리케이션 규모가 작으면 상관 없겠지만 만약 규모가 더 늘어나게 된다면 어떻게 해야할까? 가장 먼저 떠오르는 생각은 서버의 성능을 높이자!(스케일 업) 이다. 현재 CPU가 듀얼코어에 메모리가 16GB니까,,,,, 새로운 쿼드코어 CPU와 32GB 메모리를 장착한다. 전보다 쾌적하게 서버가 운용되지만 이는 한계가 있다. 메모리와 CPU는 좋은 사양으로 갈수록 가격이 기하급수적으로 늘어나서 현실적인 해결방법이 아니다. 그 다음으로는 할 수 있는 조치가 뭐가 있을까? 단일 호스트가 아닌 여러 개의 서버를 만들자!(스케일 아웃) 이다. 기억하자. 우리는 컨테이너를 설계할 때 Stateless 하게 설계해왔기 때문에 스케일 아웃은 비..
[Docker] Docker Compose
·
Infra/Docker
도커 컴포즈의 이해 docker-compose, 얘는 무엇일까? 등장 배경부터 알아보자. docker container 기술은 애플리케이션을 빠르고 경량화해서 배포하기 위해 등장했다. 우리가 쇼핑몰 애플리케이션을 만들어 컨테이너 형태로 배포한다고 생각해보자. 화면, 웹서버, WAS, DB, 모니터링, 로깅 등등 여러 기능들이 모여서 우리의 애플리케이션을 이룰것이다. 우리는 이 기능들을 컨테이너 단위로 분리하여 구성할 것이다. 컨테이너 설계는 확장성을 고려하여 stateless 하게 설계하는것이 좋고, Utilization을 위해서라도 하나의 컨테이너안에 모든 기능(프로세스)을 넣는것은 지양해야 한다. 이때, 웹서버인 nginx에 트래픽이 몰려 쇼핑몰이 다운될 위기에 처했다면? 스케일 아웃과 스케일 업 두..
[Docker] Docker Daemon
·
Infra/Docker
Docker Daemon 지금까지 docker를 다룰 때 항상 docker라는 명령어를 맨 앞에 붙여서 사용했었다. docker ps -a docker logs -f my-container ... 이러한 docker 명령어는 실제로 누가 처리하고 있을까? # which docker /usr/bin/docker 리눅스에서 which 명령어는 명령어의 파일이 위치한 경로를 출력한다. docker는 usr/bin/docker라는 폴더에 있다고 나온다. 참고로 usr는 Unix System Resource의 약자이다. 맨 처음에 user인줄,,, 그렇다면 얘가 컨테이너를 생성하고 삭제 하는 역할을 할까? 반은 맞고 반은 틀리다. /usr/bin/docker에 있는 docker 파일은 사용자의 명령어만 받아들일 ..
[Docker] Dockerfile
·
Infra/Docker
Dockerfile 이전에 도커 이미지를 생성하는 방법으로, 실행중인 컨테이너에 commit을 통해 변경사항을 저장하는 방법을 소개했었다. 이 방법의 직접 이미지의 동작 여부를 확인할 수 있다는 장점이 있지만, 환경을 구성하기 위해 일일이 개발자가 수작업으로 작업을 해야된다는 단점이 있다. Dockerfile은 변경 사항, 작업 내용들을 텍스트 파일로 기록할 수 있어 베이스 이미지로부터 어떤 변화가 있었고, 이미지의 구성을 좀 더 쉽게 알수있게 해준다. 장기적으로 본다면 이미지의 유지보수가 쉬워지고, 배포시에도 이미지 파일 대신 도커파일만 배포하면 된다는 장점을 가지고 있다. Dockerfile 작성 바로 예시를 보자. FROM ubuntu:14.04 LABEL "purpose"="pactice" ENV..
[Docker] 도커 볼륨과 네트워크
·
Infra/Docker
도커 볼륨 이전 포스트에서 도커 이미지는, 컨테이너를 띄운 이후 읽기 전용으로 바뀌어 컨테이너에서 일어난 어떤 변경사항도 도커 이미지에 적용되지 않는다고 했다. 물론 commit을 하게 되면 변경사항이 적용된 새 이미지가 생기지만 기존의 이미지는 영향을 받지 않는다. 바꿔 말해 컨테이너는 베이스 이미지에 종속적이고 삭제가 된다면 자신의 상태를 잃어버리게 된다는 것이다. 도커 컨테이너는 생성과 삭제가 빈번하다 보니 이럴때마다 데이터를 잃어버리면 치명적이다. 도커 볼륨은 이를 해결하기 위해 등장한 도커 오브젝트이다. 리눅스 마운트 네임스페이스를 이용한 컨테이너 내의 파일 시스템을 관리한다. 도커 볼륨을 통해 데이터를 Persistent하게 유지하는 총 3가지 방법에 대해 알아보자. 호스트 볼륨 공유 이름에서..
[Docker] 도커 이미지와 컨테이너
·
Infra/Docker
도커 이미지 도커 이미지는 컨테이너를 생성할 때 필요한 요소이다.(VM에서 쓰는 iso 파일과 비슷) 쉽게 얘기하면 이미지는 컨테이너를 찍어내는 틀이고, 컨테이너는 틀로부터 생성된 애플리케이션이다! 도커 이미지 이름 imsongkk/ubuntu:14.04 imsongkk : 저장소 이름, Docker Hub나 AWS ECR 같이 docker image를 저장할 수 있는 repository의 이름이다. local에서만 이미지를 빌드할것이라면 저장소 이름은 필수가 아닐 수 있다. ubuntu : 이미지 이름, 해당 이미지의 이름으로 어떤 애플리케이션인지를 나타낸다. 14.04 : 태그, 1편에서 다뤘듯이 도커의 장점은 버전 관리가 된다는 것이다. 애플리케이션의 버전 정보를 나타내는 리비전으로 태그를 사용할 ..
[Docker] Docker란 무엇인가
·
Infra/Docker
Docker 한줄 요약 도커는 리눅스 컨테이너에 여러 기능을 추가함으로써 애플리케이션을 컨테이너 단위로 사용할 수 있게 Golang으로 만들어진 오픈소스 프로젝트이다. 리눅스 컨테이너? 리눅스 컨테이너는 리눅스 운영체제 수준의 가상화 기술로, 컨테이너화 된 애플리케이션은 운영체제 커널과 격리된 공간에서 실행된다. 이것을 가능케 해주는 것은 리눅스에 있는 namespace와 cgroup(컨트롤 그룹)이다. 리눅스 네임스페이스 리눅스에서 프로세스를 관리하는 방법으로는, 커널이 PID 1을 가지는 init 프로세스를 실행시키고 해당 프로세스의 자식으로 프로세스를 생성한다. 이때 자식들은 별도의 네임스페이스를 지정해주지 않으면, init 프로세스의 네임스페이스 속하게 되고 이는 리눅스 시스템 기본 네임스페이스가..
[Docker] 도커 시작하기
·
Infra/Docker
Docker 도커를 처음 접한건 학회였다. 학회에서 데이터 엔지니어링팀에 속해 정규 세션을 들었었는데, 그때 Docker에 대해 알게되었다. 사실 도커라는 키워드는 그 이전부터 몇번 들었었다. 주변에서 그거 그냥 도커로 배포해~~, 학교 os 과제 도커로 가능? 이런 말들을 가끔 들을때 마다 도대체 도커가 뭐길래? 라고 생각이 들었다. 아무튼 학회에서 세션을 듣고 나서 흥미가 생겨 따로 학회원들과 책을 정해 스터디를 진행했었다. 아무래도 실습 없이 책으로만 공부하다보니까 뭔지는 알겠는데 그래서 이걸 어디에 써야할지 몰랐었다. 그렇게 기억 저편으로 잊혀졌다가 인턴을 하며 실제 내가 배포까지 맡아서 해야하는 상황에 닥치자 도커는 나에게 한줄기 빛이 되었다.... 도커 없이는 못사는 몸이 되어버린 이 시점에서..