Dockerコマンド
はじめに
Dockerを扱う場合、様々なコマンドが登場します。
この投稿は、コマンドについて徒然とまとめる投稿です。
Docker基礎知識
Dockerの特徴と、よくある疑問をまとめます。
Infrastructure as Code
Dockerはインフラの状態をコードとして管理できます。
Dockerfileはイメージの構成を定義します。
docker-compose.ymlはコンテナの構成を定義します。
テキストで構成を管理できるので、差分管理や共有が早く簡単になります。
DockerHubとは?
Docker Hub はDocker社が管理するDockerイメージのレジストリ(保管場所)。 様々がDockerイメージが保存されており、ダウンロードして自分のコンテナ構成に組み込める。
Dockerのイメージとコンテナの違い
DockerコンテナとはDockerイメージのインスタンスのこと。
イメージが設計図で、コンテナが実体。
Dockerのイメージとコンテナの違い
VirtualBoxと何が違う?
Dockerは「コンテナ型仮想化」で、VirtualBoxは「ホスト型仮想化」。
ホスト型仮想化が、ゲストOSをシミュレートするため、リソースを多く消費する。
コンテナ型仮想化は、ホストOSから見ると単一プロセスで、ホストOSにカーネルを共有するため、消費リソースが少ない。
「Docker」を全く知らない人のために「Docker」の魅力を伝えるための「Docker」入門
DockerHubの操作
DockerHubにログイン
docker login [OPTIONS] [SERVER] [flags]
例: docker login
イメージの検索
DockerHubからイメージを検索できる。
docker search [OPTIONS] TERM
イメージのダウンロード
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
イメージのアップロード
docker push [OPTIONS] NAME[:TAG]
ローカルのDockerイメージの操作
イメージ一覧
ローカルのイメージ一覧を表示
docker images [OPTIONS] [REPOSITORY[:TAG]]
実行中コンテナを一覧。
イメージ詳細情報表示
docker inspect [OPTIONS] NAME|ID [NAME|ID...]
例:docker inspect ruby:2.6.5
イメージにタグ付け
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
イメージの削除
docker rmi [OPTIONS] IMAGE [IMAGE...]
Dockerコンテナの操作
稼働コンテナの一覧表示
docker ps [OPTIONS]
-a: 停止中コンテナも表示
docker ps -a --format "{{.ID}}: {{.Status}}" のように、出力形式をフォーマットできる。
使用可能な変数は以下。
| Placeholder | Description |
|---|---|
| ID | Container ID |
| Image | Image ID |
| Command | Quoted command |
| CreatedAt | Time when the container was created. |
| RunningFor | Elapsed time since the container was started. |
| Ports | Exposed ports. |
| State | Container status (for example; “created”, “running”, “exited”). |
| Status | Container status with details about duration and health-status. |
| Size | Container disk size. |
| Names | Container names. |
| Labels | All labels assigned to the container. |
| Label | Value of a specific label for this container. |
| Mounts | Names of the volumes mounted in this container. |
| Networks | Names of the networks attached to this container. |
コンテナの状況確認
コンテナのリアルタイムの状況を表示。
docker stats [OPTIONS] [CONTAINER...]
コンテナ実行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例:docker run -d centos /bin/ping localhost
コンテナのバックグラウンド起動。
コンテナ停止
docker stop [OPTIONS] CONTAINER [CONTAINER...]
コンテナ再起動
docker restart [OPTIONS] CONTAINER [CONTAINER...]
コンテナ削除
docker rm [OPTIONS] CONTAINER [CONTAINER...]
-f: コンテナが稼働していたら、停止して強制的に停止
稼働コンテナへコマンド実行
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
例: docker exec -it myimage /bin/bash
コンテナとホスト間のファイルコピー
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
volumeの一覧
docker volume ls [OPTIONS]
volumeの削除
docker volume rm [OPTIONS] VOLUME [VOLUME...]
参考
Git submoduleを理解する
はじめに Git submoduleとは外部のGitリポジトリを、自分のリポジトリのサブディレクトリとして登録する仕組みです。 コマンドの使い方 頻出するコマンドをまとめます。 今回はサンプルとして、MainroadというHugoのテーマを使います。 ローカルワークスペースのthemes/mainroadディレクトリ以下に追加していきます。 追加 git submodule add <リポジトリのURL> <ローカルのサブディレクトリ> git submodule add https://github.com/Vimux/Mainroad.git themes/mainroad themes/mainroad以下にmainroadがクローンされます。 更新 git submodule update 削除 git submodule deinit -f <サブモジュール>: submoduleを削除 git rm -f <サブモジュール>: gitの管理から削除 rm -rf .git/modules/<サブモジュール>: .gitからgit情報を削除 git submodule deinit themes/mainroad git rm -f themes/mainroad rm -rf .git/modules/themes/mainroad submoduleを追加したときに起こっていること submoduleを理解するために、どんなことが起こっているのかを整理しておきましょう。 追加されたファイルを確認 $ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: ....
Cookieのパラメータ整理
はじめに Cookieの設定をする時に、意外と色々パラメータがあります。 何度も調べては忘れるので、ここでわかりやすくまとめて調べるのは最後にしたいと思います。 パラメータの種類 GoogleChromeのDeveloperToolで調べると、以下のパラメータがあります。 Name Value Domain Path Expires/Max-Age Size HttpOnly Secure SameSite Sameparty Priority これらを対象にそれぞれのパラメータの意味と、設定される値について見ていきます。 Name/Value 早速説明を省きます。 Cookie名とCookieの値です。 Expires/Max-Age Cookieの有効期限です。 指定しない場合は、セッション終了までです。 Max-Ageの単位は秒です。 Domain どのホストの場合にCookieを送信するかを指定します。 デフォルトはCookieを保存したページのホストと同じページにアクセスした場合だけCookieを送信します。 例えば、example.com/page.htmlにアクセスした時に保存されたCookieは、同じくexample.com のホストのページにアクセスした場合に送信されます。 この時、サブドメインへアクセスしてもCookieは送信されません。 あえてDomainを指定し場合は、サブドメインを含めてCookieを送信できます。 Domainの設定は以下のように行います。 document.cookie = 'A=B; Domain=example.com'; Path PathはどのパスでCookieを送信するかを許可します。 Secure Httpsの通信でのみ使用できる。 document.cookie = 'A=B; Secure'; HttpOnly JavaScriptで生成されたCookieはこのフラグを含むことができない フラグを含む場合は、JavaScriptで取得もできない document.cookie = 'A=B; HttpOnly'; HttpとかHttpsとかに関連するCookieかと思うような名前ですが、Httpリクエスト経由でしか使用できないという意味のようですね。 SameSite 別サイトに遷移する時に、遷移先サイトのCookieを送信するかどうかを設定できます。 設定可能な値は、以下のStrict、Lax、Noneの3つです。 遷移元をAサイト、遷移先をBサイトとしましょう。 AサイトからBサイトへ遷移する時、BサイトのCookieが送信されるか設定によって以下のようになります。 Strict:BサイトのCookieを送信しない Lax:GETやHEADなど、安全なメソッドの場合だけ送信する None:制限なくBサイトのCookieを送信する Chromeでは、SameSiteが設定されていない場合は、Lax扱いになります。 また、Noneを指定する場合は、同時にSecrue属性が必須です。 つまり、制限なく別サイトにCookieを送信するには、HTTPS通信でないといけないということになります。 参考 Cookieで指定可能な属性の種類と設定方法 ...