규도자 개발 블로그

도커(Docker)로 CentOS 이미지 systemctl 사용하기 - 1 [우분투 이미지로 컨테이너 만들어 웹서버 돌려보기] 본문

DevOps/Docker

도커(Docker)로 CentOS 이미지 systemctl 사용하기 - 1 [우분투 이미지로 컨테이너 만들어 웹서버 돌려보기]

규도자 (gyudoza) 2018. 10. 23. 00:39

Docker로 CentOS 이미지 systemctl 사용하기

개발, 배포, 테스트 환경을 동일하게 만들어주는 편리한 도구 Docker. 일단 이 게시물은 Docker에 대한 기본적인 요소들을 설명하기보다는 내가 삽질했던 것들을 싹 정리해놨다가 다른 사람들은 나처럼 쌩고생하지 말라는 의미에서 남기는 글이다.
 Docker에 대한 정보는 아래의 링크에 굉장히 잘 나와있다.

서비큐라 기술블로그

Docker가 뭔지도 몰랐을 때 처음으로 Docker가 무엇인지, 어떻게 쓰는 건지 알게 된 블로그이다.

Docker를 맨 처음에 접하게 된 건

바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서

이 책이었다. 굉장히 좋은 책이니 초급 PHP개발자라면 누구라도 봤으면 하는 바람이다.


각설은 이정도로 하고, 이야기의 요지는 이렇다. 결국 이 글은 Docker를 어느정도 쓰다가 벽에 막혀버린 사람을 위한 글이라는 것이다. 그것도 특히 Docker로 컨테이너를 만들어 배포하는 데에 있어서 그 컨테이너의 바탕이 되는 OS로 CentOS를 쓰고 싶은데 systemctl이라는 벽에 막혀버린 사람을 위한... 혹은 지금 그 문제에 막혀있는 사람들 말이다.

 

Docker로 ubuntu이미지를 만들어서 서비스를 해보자!

Debian계열에서 가장 널리 쓰이는 ubuntu와 레드햇 계열에서 가장 널리 쓰이는 레드햇... 레드햇은 유료니까 나는 CentOS를 주로 쓴다. 보통 CentOS는 레드햇 배포판을 기반으로 만들어지므로(거의 같다고 한다) 이슈가 생겼을 때에 따로 레드햇의 유지보수 서비스를 받을 수 있다는 장점이 있다.
 나도 맨 처음에 대체 어떤 리눅스를 기반으로 리눅스 지식을 쌓아햐하나 하고 CentOS와 ubuntu 두 개를 두고 고민을 많이 했었는데 알게 모르게 실무에서 CentOS를 많이 사용했고 또 apt-get보다는 yum이 익숙했기 때문에 자연스럽게 CentOS를 주력 OS로 삼게 됐다. 그렇게 나는 Docker에 대한 공부를 시작하면서 CentOS를 계속 써야하나 하는 큰 고민에 빠졌다. Docker와 CentOS는 상성이 좋지 않았기 때문이다...

일단은 제목처럼 Docker로 ubuntu이미지를 만들어 서버를 띄워보자.

일단 내 개발환경은 Windows 10 Pro이다. 하지만 Docker for windows를 사용하지 않고 Docker Toolbox를 사용한다. Docker for windows는 Windows 10 Pro에서만 지원하는 Hyper-V 가상화 기술을 사용하기 때문에 OS적인 제약이 많이 붙는 데다가 Boot2Docker를 사용하는 데에 복잡하고 또 이런저런 조건이 많이 붙는다. 리눅스에서 사용하는 Docker와도 약간 환경이 다른 그런 느낌이다.

 반면에 Docker Toolbox는 OS적인 제약도 없을 뿐더러 굉장히 라이트한 느낌이 든다. Docker Quickstart Terminal을 이용하면 Docker의 기반이 되는 이미지가 실시간으로 만들어지는 커맨드라인도 볼 수 있고 말이다. 좀 더 갑고 라이트한 느낌이다. 맨 처음에는 다양한 UI가 붙어있는 Docker for windows에 끌렸지만 결국에는 다 Docker Toolbox만 깔아도 쓸 수 있는 기능이었다는 걸 알고나서 회귀했다.

 이 글을 장황하게 적는 이유는 되도록이면 이 글을 읽는 사람도 개발환경이 Windows라면 Docker Toolbox를 사용하는 게 이 글을 적용하는 데에 더 쉬울 것이기 때문이다. 아무튼 Docker Toolbox를 걸치하고 옵션에 붙어있는 Kitematic을 같이 설치하자. Kitematic은 이미 만들어져있는 컨테이너나 이미지의 관리를 쉽게 해주는 GUI툴이다.

Docker Quickstart Terminal을 처음 시작했을 때의 화면이다. 일단 간단하게 Docker가 제대로 설치되어있고 돌아가는지 확인해보자.


깔려있는 docker의 버전을 확인하는 명령어인 docker version을 입력한 결과이다.


docker run hello-world라는 명령어를 통해 hello world이미지를 실행한 결과이다. 이것과 같은 출력을 볼 수 있으면 docker의 가상화환경은 정상적으로 설치된 것이라 할 수 있다.


이제는 우분투 이미지를 설치해서 실행해보자.

docker run -it -p 80:80 --name ubuntu_temp ubuntu /bin/bash


