docker logo

 

이 글은 초보를 위한 도커 안내서 - 설치부터 배포까지 시리즈의 마지막 글입니다. 지난 글에서 도커를 설치하고 컨테이너를 실행해 보았으니 이번엔 이미지를 만들고 서버에 배포해보도록 하겠습니다.



도커 이미지 만들기

도커는 이미지를 만들기 위해 컨테이너의 상태를 그대로 이미지로 저장하는 단순하고 무식(?)한 방법을 사용합니다.

 

create docker image
create docker image

 

예를 들어, 어떤 애플리케이션을 이미지로 만든다면 리눅스만 설치된 컨테이너에 애플리케이션을 설치하고 그 상태를 그대로 이미지로 저장합니다. 가상머신의 스냅샷과 비스므리한 방식입니다.

이런 과정은 콘솔에서 명령어를 직접 입력하는 것과 별 차이가 없으므로 쉘 스크립트를 잘 알아야 하지만 좋은 샘플이 많이 공개되어 있어 잘 몰라도 크게 걱정하지 않아도 됩니다. 복붙만세! 또한 컨테이너의 가벼운 특성과 레이어 개념을 이용하여 생성과 테스트를 빠르게 수행할 수 있습니다.

이제 Ruby로 만들어진 간단한 웹 애플리케이션을 도커라이징Dockerizing(=도커 이미지를 만듦)해보겠습니다.

Sinatra 웹 애플리케이션 샘플

 

Sinatra
Sinatra

 

일단 웹 애플리케이션 소스코드를 작성해야겠죠. Sinatra라는 가벼운 웹 프레임워크를 사용하기 위해 새로운 폴더를 만들고 Gemfile과 app.rb를 만듭니다.

Gemfile

 
1
2
source 'https://rubygems.org'
gem 'sinatra'

app.rb

 
1
2
3
4
5
6
require 'sinatra'
require 'socket'

get '/' do
  Socket.gethostname
end

ruby와 sinatra에 대해 전혀 모르더라도 Gemfile은 패키지를 관리하고 app.rb는 호스트명을 출력하는 웹 서버를 만들었다는 걸 예상할 수 있습니다.

이제 패키지를 설치하고 서버를 실행해보겠습니다.

 
1
2
bundle install            # install package
bundle exec ruby app.rb   # Run sinatra
                                                                                ~/Workspace/project/github.com/subicura/sinatra                                  bundle install                                                                Using rack 1.6.4                                                                Using tilt 2.0.6                                                                Using bundler 1.14.3                                                            Using rack-protection 1.5.3                                                     Using sinatra 1.4.7                                                             Bundle complete! 1 Gemfile dependency, 5 gems now installed.                    Use `bundle show [gemname]` to see where a bundled gem is installed.                                                                                            ~/Workspace/project/github.com/subicura/sinatra                                  bundle exec ruby app.rb                                                       [2017-02-08 02:43:13] INFO  WEBrick 1.3.1                                       [2017-02-08 02:43:13] INFO  ruby 2.3.0 (2015-12-25) [x86_64-darwin15]           == Sinatra (v1.4.7) has taken the stage on 4567 for development with backup from WEBrick                                                                        [2017-02-08 02:43:13] INFO  WEBrick::HTTPServer#start: pid=1593 port=4567                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
00:00