〜前編〜からの続き
前提
- 便宜上、既存のワーキングコピーがあります
Docker手順
1. Dockerfileを作成する
Dockerfile
FROM ruby:2.6.5
# Setting environment
ENV LANG C.UTF-8
ENV TZ Asia/Tokyo
ENV APP_HOME /var/www/capistrano_sample_app_v1
# Install libraries
RUN apt-get update -qq && \
apt-get install -y build-essential \
libpq-dev \
nodejs \
vim \
default-mysql-client
RUN gem install bundler -v '2.1.4'
# Create app home
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
# Copy Gemfile from origin
ADD Gemfile $APP_HOME/Gemfile
RUN bundle _2.1.4_ install --path vendor/bundle
ADD . $APP_HOME
E: Package 'mysql-client' has no installation candidateとなった場合
- mysql-clientは消滅しており、代わりに
default-mysql-client
を使うか、mariadb-client
となります
Dockerfileのコマンド
コマンド | 説明 |
---|---|
FROM | 使用するイメージとバージョン |
RUN | コマンドの実行。railsに必要な必要なnodejsとpostgeqsqlをインストールしている |
WORKDIR | そのままの意味。作業ディレクトリを設定します。 |
ADD | ローカルのファイルをコンテナへコピーする(昔のCOPYコマンドになります) |
ENTRYPOINT | 一番最初に実行するコマンド(ここではentrypoint.shを参照) |
EXPOSE | コンテナがリッスンするport番号 |
CMD | イメージ内部のソフトウェア実行(つまりRailsのことですね) |
2. docker-composeを作成する
docker-compose.yml
version: '3'
services:
api:
tty: true
stdin_open: true
build: .
ports:
- "8080:8080"
command: /bin/sh -c "rm -f /capistrano_sample_app_v1/tmp/pids/server.pid && bundle exec rails s -p 8080 -b '0.0.0.0'"
volumes:
# ホストのカレントディレクトリをコンテナの/capistrano_sample_app_v1にマウント
- .:/capistrano_sample_app_v1
3. docker build
Terminal
$ docker-compose up --build
...省略...
Successfully built b72c436f105e
Successfully tagged capistrano_sample_app_v1_api:latest
Creating capistrano_sample_app_v1_api_1 ... done
Attaching to capistrano_sample_app_v1_api_1
api_1 | from /var/www/capistrano_sample_app_v1/vendor/bundle/ruby/2.6.0/gems/bootsnap-1.4.5/lib/bootsnap.rb:22:in `setup': The 'disable_trace' method is not allowed with this Ruby version. current: 2.6.5, allowed version: < 2.5.0
api_1 | => Booting Puma
api_1 | => Rails 5.2.4.1 application starting in development
api_1 | => Run `rails server -h` for more startup options
api_1 | Puma starting in single mode...
api_1 | * Version 3.12.2 (ruby 2.6.5-p114), codename: Llamas in Pajamas
api_1 | * Min threads: 5, max threads: 5
api_1 | * Environment: development
api_1 | * Listening on tcp://0.0.0.0:8000
api_1 | Use Ctrl-C to stop
4. プロセスの確認
Terminal
$ docker-compose ps
Name Command State Ports
------------------------------------------------------------------------------------------------
capistrano_sample_app_v1_api_1 /bin/sh -c rm -f /capistra ... Up 0.0.0.0:8000->8000/tcp
5. 停止
Terminal
$ docker-compose down
Stopping capistrano_sample_app_v1_api_1 ... done
Removing capistrano_sample_app_v1_api_1 ... done
Removing network capistrano_sample_app_v1_default
これで、ワーキングコピーをコンテナとして起動することができました