[A-00211] 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

・コンテナ作成/起動(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

・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

https://docs.docker.com/engine/network/drivers/bridge

https://liginc.co.jp/655905

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*