일반 Ruby 응용 프로그램의 컨테이너 템플릿

5565 단어 makefiletdddockerruby
최근에 나는 파괴 가능한 환경에서 소프트웨어를 시험하고 구축하기 위해 자동화를 모색해 왔다. 이렇게 하면 내가 나의 운영체제 호스트를 어지럽히지 않을 것이다.
이것이 바로 가상화와 컨테이너화가 도움을 줄 수 있는 곳이다. 나는 신속하고 파괴적인 환경에 서서 언제든지 다시 시작할 수 있다고 생각한다.

가상화
In this Gist 나는 multipass이라는 경량급 가상 기기 관리자를 사용하여 호스트에서 Ubuntu 환경을 시작하는 방법을 공유했다.
가상화는 본고의 중점이 아닙니다. 더 많은 세부 사항을 알아보기 위해 요점을 보실 수 있습니다.

컨테이너화
이 글은 새로운 프로그램을 만들 때마다 템플릿을 다시 사용할 수 있도록 Docker와Makefile을 사용하여 간단한 루비 용기화 프로그램을 구축하는 방법을 소개합니다.

MakefileMakefile을 만듭니다. 이것은 우리가 실행하고자 하는 명령의 집중 입구점일 수 있습니다.모든 응용 프로그램에 Makefile이 있는 것은 좋은 실천이다.Makefile
console:
  docker run \
    --rm \
    -it \
    -v $(pwd):/$(basename $(pwd)) \
    -w /$(basename $(pwd)) \
    ruby:2.7 \
    bash
Makefile은 대상으로 구성됩니다.모든 목표는 하나의 특정한 임무를 실행할 수 있고, 이 임무는 하나의 명령이나 그룹의 명령이 될 수 있다.예제에서는 docker run과 해당 옵션을 실행 중입니다.
  • docker run: 이미지
  • 을 기반으로 새 컨테이너 만들기
  • --rm:
  • 출구의 용기를 제거합니다
  • -it: 위조 단말기와
  • 의 상호작용 허용
  • -v $(pwd):/$(basename $(pwd)): 현재 디렉토리를 호스트에서 컨테이너
  • 으로 마운트
  • -w /$(basename $(pwd)): 컨테이너
  • 에 기본 작업 디렉토리 설정
  • ruby:2.7: 용기가 실행될 이미지입니다.Docker가 로컬에서 이미지를 찾으려고 시도합니다. 그렇지 않으면 Docker 레지스트리
  • 에서 이미지를 다운로드합니다.
  • bash: 용기에서 실행되는 명령입니다.bash는 위조 단말기와
  • 의 상호작용을 요청합니다
    다음 명령을 실행하여 대상을 테스트할 수 있습니다.
    make console
    
    그것은 용기에서 bash를 열 것입니다.

    docker compose
    Docker 명령 옵션은 응용 프로그램에 더 많은 복잡성을 증가시켰기 때문에 빠르게 지루해질 수 있습니다.Docker를 개발에서 쉽게 사용할 수 있도록 하기 위해서, 우리는 다시 사용할 수 있는 파일에서 용기 규범을 설명할 수 있습니다.
    Docker는 이 문제를 해결하기 위해 docker-compose을 갖추고 있다.docker-compose.yml
    version: '3.9'
    
    services:
      dev:
        image: ruby:2.7
        container_name: my-application
        working_dir: /my-application
        volumes: 
          - ./:/my-application
    
    이제 Makefile을 docker compose 명령으로 변경할 수 있습니다.Makefile
    console:
      docker-compose run dev bash
    
    체크:
    make console
    
    위의 구성은 볼륨 옵션, 작업 디렉토리, 이미지 등을 사용하여 docker run을 실행하는 것과 같습니다.
    조금만.지루하다.

    테스트 드라이브
    TDD로 프로그램을 안내하기 위해 우리가 만든 첫 번째 파일은 테스트 파일입니다. 간단한 가상 테스트를 실행합니다.이것은 보기에는 매우 멍청해 보이지만, 이 견본에 있어서는 이미 충분하여, 이후에 강화할 수 있다.
    루비에 대해서는 test-unit을 사용하겠습니다.app_test.rb
    require 'test/unit'
    
    class AppTest < Test::Unit::TestCase
      def test_dummy
        assert_equal 1, 1
      end
    end
    
    그러나 test/unit은 이 기준의 루비와 달리 보석을 포함하지 않습니다.Gemfile
    source 'https://rubygems.org'
    
    gem 'test-unit'
    
    이제 make console을 실행하고 컨테이너 내부에서 명령을 실행하여 Gemfile에서gem를 설치할 수 있습니다.
    bundle install
    
    루비는 기본적으로 보석을 /usr/local/bundle 위에 놓는다.

    볼륨 이름 지정make console이 실행될 때마다 새 용기를 만들고 설치한 모든gem를 잃어버리는 것을 잊을 수 없습니다.애플리케이션이 증가함에 따라 bundle install을 실행하는 것이 번거로울 수 있습니다.
    "이름된 볼륨을 사용하여 호스트를""캐시""로 사용합니다."docker-compose.yml
    version: '3.9'
    
    services:
      dev:
        image: ruby:2.7
        container_name: my-application
        working_dir: /my-application
        volumes: 
          - ./:/my-application
          - rubygems:/usr/local/bundle
    
    volumes:
      rubygems:
    
    이 방식을 통해 Docker는 호스트에서 이 명칭 볼륨을 사용하고 실행 용기에서 /usr/local/bundle에 놓인gem를 가져옵니다.

    실행 테스트
    지금까지 테스트를 실행할 수 있었습니다.
    make console
    bundle
    ruby app_test.rb
    

    테스트 명령 개선
    컨테이너를 만들 때마다 콘솔에 들어가지 않고 테스트를 직접 실행할 수 있습니다.
    docker-compose run dev ruby app_test.rb
    
    우선, Dell의 워크플로우 개선은 다음과 같이 쉽습니다.Makefile
    console:                                    
      docker-compose run dev bash               
    
    utest:                                      
      docker-compose run dev ruby app_test.rb
    
    콘솔에 들어가서 stuff를 실행하려면:
    make console
    
    테스트를 실행하려면 다음과 같이 하십시오.
    make utest
    

    결론
    본고의 목적은 컨테이너화된 Ruby 응용 프로그램에 템플릿을 만드는 방법을 공유함으로써 우리가 파괴할 수 있는 환경에서 실험과 게임을 할 수 있고 운영체제 호스트가 닿을 수 없도록 유지하는 것이다.

    좋은 웹페이지 즐겨찾기