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