🐡

dockerのノート

4 min read

はじめ

dockerのノート

コンテナの学習やっていく

https://docs.docker.com/docker-for-mac/apple-m1/

M1 Macの場合はこちらの記事を参考に
Rosettaとやらをインストールしてdocker を利用する。

softwareupdate --install-rosetta

M1 Macで通らなかった動作しなかったコマンドについては
動かなかった旨を残しておきますが、どうやらnginx程度はちゃんと動く模様。

あると便利なコマンド

watch コマンド
brew install watch でインストールできる。
コマンドの実行結果を常に監視したい時に便利

watch -t "docker ps"

実行環境

M1 MacBook macOS Big Sur version 11.2
MacBook Air (M1, 2020) Apple M1 メモリ 16GB SSD 256GB
Docker version 20.10.3, build 48d30b5

または
Windows 10 SurfaceBook

docker の操作コマンド

基本

  • プロセスを表示
docker ps
  • イメージを取得 (Pull)
# nginx を取得する。
docker pull nginx
  • イメージを表示 (List)
docker images
  • イメージの履歴を表示 (History)
docker history nginx
  • イメージを削除 (Delete Docker Image)
docker rmi nginx
docker images

nginx を操作

nginxサーバーのコンテナを取得して起動して停止する例

# nginx のdockerイメージを取得する。
docker pull nginx
# nginx のdocker イメージを起動する。
docker run -p 80:80 --name nginx nginx
# 作動中のコンテナ一覧を表示 (List)
docker ps
# Webページをcurlを使って取得
curl localhost:80
# nginx コンテナを停止
docker stop nginx
# 停止中のコンテナも全て一覧表示
docker ps --all
# nginx コンテナを削除
docker rm nginx
# 停止中のコンテナも全て一覧表示
docker ps --all

nginx を操作(バックグラウンド)

nginxサーバーのコンテナを取得してバックグランド起動して停止する例

# nginx のdockerイメージを取得する。
docker pull nginx
# nginx のdocker イメージを起動する。
docker run --detach -p 80:80 --name nginx nginx
# 作動中のコンテナ一覧を表示 (List)
docker ps
# Webページをcurlを使って取得
curl localhost:80
# nginx コンテナを停止
docker stop nginx
# 停止中のコンテナも全て一覧表示
docker ps --all
# nginx コンテナを削除
docker rm nginx
# 停止中のコンテナも全て一覧表示
docker ps --all

nginx の操作(nginx内を探索する)

nginxのConfigファイルを見つける

# nginx のdocker イメージを起動する。
docker run --detach -p 80:80 --name nginx nginx
# 作動中のコンテナ一覧を表示 (List)
docker ps
# Webページをcurlを使って取得
curl localhost:80
# sh でコンテナに乗り込む
docker exec -it nginx sh
# ファイルを探索する
find / -type d -name nginx | xargs grep -r  html
# nginx コンテナを停止
docker stop nginx
# 停止中のコンテナも全て一覧表示
docker ps --all
# nginx コンテナを削除
docker rm nginx
# 停止中のコンテナも全て一覧表示
docker ps --all

nginx を操作する(トップページを上書きする)

nginx のデフォルトページを「Hello,World」に書き換える。

# nginx のdocker イメージを起動する。
docker run --detach -p 80:80 --name nginx nginx
# 作動中のコンテナ一覧を表示 (List)
docker ps
# Webページをcurlを使って取得
curl localhost:80
# sh でコンテナに乗り込む
docker exec -it nginx sh

# ファイルを探索する
find / -type d -name nginx | xargs grep -r  html
# 格納先されているデフォルトのWebページを表示
cat /usr/share/nginx/html/index.html
# Hello,Worldで上書き
echo "Hello World" > /usr/share/nginx/html/index.html
# sh から抜ける
exit

# Webページをcurlを使って取得 「Hello,World」と表示されていればOK
curl localhost:80

# nginx コンテナを停止
docker stop nginx
# 停止中のコンテナも全て一覧表示
docker ps --all
# nginx コンテナを削除
docker rm nginx
# 停止中のコンテナも全て一覧表示
docker ps --all

docker rmi と docker rmの違い

docker イメージを削除するのは rmi
docker コンテナを削除するのは rm

他、コンテナのデバッグに使えそうなコマンド

  • コンテナのログを表示 (Log)

コンテナ内の実行ログを確認できる。
例)
localhost:80にcurlした時に残るnginxコンテナのログ

172.17.0.1 - - [21/Feb/2021:13:07:45 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.64.1" "-"

docker logs nginx
  • コンテナのメタデータを見る (Inspect Docker container)
docker inspect nginx

起動中のコンテナから自作イメージを作成


# nginx のdockerイメージを取得
docker pull nginx

# カレントディレクトリに「Hello World2」と記載したindex.htmlを用意
echo "Hello World2" >  $(pwd)/index.html

# nginx イメージを用いてhelloという名前でコンテナをバックグランドで実行
# この時 ワーキングディレクトリをボリュームマウント
docker run -d --volume "$(pwd)":/usr/share/nginx/html -p 80:80 --rm --name hello nginx

# curl を実行して動作確認
curl localhost
> Hello World2

# コンテナ内のログを確認
# 直前のcurl のログが見える
docker logs hello
> 172.17.0.1 - - [28/Feb/2021:13:34:07 +0000] "GET / HTTP/1.1" 200 13 "-" "curl/7.64.1" "-"

# helloコンテナからイメージを作成
docker commit hello hello_world

# イメージ一覧を表示
# オリジナルイメージ、hello_worldが作成できていることを確認
docker images
> hello_world   latest    d7e0f64fec8f   6 seconds ago   126MB