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:コンテナ終了時にコンテナを自動的に削除