🧑‍💻

Dockerノート

2024/12/28に公開

はじめに

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