投稿する背景
未経験から自社開発企業さんへの転職を目指して少しでも技術力向上できるように、Dockerについてアウトプットしていきたい。
このページについて
主にはDocekrfile、docker-compose.ymlの中身についてです。
色んなページを読んで掴んだイメージを記載していくので、間違いがあれば訂正して頂けると幸いです。
参考URL(本当にありがとうございました)
https://qiita.com/nsy_13/items/9fbc929f173984c30b5d
https://qiita.com/soushiy/items/0945bcbc7ecce4822985
https://qiita.com/miyasakura_/items/87ccb6d4a52d4a00a999
Dockerとは??
・コンテナ型の仮想環境とのこと
・とりあえず軽量で高速動かせるから便利
・簡単に環境構築ができちゃう(最初めっちゃ苦労したっちゅうに。。。)
他の仮想環境と何が違うのか。
・VirtualBoxを使って仮想環境を作る時は、ホストOS(Macなど)の上でハイパーバイザーというもの利用してゲストOS(LINUXなど)を動かしているから、遅くなる。
・チーム開発をしている時に他のメンバーと環境を合わせるのが大変。
Dockerを使うにあたっての大まかな流れ
1:Dockerをインストール(私の場合はDocker for Mac)
2:Dockerfile作成
3:Dockerfileをもとにイメージを作成←build
4:作成したイメージをもとにコンテナをつくる←run
5:開発できるようになる
環境構築のための準備
・Dockerfile
・docker-compose.yml
上記のファイル2つが設計図のようなもので、ここから環境が構築される!!!
Dockerfileの中身
FROM ruby:2.6
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list \
&& apt-get update -qq \
&& apt-get install -y nodejs yarn \
&& mkdir /アプリ名
WORKDIR /アプリ名
COPY Gemfile /FANTRA/Gemfile
COPY Gemfile.lock /FANTRA/Gemfile.lock
RUN bundle install
COPY . /アプリ名
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["rails", "server", "-b", "0.0.0.0"]
1行の操作を{命令}と{引数}を表している。{命令}で大文字と小文字を識別しないけど、分かりやすいように大文字で書くのが基本!!!!
◆各コマンドの意味は以下の通り。
命令 | 用途 |
---|---|
FROM | 元となるDockerイメージの指定 |
MAINTAINER | 作成者の情報 |
RUN | コマンドの実行 |
ADD | ファイル/ディレクトリの追加 |
CMD | コンテナーの実行コマンド 1 |
ENTRYPOINT | コンテナーの実行コマンド 2 |
WORKDIR | 作業ディレクトリの指定 |
ENV | 環境変数の指定 |
USER | 実行ユーザーの指定 |
EXPOSE | ポートのエクスポート |
VOLUME | ボリュームのマウント |
docker-compose.ymlの中身
version: '3'
services:
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
ports:
- '3306:3306'
command: --default-authentication-plugin=mysql_native_password
volumes:
- mysql-data:/var/lib/mysql
web:
build: .
command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/アプリ名
+ - bundle:/usr/local/bundle
ports:
- "3000:3000"
depends_on:
- db
stdin_open: true
tty: true
command: bundle exec rails server -b 0.0.0.0
volumes:
mysql-data:
driver: local
+ bundle:
+ driver: local
参考ページと違うのが「+」の部分。これを書き足すことで、bundle installの後にbuildをわざわざする必要がなくなって、作業スピードを早められる。(volumeの永続化って呼ぶらしい)
build(イメージを作成する)
railsアプリを作成するためにGem、Gemfile.lock、entrypoint.shを設定したらイメージをビルドする。
$ docker-compose build
buildを行うと、Dockerfileに書かれたCOPYやRUNなどのコマンドが実行され、イメージが作成される。runすると、ENTRYPOINTに書かれたコマンドがコンテナ上で実行される。
・イメージとは?
コンテナの素で、イメージからコンテナが起動される。
基となるDocekrfileをビルドして作成する。
おわりに
railsの環境構築をするためには他のファイルについても書く必要があるけど、とりあえずdocker-compose.yml・Dockerfileについてだけ。
もっといい書き方が合ったり、プログラミング初心者でもDockerの理解が深めることができるページがあればぜひ教えて頂きたいです。
色んなページをみてると勉強不足が露呈して焦るのでもっと勉強します!!!
賢くなったらどんどん編集していくのでよろしくお願い致します。