Preference

クルマ、バイク、コーディング、日々の雑感について

Dockerってなにがうれしん?#0

こんにちは!
またまたお久しぶりです笑

仕事ではc++でロボット制御を担当していますが、学習のため、
iOSアプリ、Webアプリを勉強し始めました。
特にARKitを使ったARアプリに興味があって、ロボットにも活かせたらなぁと思っています。
またWebアプリはRuby, Ruby on Railsに軽く触れてみました。
他の言語に触れることで、普段のコーディングにも幅を持たせることができたらいいなと!!

さてさて、今日はDockerのついてかるく書こうかなと思います。
下のサイトで勉強しました!
www.ogis-ri.co.jp

Dockerとは?

実行環境、開発環境を簡単に構築できる便利なやつ!(笑)

いいところ:

  • アプリの実行環境をラップしてくれる!ホストが汚れない!
  • 実行環境をファイル(Dockerfile)で共有できる!すごい人の便利な環境が使える笑
  • 仮想環境と比べて早い

イメージ

  • オブジェクト指向でのクラス
  • イメージはDockerfileからビルドされる。Dockerfileに言語だったりライブラリ群を記述して、仮想的な環境を構築する
  • Docker Registryを使ってイメージそのものを共有することもできる

すでにDockerHubなので自分が欲しいと思うような実行環境はすでに配布されています。
だからそこから持ってくれば、簡単に環境構築ができます。
ただ、ここでは仕組みを理解するために、Dockerfileからの構築を見てみたいと思います。

コンテナ

  • オブジェクト指向でのインスタンス
  • イメージから生成される実際の動作環境
  • 起動時のコマンド(EntryPoint)が終わると自動終了
  • 実行時のコマンドでいろんな設定ができる(環境変数、コンテナ間のネットワークの設定、開放するポート)

Dockerfile

  • イメージを作るファイル
  • 構築したい環境で使用する言語とかライブラリ、ミドルウェアのインストールを書いてビルド
  • すでに巷に溢れてるので、書かなくてもOK
FROM ruby:2.5 #
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]


これはruby on railsを勉強するために使ったDockerfileです。
rubyを使いますよ、gemはこんなですよ、とか記述してあります。

  • FROM : Dockerイメージの名前 URLでも可
  • RUN : ライブラリのインストール
  • WORKDIR : デフォルトのディレクトリ(カレントディレクトリ)
  • ENTRYPOINT :コンテナ起動時に実行されるコマンドを指定する