Dockerノート

はじめに

Docker が苦手だったため学習した。Docker でよく使うコマンドを備忘録のため記載。

基礎事項や基本コマンド

シェルとカーネルの役割

  • カーネル:PC 上で唯一ハードウェアと会話できるソフトウェア
  • シェル:ヒューマンの入力値を、シェル言語を通じてカーネルに翻訳して伝達するもの

シェルの STDIN と STDOUT をターミナルに繋げることを「TTY をアタッチする」という。
→TTY をターミナルにアタッチすることで、ターミナルを使ってバックグラウンドプロセスと会話できる。

ドッカーの中にシェルで入る時は次のコマンドを使う

docker exec --interactive --tty

シェル基本コマンド

プロセス

  • プロセスの表示
ps
  • プロセスを BG で起動
(コマンド) &
  • プロセスをフォアグラウンドに戻す
fg

コマンド

  • コマンドのヘルプ
--help

→ シェルコマンドの使い方を知りたい場合や、コマンドがインストールされている場所を表示

  • コマンドの保存先を表示
which ps
  • コマンドのマニュアル
man

サーチ

  • ファイル・フォルダーを探す:find
find / -type d -name nginx
  • 文字を検索:grep
grep "Hello" test.txt -n
  • フォルダー名を探し、その中のファイルを文字検索
find / -type d -name nginx | xargs grep -r html

Docker 一連の作業フローは?

簡単にいうと
コードを書いて、ドッカーイメージをビルドしてリポジトリにプッシュし、本番環境でイメージをダウンロードし、コンテナを起動する
というもの。

Docker コマンド(基本の実践)

以下のコマンドで、public/private の DockerRepositry からイメージをダウンロードする

docker pull IMAGE_NAME

Docker Hub や Docker Registry:GitHub の Docker バージョンのようなもの。リポジトリからイメージを取得できる。

以下のコマンドで、リアルタイムで docker ps の結果を確認できる

watch -t "docker ps"
  • Nginx ドッカーイメージを取得
docker pull nginx
  • Nginx サーバーのコンテナを起動
docker run -p 80:80 nginx

-p は--publish の略。ホスト側のポート番号を 80 にして、コンテナ側のポート番号も 80 にする。ホストとコンテナのポートをマッピングする。
※コンテナに繋げるホスト側のポートを変えることも可能
docker run -p 8080:80 -d nginx

  • 起動中のコンテナ一覧を表示
docker ps
  • コンテナを停止する
docker stop CONTAINER_ID
  • 停止中のコンテナも全て一覧表示
docker ps --all
  • 止まったコンテナを削除
docker rm CONTAINER_ID
  • コンテナをバックグラウンドで起動
docker run -p 80:80 --detach --name nginx nginx

※tty をアタッチする:バックグラウンドからフォアグラウンドに繋げる
※ディタッチ:フォアグラウンドからバックグラウンドに繋げる

  • コンテナのログを表示
docker logs CONTAINER_ID

Docker コマンド(上級編)

  • 作動中のコンテナの中にシェルで入る
docker exec -it CONTAINER_ID bash

-it は--interactive と--tty を繋げたもの。バックグラウンドにいるコンテナを、tty をアタッチしてシェルに接続することでインプット/アウトプットを見れるようにする。

  • コンテナにホストからファイルをコピー
docker run -d --volume $(pwd):/home nginx

コロンの左側がホストのファイルパス。右側がコンテナのファイルパス。ホスト上のディレクトリをコンテナ上のディレクトリにボリュームアタッチをする。
-d は--detach の略で、バックグラウンドで起動するの意味。
実際はコンテナ上に保存されているわけではなく、ホストに保存されている Volume はコンテナ上にマウントされているのみ。

  • コンテナの環境変数を設定する
docker run -d --env TEST_ENV=hellow_world nginx
  • コンテナのメタデータを見てみる
docker inspect CONTAINER_ID
  • Nginx の Config ファイルを見つける
find / -type d -name nginx | xargs grep -r html

cat /usr/share/nginx/html/index.html
echo "Hello World" > /usr/share/nginx/html/index.html

コンテナ内にあるデフォルトの HTML ファイルを、ホスト上の html ファイルを Volume マウントして上書き

touch index.html && echo "hello world" > index.html
docker run -d -v "$(pwd)":/usr/share/nginx/html -p 80:80 --rm --name nginx nginx

※--rm:コンテナ終了時にコンテナを自動的に削除