위와 같은 결과가 출력되면 성공한 것이다. 명령어를 간단하게 설명하자면 ubuntu이미지를 ubuntu_temp라는 이름으로 실행시키고 local포트의 80번을 실행된 컨테이너의 80번 포트와 연결시킨다는 의미이다. -p옵션의 앞이 Docker에서 나오는 port를 받을 local의 포트, 뒤가 local로 포워딩할 docker의 포트를 의미한다. 만약 -p 8080:80이라고 하면 docker에서 실행되고 있는 container의 80포트를 local의 8080번 포트와 연결한다는 의미이다. 만약 http서비스를 한다고 하면 해당 서버의 8080포트로 요청이 들어왔을 때 docker의 80번 포트로 연결되어 요청에 대한 응답이 local의 8080포트로 반환된다. 만약에 -p옵션을 8080:80으로 주고 위의 명령어를 실행했다면 아래 스크린샷의 docker에서 출력된 IP뒤에 :8080을 붙이면 설정한 포트로 접속할 수 있다.

 뒤의 /bin/bash는 해당 명령어를 실행하는 동시에 컨테이너 내부에서 실행할 명령을 의미한다. 위 명령어에서는 /bin/bash를 입력함으로서 컨테이너를 생성함과 동시에 ubuntu의 bash shell을 사용할수 있는 환경에 돌입할 수 있게 하기 위해 해당 명령어를 입력한 것이다. 그리고 이 명령어는 -i옵션과 -t옵션이 뒤따라야 한다. 아주 간단하게 말하자면 -i옵션은 실행한 컨테이너의 input을 현재의 input(키보드)로 하겠다는 것이고 -t는 터미널을 이용하겠다는 의미이다. (실제 개념은 약간 다르지만 이해하기 쉽게 설명하였다. 좀 더 자세히 알아보고 싶으면 docker관련 글을 더 찾아보는게 좋을 것이다.)


이제 다음 명령어를 실행하여 apache2 웹서버를 설치해보자.

apt-get -y update

ubuntu의 의존성 패키지 관리자인 Advanced Packaging Tool을 일단 최신버전으로 업데이트한다. -y옵션은 설치 도중 관리자의 질의가 필요한 부분에서 자동으로 y를 입력하겠다는 의미이다. 다음은 apache2를 설치해보자.

apt-get -y install apache2

꽤나 많은 패키지들이 설치된다. 설치가 완료됐으면 apache2서버를 실행해보자. 다음 명령어를 실행해보면 된다.

service apache2 start

아마 정상적으로 실행될 것이다. 그렇다면 이 페이지는 어디에서 확인하는가? 첫번째 스크린샷이 기억나는가?


위의 주소로 들어가면 된다. 현재는 포트를 80번과 80번을 이어놨기 때문에 해당 ip만 입력하여도 가상환경이 만들어준 ubuntu, apache2환경을 볼 수 있을 것이다. 만약에 해당 옵션을 -p 80:8080식으로 했다면 docker에서 주어진 ip 뒤에 :8080을 붙이는 방식으로 접속할 수 있다. 접속하면 아래와 같은 화면이 출력될 것이다.


짠. 축하한다. 당신은 당신의 local환경에 ubuntu와 같은 개발환경을 구축했다!


그리고 더 쉬운 방법이 있는데 바로 kitematic어플리케이션을 이용하는 것이다.


좌측에 현재 만들어진 컨테이너 목록이 뜨는데 어떤 사람들은 Docker Quickstart Terminal에서 컨테이너를 만들어 실행했는데도 불구하고 목록에 뜨지 않을 수 있다. 그럴 땐 좌측 Containers 오른쪽의 플러스버튼을 누르고 위에서 만들었었던 hello-world컨테이너를 하나 더 만들어주자. +버튼을 누르면 docker이미지를 찾아서 설치할 수 있는 화면이 나오는데 거기에서 오른쪽 상단에 My Images라는 메뉴가 있다. 이 메뉴를 누르면 현재 local에 깔려있는 docker이미지들을 확인할 수 있는데 아마 이 과정을 겪어왔다면 ubuntu와 hello-world가 있을 것이다.


hello-world라고 써져있는 부분의 create를 만들면 여태 만들어놨는데 갱신되지 않았던 컨테이너들의 목록과 함께 새로운 hello-world 컨테이너가 생성될 것이다. 필요없는 컨테이너들은 컨테이너 이름에 마우스오버하면 나타나는 X표를 눌러 없애도록 하자. 그리고 만들어놨던 ubuntu_temp이미지를 클릭하자.


그러면 다음과 같은 화면이 출력될 것이다. 여기에서는 누가봐도 딱 감이 올 것이다. 오른쪽에 있는 WEB PREVIEW버튼을 눌러보도록 하자.


그러면 주소를 쳐서 들어갔던 것과 같이 해당 컨테이너로 포워딩된 페이지에 접속할 수 있을 것이다. 해당 설정은 우측상단에 보이는 Settings -> Hostname/Ports에서도 설정 가능하니 한번 봐두는 것도 나쁘지 않을 것이다.


보이는 바와 같이 Docker의 80번 포트가 로컬의 80번 포트와 연결돼있는 걸 확인할 수 있다.


 글이... 짧을 줄 알았는데 꽤나 길어서 나누어서 작성해야할 것 같다. 막상 제목은 CentOS에서 systemctl을 다루는 법이지만 결국 ubuntu이미지를 이용해서 웹서버를 올리는 법밖에 정리하지 못했다. 아무튼 CentOS와 관련된 내용은 2부에서 계속된다.

Comments