일반 Ruby 응용 프로그램의 컨테이너 템플릿
이것이 바로 가상화와 컨테이너화가 도움을 줄 수 있는 곳이다. 나는 신속하고 파괴적인 환경에 서서 언제든지 다시 시작할 수 있다고 생각한다.
가상화
In this Gist 나는 multipass이라는 경량급 가상 기기 관리자를 사용하여 호스트에서 Ubuntu 환경을 시작하는 방법을 공유했다.
가상화는 본고의 중점이 아닙니다. 더 많은 세부 사항을 알아보기 위해 요점을 보실 수 있습니다.
컨테이너화
이 글은 새로운 프로그램을 만들 때마다 템플릿을 다시 사용할 수 있도록 Docker와Makefile을 사용하여 간단한 루비 용기화 프로그램을 구축하는 방법을 소개합니다.
Makefile
Makefile
을 만듭니다. 이것은 우리가 실행하고자 하는 명령의 집중 입구점일 수 있습니다.모든 응용 프로그램에 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 응용 프로그램에 템플릿을 만드는 방법을 공유함으로써 우리가 파괴할 수 있는 환경에서 실험과 게임을 할 수 있고 운영체제 호스트가 닿을 수 없도록 유지하는 것이다.
Reference
이 문제에 관하여(일반 Ruby 응용 프로그램의 컨테이너 템플릿), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/leandronsp/boilerplate-for-a-containerized-plain-ruby-application-3094텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)