Dockerがわからないので雑に試す 2
自分用雑メモ
前回
docker run hello-world
Hello from Docker! が出力されていれば成功。
この命令で何が起きているのか?
イメージからコンテナを作成し、コンテナを起動している。
日本語でOk?
コンテナ、実行環境の箱を作っている。
今回は「hello-world」というコンテナをイメージから作成し、実行している。
わかるようなわからないような。
Dockerクライアントがリクエストを送信:
docker run hello-world コマンドを入力すると、DockerクライアントがDockerデーモンに対して「hello-world」イメージを実行するリクエストを送ります。
イメージの取得:
Dockerデーモンは「hello-world」イメージをローカルで探し、なければDocker Hubからダウンロードします。
コンテナの作成と実行:
Dockerデーモンは「hello-world」イメージを使って新しいコンテナを作成し、そのコンテナを実行します。
メッセージの表示:
コンテナ内のアプリケーションが実行され、結果として「Hello from Docker!」というメッセージが表示されます。
イメージにはOSも含まれているが、フル機能のOSではなく最小限の要素となっている。
docker run hello-world
ターミナルで docker run hello-world を実行する
dockerデーモンに docker run hello-world のリクエストが送信される
dockerデーモンは hello-world のイメージを探す
ローカルで探す
ローカルになければ Docker Hubからダウンロードする
Dockerデーモンは「hello-world」イメージを使って、新しいコンテナを作成し、それを実行する
「hello-world」の実行結果として、Hello from Docker! が出力される
クラスみたいな感じ????
アプリ作成と実行
こういう流れらしい
アプリコードの用意
Dockerfileの用意
↓
作成イメージ
↓
作成・起動コンテナ
シンプルなPythonアプリケーションの例
1. アプリコードの用意
まず、シンプルなPythonアプリケーションを作成します。
app.py ファイルを作成
# app.py
print("Hello, Docker!")
2. Dockerfileの用意・作成
次に、Dockerfileを作成します。
Dockerfileは、Dockerイメージをビルドするための指示書です。
Dockerfile ファイルを作成
# ベースイメージとして公式のPythonイメージを使用
FROM python:3.9-slim
# 作業ディレクトリを作成
WORKDIR /app
# ローカルのファイルをコンテナの作業ディレクトリにコピー
COPY app.py app.py
# アプリケーションを実行する
CMD ["python", "app.py"]
3. イメージの作成
Dockerfileを元にDockerイメージをビルドします。
docker build -t my-python-app .
このコマンドは、カレントディレクトリの内容に基づいて my-python-app という名前のDockerイメージを作成します。
4. コンテナの起動
ビルドしたイメージを元にコンテナを作成し、実行します。
docker run my-python-app
5. 実行結果の確認
コンテナが正常に実行されると、以下のようなメッセージが表示されます。
Hello, Docker!
フルフローのまとめ
以下は、上記のステップを一連の流れとしてまとめたものです。
1.プロジェクトディレクトリの作成
mkdir my-python-app
cd my-python-app
2.アプリケーションコードの作成
echo 'print("Hello, Docker!")' > app.py
3.Dockerfileの作成
echo 'FROM python:3.9-slim
WORKDIR /app
COPY app.py app.py
CMD ["python", "app.py"]' > Dockerfile
4.Dockerイメージのビルド
docker build -t my-python-app .
docker:Dockerクライアントコマンドを実行するための基本コマンド。
build:Dockerイメージをビルドするためのサブコマンド。
-t my-python-app:ビルドされたイメージにタグを付けるためのオプション。ここでは my-python-app という名前のタグを付けています。
.:Dockerfileが存在するディレクトリのパス。ここではカレントディレクトリを指定しています。
5.Dockerコンテナの実行
docker run my-python-app
この流れに従って実行すると、Dockerを使用してシンプルなPythonアプリケーションを作成し、実行することができます。
Rubyの例
1. アプリコード、アプリケーションファイルの用意
Documents配下にdockerディレクトリを作って、作業していく。
pwdとかmkdirでこの辺は適当に。
code . でVS Codeを起動
Rubyの標準ライブラリであるWEBrickを使用して、シンプルなHTTPサーバーを作成する。
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
2. Dockerfileの用意・作成
以下を記述する。
FROM ruby:2.7
RUN mkdir /var/www
COPY main.rb /var/www
CMD ["ruby", "/var/www/main.rb"]
FROM ruby:2.7:
ベースイメージとして公式のRuby 2.7イメージを使用します。これにより、Ruby 2.7のランタイム環境が提供されます。RUN mkdir /var/www:
コンテナ内に /var/www ディレクトリを作成します。RUN コマンドは、イメージのビルド時に実行されるシェルコマンドです。COPY main.rb /var/www:
ローカルマシンにある main.rb ファイルを、コンテナ内の /var/www ディレクトリにコピーします。COPY コマンドは、ビルドコンテキスト(通常はDockerfileが存在するディレクトリ)からファイルをコンテナ内にコピーします。
CMD ["ruby", "/var/www/main.rb"]:
コンテナが起動したときに実行されるデフォルトのコマンドを指定します。この場合、Rubyインタプリタを使用して /var/www/main.rb を実行します。CMD は、コンテナのエントリーポイントを設定します。
全体の動作
ベースイメージの指定:
Ruby 2.7の公式イメージをベースとして使用します。これにより、Ruby 2.7の実行環境がコンテナ内に設定されます。
ディレクトリの作成:
/var/www ディレクトリを作成します。これは、アプリケーションのファイルを配置するためのディレクトリです。
ファイルのコピー:
ローカルマシンの main.rb ファイルをコンテナ内の /var/www ディレクトリにコピーします。これにより、Rubyスクリプトがコンテナ内で利用可能になります。
デフォルトコマンドの設定:
コンテナが起動すると、自動的に ruby /var/www/main.rb コマンドが実行されます。これにより、main.rb スクリプトがRubyインタプリタで実行されます。
3. イメージの作成
Dockerfileを元にDockerイメージをビルドします。
カレントディレクトリにある Dockerfile を使用して、sample/webrick:latest という名前のイメージを作成します。
docker image build -t sample/webrick:latest .
docker image build
Dockerイメージをビルドするためのコマンドです。
-t sample/webrick:latest
ビルドされたイメージに sample/webrick:latest というタグを付けます。ここで sample/webrick はイメージの名前で、latest はタグ(通常、バージョンやリリース情報を示します)です。
.
Dockerfileが存在するディレクトリのパスを指定します。ここではカレントディレクトリを示しています。
docker image build と docker build の違い
docker image build:
これは docker image コマンドのサブコマンドの一つで、特にDockerイメージをビルドするためのものです。DockerのCLIが進化する過程で、コマンドの構造がより整理され、明確化されました。docker image build はその一環として、イメージ関連の操作を明示的に分けるために導入されました。
docker build:
こちらは、従来から存在するコマンドで、同じくDockerイメージをビルドするためのものです。docker build はまだ広く使用されており、機能的には docker image build と同じです。
イメージの確認
docker image ls
Dockerコマンドのヘルプ
docker --help
docker image --help
4. コンテナの作成、実行
docker container run -p 8000:8000 --name webrick sample/webrick:latest
docker container run だとうまくいかなかったのでdocker runでやった
docker run -p 8000:8000 --name webrick sample/webrick:latest
5. 実行結果の確認
ブラウザを開いて localhost:8000
6.停止と削除
コンテナの基本ライフサイクル
作成→起動→停止→削除
ターミナルでctrl+cでプロセス中断
一覧確認
docker container ls
docker container ls -a
docker ps
停止
docker container stop webrick
削除
docker container rm webrick
一覧確認
docker container ls -a
7.各種コマンド
ログ
コマンド実行
お掃除
先ほどのコマンドを再実行(タブで再利用)
docker run -p 8000:8000 --name webrick sample/webrick:latest
バックグランウドで実行 -d
docker run -d -p 8000:8000 --name webrick sample/webrick:latest
ログ出すために、http://localhost:8000/ にアクセスしておく
docker container logs webrick
docker container exec webrick ruby -v
後片付け
docker system prune -a
docker system prune:
Dockerシステム全体から不要なデータ(停止中のコンテナ、未使用のネットワーク、未使用のボリューム、キャッシュなど)を削除するコマンドです。
-a:
未使用のすべてのイメージも削除します。このオプションを指定しない場合、未タグのイメージ(dangling images)のみが削除されます。
いただいたサポートで、書籍代や勉強費用にしたり、美味しいもの食べたりします!