Dockerfile

Dockerfile(ドッカーファイル)とは、Dockerイメージの設計図のことをいいます。 Dockerイメージを新規に作成するための手順を記したテキストファイルで、プログラムを動作させるサーバーやミドルウェア、コマンドなどの情報を記載します。

骨格としては

  1. アプリケーションコードを用意
  2. Dockerfileを用意
  3. イメージの作成
  4. イメージからコンテナを作成し、起動させる
  5. コンテナの停止/削除
  6. イメージの削除
  7. エラーが起きたら...
  8. 後片付け

となる。

■アプリケーションコードを用意

RubyでWebサーバを用意して、TOPページにアクセスしたらHelloと出力するやつを作る。

作業ディレクトリ
├ Dockerfile
└ main.rb

まずはmain.rb。

Rubyで簡易的なサーバー作成。WEBrickを使用。

require 'webrick'
server = WEBrick::HTTPServer.new({
    :DocumentRoot => './',
    :BindAddress => '0.0.0.0',
    :Port => 8000
})
server.mount_proc('/') do |req, res|
    res.body= 'hello'
end
server.start

注意点として、あくまで簡易サーバーなので、BindAddressも書いてある通りで良い。下手に127.0.0.1とかにするとエラーになった。

あと、Dockerfileを後で作るが、一応この段階でコマンドで

ruby main.rb

として動作を確かめた方が良い。

そして、Dockerfileでrubyのバージョン指定を記述するが、この段階でDockerで使用するrubyのバージョンをHomebrewでチェンジして問題なく動くか確認した方が良い。

■Dockerfileを用意

Dockerfile = イメージの雛形

主に以下の内容を書いていく。

FROM ruby:2.7

RUN mkdir /var/www
COPY main.rb /var/www

CMD ["ruby", "/var/www/main.rb"]
  • FROMは rubyのバージョンは2.7と指定
  • RUNは コマンドの実行、実際にRUNの右側に書いてあるのは読んで字の如くですね
  • COPYmain.rb/var/wwwに置くよ、という内容
  • CMDは Dockerイメージを作成・起動した時の実行するコマンドの指定
    • 今回は、実態ファイルmain.rbを実行せよという意味です

■イメージの作成

基本的なコマンドはdocker image buildです。

docker image build -t sample/webrick:latest .

オプションの -t は今回、sample/webrick:latestという名前をつけますという意味。

イメージが生成されているか確認。

docker image ls

※コマンド何だったか?という時に

docker --help

※docker imageのパラメータを詳しく知りたい時

docker image --help

■イメージからコンテナを作成し、起動させる

基本的なコマンドはdocker container runです。

docker container run -p 8000:8000 --name webrick sample/webrick:latest

#バックグラウンドで動かす場合
docker container run -d -p 8000:8000 --name webrick sample/webrick:latest
  • pはportの指定です。
  • p 8000:8000はローカルの8000番ポートを、dockerの8000番ポートに接続させています。

右側のdockerのポートはmain.rbでサーバの設定でport: 8000を指定したので右側は8000を指定する必要があります。

  • -name xxxコンテナに名前をつけています。コンテナに名前をつけると、後々、操作する時に楽なので名前をつけています。

オプションに-itをつけると、ざっくりいうと、bashコマンドのインタラクティブな機能を引き出せる、ということらしい。

参考URL:docker exec -it の -it の意味

■コンテナの停止・削除

基本的には、イメージより先にコンテナを削除した方が良い。

いずれにせよ、ひとしきり作業が終わったら、削除するくらいでいい。

# 起動中のコンテナを確認
docker container ls

# 全てののコンテナを確認
docker container ls -a

# コンテナを停止
ctrl + c
または
docker container stop webrick

削除は以下です。

docker container rm webrick

またはDocker DesctopのGUIで、停止も削除もできます。