Docker 기본 명령어를 사용해보자.


왜?

Docker.

마에스트로 1단계에서 처음으로 사용해보았다.

1단계 과제에서 초기 세팅이 도커로 되어있었다. 우리는 해당 도커 이미지를 받아 과제를 진행 하였었다.

Docker는 일종의 가상환경이다. 손쉽게 가상 환경을 구축하고 내부에 실제 서버와 같이 여러 서비스들을 올려놓고 실행시 킬 수 있다.

기존 가상환경보다 훨씬 가볍고 성능도 맞먹을 정도로 잘 돌아간다고 한다.

핫한 녀석임으로 공부를 하고자하는 마음과 캘리 프로젝트에 어떻게 접목 시키면 좋을까 라는 생각에 기본 도커 튜토리얼을 따라가 보았다.

무얼 할까요

도커에는 이미지와 이를 실해시켜놓은 컨테이너라는 개념이 존재한다.

이미지는 dockerHub를 통해 검색하여 여러 서비스가 세팅된 이미지를 손쉽게 구할 수 있다.

우리는 ubuntu이미지를 구해 컨테이너에 실행시키고 각종 도커 관련 명령어를 실행해볼 것이다


docker 설치하기.

sudo apt-get install docker.io


docker ubuntu 이미지파일 설치


sudo docker pull ubuntu:latest


docker 이미지목록 출력하기

sudo docker images


docker 컨테이너 생성하기 —

sudo docker urn -i -t --name hello ubuntu /bin/bash

-> -i -t 옵션으로 실행된 bash 쉘에 입력및 출력가능 -> –name으로 컨테이너의 이름을 지정할수있음음 -> exit입력으로 bash 셀에서 빠져나올 수 있음.


docker 컨테이너 확인하기

~~ sudo docker ps -a


-a 는 모든 컨테이너 목록이고
-a 가 없다면 실행된 컨테이너 목록만을 출력해 준다.

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ec6d32cbb50 ubuntu “/bin/bash” About a minute ago Exited (130) About a minute ago hello


<br>

docker 다시 시작하기
---

* 도커를 실행할 수있고( 쉘 접속은 ㄴㄴ)

sudo docker start hello




sudo docker ps를 해보면

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0ec6d32cbb50 ubuntu “/bin/bash” 4 minutes ago Up 6 seconds hello


이와같이 실행되었다는 것을 알 수 있다.

<br>

docker hello 컨테이너에 다시 접속해보기
---

* bash shell로 들어가게 될것이다. 컨테이너 이름 대신 id를 사용해도된다.

sudo docker attach hello



<br>

docker bash 에서 실행한상태로 나오기
---

* ctr+p 누르고 ctr+Q 를 하면 정지하지 않고 빠져나올수 있다.


<br>

docker 컨테이너 멈추기
---

* 도커 컨테이너를 멈춰보자.

sudo docker stop hello


<br>

docker 도커외부에서 안으로 명령 실행하기
---

* 컨테이너가 실행된 상태에서 내부에 명령어를 실행해보자
* 당연히 도커가 실행된 상태여야한다.
* hello world가 출력된다.

sudo docker exec hello echo “hello world”



<br>

docker 컨테이너 삭제
---

* 도커를 삭제해보자.

docker rm {컨테이너이름} docker rm hello


<br>

docker 이미지 삭제
---

* 도커 이미지를 삭제해보자.

docker rmi ubuntu:latest docker rmi {이미지네임} ~~~


마치며…

도커를 아주아주 기본적으로만 사용해 보았다.

기본만 사용해보아서인지 당장 우리 서비스에 적용할 부분을 찾지 못하였다.

다만

배포에 굉장히 용이할 것이라는 생각이 들었다.

과거에 몰려올 유저수를 걱정하며 aws에 elb를 붙이며 어떻게 배포할지에 대한 이슈가 있었다.

서비스가 커짐에따라 scale out은 필수적일것이고,

서버가 생성될때 어떻게 기존 서버환경을 세팅해야하지? 라는 궁금증이 바로 그것이었고

aws사용자그룹에 위와같은 질문을 올렸었다.

elb를 사용하게되면서 launchConfigure로 현재 production서버의 가장 최신 이미지 를 설정해두었는데요. 해당 production의 환경이나 중요 소스코드가 수정될경우 매번 웹에서 launchConfigure에 이미지를 최신 업데이트해주어야하나요?.. 무언가 다른 보다 편한 방법이없을까요..?

응답에는 아래와같은 것들이 있었다.

  1. launch configure 쉘스크립트를 걸어 최신소스를 받게한다.
  2. code deply서비스를 제안.
  3. fabric을 이용한 배포. paramiko 라는 것을 사용해봐라.

이제 이부분에 대해 추가적으로 도커를 적용해도 좋을 것이라는 생각이들었다.

기존 방법들이 소스를 올려 설치하고 업데이트 하는 방식이었다면 도커는 이미 만들어진 서버자체를 다운받아 올리는 꼴이니 훨씬 가볍고, 빠르게 적용할 수 있다는 생각이 들었다.

나중에 caly가 커지면 도커를 꼭 달아봐야겠다