티스토리 뷰

이게 뭘까! 바로 귀여운 도커의 시작화면이다.

처음 도커를 알게 된 후 든 궁금증은 대체 왜 고래가 튀어나올까? 였다.

원래 docker의 마스코트가 고래인데, shell에 고래를 여러 기호를 통해 나타낸 점이 흥미롭다.

 

나는 윈도 기반의 컴퓨터를 사용하는데 학년이 올라가면서 리눅스 기반으로 해야 하는 과제들이 많이 생겼다.

왜 리눅스를 이용하는 걸까?

 

리눅스를 이용하는 것이 처음에 익숙하지 않아서 매일 드는 생각이었다.

같은 C언어 코드를 윈도 환경에선 idle을 이용하여 단축키로 간단히 컴파일하고, 실행할 수 있는데

우분투에서는 shell에 gcc -o ~ 어쩌구로 컴파일해야 한다.

우분투에서 c언어로 socket programming을 하는 과제를 요새 계속 진행 중인데,

소켓 프로그래밍이 우분투에서 진행되는 이유는 '보안' 관련 때문이라고 한다.

(윈도는 보안 쪽으로 신경 쓰는 게 많아서 미리 설정해줘야 하는 점들이 많다고 한다.)

 

뭐 어쨌든, 리눅스를 이용하면 좀 더 있어 보이는 것도 있고 사용하다 보니 의외로 직관적이라는 느낌이 들었다.

그리고 아직 완벽히 적응한 것은 아니지만, 기본적인 명령어는 외웠고 사용하기 나름 편하다.

그리고, git bash도 linux의 명령어 체계와 같기 때문에 사용하는데 좋았다.

 

하여튼, 분산처리 수업 시간에 도커 실습을 진행하였는데, 쉽고! 재밌고! 나중에 사용할 일이 있을 것 같아서

포스팅을 해보기로 했다.

 

먼저, 도커란 평소 linux 서버를 사용하기 위해 이용하는 virtualBox, VMware 등과는 다르다.

도커는 '컨테이너' 기반의 가상화 플랫폼으로 프로그램의 배포 및 관리를 간단하게 해 준다.

virtualBox를 사용하면 서버 업데이트나 관리할 때 어느 정도 복잡하고, 에러도 많이 발생한다. (ㅠㅠ서버를 민 게 한두 번이 아니다.)

하지만 도커는 이런 관리 측면에서 매우 간단하다고 한다!!!

실제로 사용해보면서 느낀 도커의 단점은 처음 shell을 열 때 로딩 시간이 길다는 점이다. ㅋㅋ

도커에 대해 엄청나게 설명을 잘해주신 블로거 분이 계신다!

소비자를 위한 도커 안내서

댓글에도 많은 분들이 칭찬 일색이시다. 한 번 살펴보는 것이 좋다.

 

어쨌든 오늘 실습시간에 진행한 것은 "클러스터 구성해보기"이다.

실습 단계를 간단히 5단계로 나누어 진행을 해보도록 하겠다.

 

 

1. 클러스터를 나타내기 위한 '토큰'을 생성한다.

'토큰' 생성 명령어는 $ SWARM_TOKEN=$(docker run swarm create)이다.

아, 참고로! 모든 코드는 띄어쓰기까지 그대로 따라 하는 것이 좋다. =의 양쪽에 띄어쓰기가 있으면 없는 명령어라는 오류가 나더라..;;

swarm create를 통해 생성한 token을 SWARM_TOKEN이라는 변수에 저장해주는 단계이다.

이 token은 cluster를 구분하기 위한 id라고 볼 수 있다.

 

2. 클러스터에 마스터 docker machine을 생성한다.

마스터 docker machine은 이름에서도 느껴지지만 한 클러스터에 유일하게 존재해야 한다.

master docker machine을 생성하는 코드는 다음과 같다.

$ docker-machine create -d virtualbox --engine-label dc=a --swarm --swarm-master --swarm-discovery token://$SWARM_TOKEN swarm-master

먼저, dc=a를 보자. dc는 data center의 줄임말이다.

dc의 포트는 하나의 서비스만 실행할 수 있다.

