[A-00211] Dockerナレッジまとめ
<<Dockerコマンドまとめ>>
・Docker VMに入る
Mac版のDocker DesktopはVMで動いている為、Volumeなどの実際のデータ配置場所はVM内にある。下記のコマンドを使用すればDocker VMに入ることができる
docker run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
・イメージの一覧を取得する
docker image ls
・イメージを削除する
docker rmi <image-id>
・コンテナを作成/実行する
docker run -itd --net [ネットワーク名] --name [コンテナ名] [image] [開始コマンド]
docker run -itd --net mybridge --name alpine1 alpine /bin/sh #example1
・実行中(停止中)のコンテナの一覧を取得する
docker ps #実行中のコンテナを表示
docker container ls #実行中のコンテナを表示
docker ps -a #停止中のコンテナも含めた全てのコンテナを表示
docker container ls -a #停止中のコンテナも含めた全てのコンテナを表示
・コンテナの内部に入る
docker exec -it [コンテナ名] [実行コマンド]
docker exec -it alpine1 /bin/sh #example1
・コンテナを停止する
docker stop [コンテナ名(複数可能) or コンテナID]
docker container stop [コンテナ名(複数可能) or コンテナID]
docker stop alpine1 #example1
docker stop alpine1 alpine2 #example2
・停止中のコンテナを削除する
docker rm [コンテナ名(複数可能) or コンテナID]
docker container rm [コンテナ名(複数可能) or コンテナID]
docker rm alpine1 #example1
docker rm alpine1 alpine2
・ブリッジネットワークを一覧表示する
docker network ls
・ブリッジネットワークを確認する
docker network inspect [ネットワーク名]
・ボリュームの一覧を表示する
docker volume ls
<<Docker Composeコマンドまとめ>>
・コンテナ作成/起動(up)
docker compose up #docker-compose.ymlが存在する場所で実行する
docker compose up --build #imageをビルドしてコンテナ作成/起動
docker compose up -d #コンテナをバックグラウンド起動(detach)
・コンテナ一覧表示(ps)
docker compose ps
docker compose ps -a #停止中のコンテナも含めて表示する
・ログを表示する(logs)
docker compose logs [サービス名]
・コンテナ作成後の初回のみコマンド実行(run)
docker compose run [サービス名] echo "hello"
・コマンド実行(exec)
docker compose exec [サービス名] echo "hello"
・コンテナを停止/削除(down)
docker compose down
<Dockerfile文法>
・FROMインストラクション
イメージとタグ(version)を指定してベースイメージを作成する
FROM alpine:3.14
・RUNインストラクション
イメージレイヤーを作成する。レイヤーはコマンドの実行命令で構成される
RUN apt-get update
・CMDインストラクション
コンテナ起動時に実行されるコマンド
CMD ["chmod","777","/opt"]
・COPYインストラクション
ホスト上にある資材をコンテナ内部にコピーする
COPY . /opt/
・ENVインストラクション
コンテナ内部の環境変数を定義する
ENV MYSQL_USER=user
ENV MYSQL_PASSWORD=passwd
・WORKDIRインストラクション
コマンドが実行されるDirectoryなど場所を定義する
WORKDIR /opt
RUN mkdir sample # /opt/sampleが作成される
RUN echo "hello" >> ./sample/hello.txt # /opt/sample/hello.txtが作成される
・ADDインストラクション
ローカルのファイルorローカル以外の場所のファイルをコンテナ内部にコピーする。
また、圧縮ファイルに対してはコンテナ内部にコピーした際に自動解凍してくれる
ADD test.zip /opt/ # /optにはtest.zipが解凍された状態で展開される
ADD https://github.com/xxxx/repo/main/README.md /opt/ # WEB上のファイルがコピーされる
・ENTRYPOINTインストラクション
コンテナ実行時(run)に必ず実行されるコマンドをENTRYPOINTインストラクションで記述する。
CMDとの違いは,イメージビルドフェーズでCMDは実行されるがENTRYPOINTは実行されない。実行されるのはdocker runでコンテナを実行した時のみである。
ENTRYPOINT ["python","main.py"]
上記の場合、このコンテナの実行プロセスはmain.pyの実行を目的としていることになる。
・EXPOSEインストラクション
コンテナの開放ポートを定義する。あくまでコンテナ側の開放ポートのみ定義するだけで、ホストからコンテナに接続する際にはdocker runにて-pオプションでポートマッピングを定義する必要がある。
EXPOSE 80 #コンテナ側の開放ポート
docker run -p 8080:80 my-image
・Appendix
参考文献はこちら
https://qiita.com/gon0821/items/77369def082745d19c38
https://knowledge.sakura.ad.jp/23899
https://knowledge.sakura.ad.jp/26522
https://qiita.com/gon0821/items/f9e3bcbb6cb01d4ef7fa
https://qiita.com/YumaInaura/items/1647e509f83462a37494
https://pocketstudio.net/2020/01/31/cmd-and-entrypoint
https://note.com/w0o0ps/n/n9bc1bcd9fa59
https://matsuand.github.io/docs.docker.jp.onthefly/config/containers/container-networking
コメントを残す