지난 호에서는 Ruby on Rails 애플리케이션을 컨테이너화하는 방법을 설명했습니다. 이번 호에서는 컨테이너에서 일상적인 작업을 수행하는 방법을 살펴보겠습니다.
Rake 작업 및 Rails 명령 실행
Rake 작업을 실행하는 것은 쉽습니다. 이미지를 빌드한 후 docker-compose를 사용하여 이미지에서 명령을 실행할 수 있습니다. 예를 들어 애플리케이션의 경로를 보려면 다음을 수행하세요.
<code class="language-bash">$ docker-compose run web rails routes</code>
마찬가지로 데이터베이스를 생성하려면 데이터를 마이그레이션하고 채우세요.
<code class="language-bash">$ docker-compose run web rails db:create db:migrate db:seed</code>
테스트 도구 모음을 실행하려면 테스트 데이터베이스를 만들어야 합니다.
<code class="language-bash">$ docker-compose run web rails db:create db:migrate RAILS_ENV=test</code>
그런 다음 테스트 모음을 실행합니다(rake가 기본적으로 rake 테스트를 실행한다고 가정).
<code class="language-bash">$ docker-compose run web rake</code>
팁: 사용자 정의 스크립트/별칭 만들기
나는 docker-compose run web rails ...
을 하루에 수백 번 실행하고 작업을 더 쉽게 하기 위해 이 스크립트를 $PATH
:
<code class="language-bash">#!/bin/bash docker-compose run web rails "$@"</code>
이 스크립트는 docker-compose.yml
파일에 웹 서비스가 있다고 가정합니다. 그렇지 않으면 작동하지 않습니다.
기타 작업 수행
지금까지의 모든 명령은 매우 간단하고 간단하므로 웹 서비스에서 실행하기만 하면 됩니다. 그렇다면 기존 데이터베이스를 컨테이너의 데이터베이스에 로드하는 등 좀 더 어려운 작업은 어떻게 합니까? 이것은 제가 알아내는 데 조금 더 시간이 걸린 작업 중 하나였습니다.
PostgreSQL에서는 덤프 파일 형식에 따라 두 가지 방법으로 이를 수행할 수 있습니다. 예전에는 --format=c
덤프와 일반 덤프를 처리해야 했습니다.
c 형식의 PostgreSQL 덤프가 포함된 latest.dump
파일이 있고 이를 (실행 중인) 컨테이너에 로드하려는 경우 먼저 컨테이너 ID를 찾아야 합니다. 다음 명령을 실행하면 됩니다:
<code class="language-bash">$ docker container ls</code>
또는
<code class="language-bash">$ docker ps</code>
컨테이너 ID가 있으면(이 예에서는 80f8041db4b4
을 사용함) 다음 명령을 실행하여 컨테이너의 덤프를 복원할 수 있습니다.
<code class="language-bash">$ docker exec -i 80f8041db4b4 pg_restore -d app_development -U postgres</code>
정기 덤프(예: latest.sql
)가 있는 경우 다음을 사용하여 복원할 수 있습니다.
<code class="language-bash">$ docker exec -i 80f8041db4b4 psql -d app_development -U postgres</code>
docker-compose를 사용하면 작업이 더 쉬워집니다.
<code class="language-bash">$ docker-compose exec -T db pg_restore -d app_development -U postgres</code>
모든 것이 컨테이너화되어 있습니다!
저는 Elastic Beanstalk를 많이 사용합니다. 저는 주로 Homebrew를 사용하여 설치하지만, Python, SQLite 등과 같은 자체 종속성도 많이 설치합니다. 나는 내 시스템에 이 모든 것을 원하지 않습니다. 특히 Python 버전에 항상 문제가 있기 때문입니다. 대신 컨테이너화합니다. docker-awsebcli
.
다음호도 기대해주세요!
위 내용은 개발 중인 Docker: 에피소드 3의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!