[#1] docker 기본 및 설치
docker는 지속적으로 주변 지인들로부터 많이 접했던 용어였습니다. 공부해봐야 겠다는 막연한 계획만 가지고 있었는데 이번에 좋은 기회가 되어 공부할 기회가 생겼고 이를 정리해보려고 합니다.
기존에 사용해봤던 virtural machine 기술에서 발전된 개념으로 개인적으로 전반적인 컨셉을 받아들였습니다. 아래의 그림을 보면 Hypervisor, Guest OS를 활용하여 여러개의 application 을 서비스 했던 구조를 docker platform을 이용하여 lib, application 만을 포함하는 container 단위로 서비스 할 수 있는 형태가 가능해졌고 kernel을 공유하는 형태로 활용합니다. 이를 통해 Guest OS와 같은 영역이 복제되지 않는 효과 또한 docker의 많은 장점 중 하나입니다.
docker는 기본적으로 아래의 웹페이지에서 기본적인 가이드 및 설치, 학습이 가능합니다.
Docker Documentation
Get started with Docker Try our multi-part walkthrough that covers writing your first app, data storage, networking, and swarms, and ends with your app running on production servers in the...
docs.docker.com
Docker Hub
Docker Certified:Trusted & Supported Products Certified Containers provide ISV apps available as containers. Certified Plugins for networking and volumes in containers. Certified Infrastructure delivers an optimized and validated Docker platform for enterp
hub.docker.com
위에 docker hub 를 통해 약 10만여개의 이미 만들어진 container를 받아 활용할 수 있는 것 역시 docker 생태계의 큰 장점이 아닐까 생각합니다.
docker의 개념 중에서 정리하고 넘어가고 싶은 부분이 Container의 개념입니다. 여러 개념서나 학습 자료를 보면 우리가 흔히 알고 있는 Container 개념으로 규격화 되어 있으며 어떤 물건이든 담을 수 있고, 배/비행기 등 어디에든 싣을 수 있는 그것. 이 개념도 물론 맞는 개념이지만 이번 교육을 통해 Kernel의 관점에서의 Container는 매우 새로운 insight를 주어서 너무 좋았습니다. 이를 좀 설명해보자면 kernel의 관점에서 바라보는 Container는 Kernel이 가지고 있던 들을 잘 활용하여 만들어낸 개념으로 해석될 수도 있습니다.
chroot : 독립된 공간을 제공하여 특정 경로를 root 로 독립적으로 활용토록 해주는 feature
cgroup : 독립된 공간에 resource를 제어하여 해당 공간 안에서만 활용되도록 cpu, memory 등을 관리 가능하도록 하는 feature
namespace : 독립된 공간에 ipc, mnt, net, pid, user, uts 등을 완전히 격리 시킴으로써 하나의 독립된 공간이 개개의 process처럼 동작이 가능하도록 해주는 feature
위에 내용처럼 Kernel이 가지진 주요 feature를 활용하여 Container라는 개념을 이해해 볼수도 있습니다.
이제 docker를 설치 해보도록 하겠습니다.
1) Install Docker On CentOS
기존에 이미 설치된 docker 가 있으면 명시적으로 제거 해줍니다.
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
docker 를 활용하기 위해 필요한 Library 들을 먼저 설치 해줍니다.
yum install -y yum-utils device-mapper-persistent-data lvm2
docker repository 를 추가 해줍니다.
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
이제 사전 준비가 되었으니 docker engine을 설치 해줍니다.
yum install docker-ce docker-ce-cli containerd.io
이때 특정 version 의 docker를 설치하고 싶다면 아래와 같이 활용할 수도 있습니다.
yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
설치는 정말 간단한 것 같습니다. 설치가 완료되었으니 docker를 아래의 명령어로 실행합니다.
// docker 서비스 시작
systemctl start docke정
// 재시작 시에도 docker가 실행될 수 있도록 설정
systemctl enable docker