dc=a는 a라는 data center에 swarm-master를 생성하겠다는 뜻이다.

참고로, 일반 docker machine을 생성하는 코드는 위 코드에서 중간의 --swarm-master 부분만 제거하면 된다.

그리고, 클러스터를 지정하기 위해 1번에서 구한 token 값을 넣어주고, docker machine의 이름을 맨 마지막에 설정해준다.

이 코드에선 docker machine의 이름이 swarm-master이다.

 

3. 다음으로 일반 docker machine을 생성해보자.

docker machine을 생성하는 코드는 다음과 같다.

마찬가지로 data center a에 swarm-1이라는 docker machine을 생성하였다.

코드는 다음과 같다.

$ docker-machine create -d virtualbox --engine-label dc=a --swarm --swarm-discovery token://$SWARM_TOKEN swarm-1

dc=a에서 a 자리에 b나 다른 것을 넣으면 해당하는 data center에 swarm-1을 생성한다.

나는 dc=a 에는 swarm-master와 swarm-1, swarm-4가 있고,

dc=b에는 swarm-2, swarm-5가 있고, dc=c에는 swarm-3, swarm-6이 있는 구조를 만들고자 한다.

이렇게 만들기 위해 총 실행한 코드는 7줄이고 다음과 같다.

$ docker-machine create -d virtualbox --engine-label dc=a --swarm --swarm-master --swarm-discovery token://$SWARM_TOKEN swarm-master

$ docker-machine create -d virtualbox --engine-label dc=a --swarm --swarm-discovery token://$SWARM_TOKEN swarm-1

$ docker-machine create -d virtualbox --engine-label dc=b --swarm --swarm-discovery token://$SWARM_TOKEN swarm-2

$ docker-machine create -d virtualbox --engine-label dc=c --swarm --swarm-discovery token://$SWARM_TOKEN swarm-3

$ docker-machine create -d virtualbox --engine-label dc=a --swarm --swarm-discovery token://$SWARM_TOKEN swarm-4

$ docker-machine create -d virtualbox --engine-label dc=b --swarm --swarm-discovery token://$SWARM_TOKEN swarm-5

$ docker-machine create -d virtualbox --engine-label dc=c --swarm --swarm-discovery token://$SWARM_TOKEN swarm-6

이제 docker-machine을 생성하는 과정의 코드에 대한 이해는 확실히 되었으리라 믿는다!

 

4. 이제, 특정 필터를 거쳐서 해당하는 machine에만 특정 서비스를 실행해보자.

말이 어렵지 굉장히 간단하다.

아까 생성한 docker machine에는 개별적인 service를 실행할 수 있다.

$ docker run -d -e constraint:dc==b postgres

라는 코드는 dc가 b인 machine들에게 postgres라는 서비스를 실행시키고,

$ docker run -d -e constraint:node==swarm-3 nginx

라는 코드는 이름이 swarm-3인 machine에게 nginx라는 서비스를 실행시킨다.

(캡처한 코드에는 =가 하나 들어갔는데 두 개 들어가야 맞다.. ==가 equal이라는 비교 연산자이다.)

즉, data center로 filtering을 할 거면 dc==a를 통해 constraint를 설정하고,

machine의 이름으로 filtering을 할 거면 node==something을 통해 constraint를 설정하면 된다.

그러면 해당 조건을 만족하는 docker machine에만 특정 서비스가 실행된다.

 

5. 지금까지 한 것의 결과이다.

먼저 $ docker-machine ls를 통해 현재 어떤 docker machine이 생성되어 있는지 파악할 수 있다.

그리고, $ docker ps를 통해

service를 진행하는 docker machine과 하고 있는 service를 알 수 있다.

 

참고로 사용한 docker machine을 지워야 할 때 지우는 방법은 다음과 같다.

$ docker-machine stop swarm-1

$ docker-machine rm swarm-1

stop 다음에 rm 명령어를 순차적으로 실행하면 된다.

만약 swarm-2도 같이 지우고 싶다면

$ docker-machine stop swarm-1 swarm-2

$ docker-machine rm swarm-1 swarm-2

로 띄어쓰기로 구분하여 적어주면 한 번에 지워진다! 꿀팁!

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함