Docker+Itamae로 레시피 고속화 시행 오류 #itame#docker

10466 단어 Dockeritamae

Docker+Itamae로 레시피 고속화 시행 오류 #itame#docker


개요


Docker+ Itamae를 통해 조리법을 가속화하려는 시도 오류

의 목적

  • Itamae의 레시피 제작 시간 단축
  • 특별히 노력하지 않으면 메뉴의 공급을 재시도하는 데 시간이 많이 걸린다
  • 예를 들어 Ubuntu 환경에 rbenv+ruby(2.1.3)+rails(4.1.8) 환경을 설치하는 데 15분이 걸린다
    아무것도 머리를 쓰지 않으면 다시 시도하는 데 +15분
  • 걸린다
  • 평소의 프로그램 설계와 마찬가지로 어떤 일도 단번에 성공하는 경우는 드물다.시험 오류 발생
  • ※ Itamae에 국한되지 않으므로 모든 사전 설정 도구에 사용 가능

    전제 조건

  • Vagrant로 구축된 코어OS 환경에서 Docker로 제작된 Ubuntu 14.04의 용기를 제작하고 이를 활용1
  • Docker의 기본 운영에 대한 지식 필요2
  • 임무테이블의 레시피
  • 시험해 보다


    필요조건

  • OS: Ubuntu 14.04
  • rbenv + ruby 2.1.3
  • rails 4.1.8
  • WebServer: WEBric
  • DB: sqlite
  • Todo 응용 프로그램에 scaffold를 사용하여 rails를 시작합니다
  • 절차.


  • 다음 글의 순서에 따라 Ubuntu의 컨테이너를 시작합니다

  • Vagrant에서 Windows의 VirtualBox에서 CoreOS 실례를 만들고 Ubuntu 14.04LTE 용기를 만들고 SSH를 통해 연결할 수 있도록 합니다
  • docker run 시-p 80:3000의 옵션도 추가 실행(WEBric의 포트 피드백)
  • 이미지 확인
  • $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    ubuntu              trusty              04c5d3b7b065        8 days ago          192.7 MB
    
  • 제작된 Ubuntu 14.04 용기 확인
  • $ docker ps
    CONTAINER ID        IMAGE                  COMMAND               CREATED             STATUS              PORTS                                        NAMES
    0e50ba901b58        sample/ubuntu:trusty   "/usr/sbin/sshd -D"   4 seconds ago       Up 3 seconds        0.0.0.0:80->3000/tcp, 0.0.0.0:2222->22/tcp   berserk_ardinghelli
    
  • 이쪽의 Itamae recipe를 이용하여 Ruby 2.1.3+Rails 4.1.8 환경 구축

  • Itamae | Itamae를 사용하여 Ubuntu 14.04LTE 환경에 Ruby 2.1.3, Rails 4.1.8 설치
  • sudo docker run -d -p 2222:22 -p 80:3000 sample/ubuntu:trusty /usr/sbin/sshd -D
    
  • Rails 환경 구축에 성공한 후 Docker의commiit를 실행하여 그림을 만듭니다
  • $ docker commit <container name | id> rails_sample
    
    $ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
    rails_sample        latest              777715acc917        26 seconds ago      546.9 MB
    sample/ubuntu       trusty              544a982d72bf        51 minutes ago      255.3 MB
    ubuntu              trusty              04c5d3b7b065        8 days ago          192.7 MB
    
  • 용기를 정지하거나 삭제하고commiit의 새 이미지로 용기를 다시 제작
  • $ docker stop <container name | id>
    $ docker rm <container name | id>
    $ sudo docker run -d -p 2222:22 -p 80:3000 rails_sample /usr/sbin/sshd -D
    $ docker ps
    CONTAINER ID        IMAGE                 COMMAND               CREATED             STATUS              PORTS                                        NAMES
    3d013b1fe510        rails_sample:latest   "/usr/sbin/sshd -D"   4 seconds ago       Up 3 seconds        0.0.0.0:80->3000/tcp, 0.0.0.0:2222->22/tcp   elegant_colden
    
  • rails 환경 구축용 식단에 Todo 응용 프로그램 scaffold를 추가하여 Rails를 시작할 때까지 기술
  • 변경 전 식단
    execute 'apt-get update' do
      command 'apt-get update -y'
    end
    
    package "build-essential" do
      action :install
    end
    
    include_recipe 'rtn_rbenv::user'
    
    변경된 식단
    recipe.rb
    execute 'apt-get update' do
      command 'apt-get update -y'
    end
    
    package "build-essential" do
      action :install
    end
    
    include_recipe 'rtn_rbenv::user'
    # rails setup の include を追加
    include_recipe './rails_setup.rb'
    
    rails_setup.rb
    package "libsqlite3-dev" do
      action :install
    end
    
    execute "setup rails" do
      cwd "/home/core"
      user "core"
      command <<-EOS
    . /home/core/.bash_profile
    rbenv rehash
    rails new todo --skip-bundle
    cd todo
    cat << EOT >> Gemfile
    gem 'execjs'
    gem 'therubyracer'
    EOT
    bundle install
    rails generate scaffold Tudu name:string estimate:integer results:integer complete:boolean
    bundle exec rake db:migrate
    bundle exec rails server -d
      EOS
    end
    
    ※ 모델명 todo는 rails에 예약되어 있으므로 tudu
  • itamae 실행
  • $ bundle exec itamae ssh -p 2222 -j node.json -i /path/to/your/key/key_name -h 172.17.8.101 -u core rails_setup.rb
    
  • 부팅 확인

  • 두 개의 데이터를 등록해 보았다

    수행 시간 비교(+=>)(+=>)


    + =>

  • 중간에 Docker 그림을 만들지 않고 타미의 모든 레시피를 다시 실행할 때
  • (15 分 × 2) + 2 分 = 32 分
    

    + =>

  • 중간에 Docker의 이미지를 만들 때(이번에 소개한 단계)
  • 15 分 + 2 分 + N 分 = 17 + N 分
    
    N분은 새 이미지를 만드는 데 필요한 시간입니다.
    이번 예는 docker commiit의 실행이 10초 정도 지나면 끝난다.
    기타 작업은 1분 정도 소요됩니다.
    왜냐하면 딱 한 번 하는 시험은 여기까지가 달라요.
    시도 횟수가 많으면 더 차이가 나겠죠.
    평소의 프로그래밍과 마찬가지로 단번에 레시피를 성공적으로 만드는 사람은 드물다
    여러분 어떠셨나요?
    효율적으로 레시피를 만드는 테크닉을 보기 드물기 때문에 이번에 기사를 냈다.
    나는 기본적으로 (현실 세계에서) 누구와도 정보를 교환하지 않았기 때문에 정보 약자의 가능성이 매우 높다
    이번에 소개한 방법보다 더 좋은 방법이 있을지도 몰라요.
    만약 이 보도를 돌파할 기회가 있다면, 더욱 좋은 방법을 끌어낼 수 있을 것이다
    그래도 될까요?

    작업흐름

  • 증분에서 식단을 만드는 최소 단계3
  • dry-run
  • 성공
  • 다음 단계 진입
  • 실패
  • 식단 수정
  • 공급 실행
  • 성공
  • 용기를 이미지로 만들기
  • 새 이미지로 새 컨테이너 만들기
  • 실패
  • 식단 수정
  • 공급이 실패하면 이미지에서 컨테이너를 다시 만들고 다시 시도
  • 새 용기에서 작업 재개
  • 모든 레시피가 완성될 때까지 1-2 반복
  • 전체 레시피를 통해
  • 식단이 완성되면 작업용 이미지, 용기를 버려라
  • 보태다

  • Vagrant+sahara 등도 스냅숏을 이용하여 작업용 중간 이미지를 만들 수 있지만 도커처럼 빠르지 않다.
    vagrant+sahara만 사용하고 Docker를 사용하지 않은 분들은 꼭 시도해 보세요.

  • 메뉴를 시도할 때 매번 실행 시간이 길면 단순히 시간을 소비하는 것 이외에 다음과 같은 폐단이 있다

  • 사고 중단

  • 졸려
  • 매번 시행 착오를 반복할 때마다 작업의 성능이 떨어진다.

    농담


  • Docker의 글에서 로켓(의 아이콘을 이용한 블랙 유머4
  • 외부 자료


  • itamae | GitHub

  • Docker
  • 각주


    Vagrant에서 Windows의 VirtualBox에서 CoreOS 실례를 만들고 Ubuntu 14.04LTE 용기를 만들고 SSH를 통해 연결할 수 있도록 합니다  
    Docker | 기본 작업 명령 정보  
    recipe의 모든 Resource Block이 좋아요? 
    CoreOS is building a container runtime, Rocket  

    좋은 웹페이지 즐겨찾기