Subsections of Docker
Post Installation Steps for linux
Docker のインストール後の設定
docker group に追加
Docker サービスをデフォルトで起動時に開始するように設定
$ sudo systemctl enable docker.service
$ sudo systemctl enable containerd.service
無効化は以下の通り
$ sudo systemctl disable docker.service
$ sudo systemctl disable containerd.service
Copy and Mount Methods
docker での copy と mount
コピー
ホストとコンテナ間でファイルをコピーするときは次のようにする
$ docker cp <option> <コピー元path> <コピー先path>
コンテナのパスは<container name>:<path>
のように書く
マウント
※マウントはコンテナをrunするときにオプションとして指定する
バインドマウント
既存(ホスト側)のファイルやフォルダをマウントする方法のこと。
普通のファイル同様に編集やバックアップが可能となるため、頻繁にアクセスするファイルなどはこちらに置く。
$ docker run (省略) -v <マウント元のパス>:<マウントポイント> (省略)
ボリュームマウント
ボリュームを作成し、マウントする方法のこと。
Dockerホストから変更を加えたくないようなファイルなどはこちらに置く。
-
ボリュームの作成
$ docker volume create <volume name>
-
ボリュームの削除
$ docker volume rm <volume name>
-
マウント方法
$ docker run (省略) -v <ボリューム名>:<マウントポイント> (省略)
※ただしボリュームが存在しないときには新規作成される。
-
docker volume コマンドにおけるサブコマンド
サブコマンド 意味 create ボリュームの作成 inspect ボリュームの詳細情報を確認 ls ボリューム一覧を確認 prune コンテナからマウントされていないボリュームをすべて削除 rm ボリュームの削除
ボリュームマウントとバインドマウントを明示的に指定した設定方法
$ --mount type=<bind or volume>,src=<マウント元>,dst=<マウント先>
※この方法ではバインドマウントとボリュームマウントが明示的に指定されているためわかりやすく、
ボリュームが存在しない場合には新規作成されずエラーが出力される。そのため-v
オプションより
--mount
オプションを使用することが推奨されている。
- src は source でもOK
- dst は destination でもOK
- type=tmpfs としてメモリーを特定のマウント先に指定することもできる。
appendix
ボリュームのバックアップ方法
$ docker run --rm -v <volume name>:/src -v <バックアップ先のフォルダ名>:/dest busybox tar czf /dest/backup.tar.gz -C /src .
- 軽量なLinux イメージの busybox を起動
- バックアップ対象をコンテナの /src にボリュームマウント
- Docker ホストの任意のディレクトリを /dest にバインドマウント
- /src 以下の全ファイルが /dest/backup.tar.gz にバックアップされる
- コンテナが破棄される
※ただしこの方法ではバックアップしたいボリュームのボリューム名がわかっていなければならない。
バックアップ対象をボリューム名ではなくコンテナのディレクトリ名で指定したい場合は--volume-from
オプションを使用する!
$ docker run --rm --volume-from <container name> -v <バックアップ先>:/dest busybox tar czf /dest/bachup.tar.gz -C /var/lib/mysql .
バックアップのリストア
バックアップを取っておいたデータを任意のvolumeに復元する方法
$ docker run --rm -v <volume名>:/dest -v <バックアップデータの置かれているディレクトリ>:/src busybox tar xzf /src/backup.ta.gz -C /dest
データボリュームコンテナ
How to install Docker
1. Dockerのインストールの仕方
-
古いバージョンをアンインストール
$ sudo apt-get remove docker docker-engine docker.io containerd runc
It’s OK if
apt-get
reports that none of these packages are installed.
1.1 Install methods
Dockerのリポジトリをセットアップしてそこからインストール方法が推奨されている。
異なる方法もあるが、ここではリポジトリからインストールを行う。
-
リポジトリの設定
$ sudo -E apt-get update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
-
Dockerの公式GPGキーを追加
$ sudo mkdir -p /etc/apt/keyrings $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
-
次のコマンドを使用して、リポジトリを設定
$ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1.2 DockerEngineのインストール
apt
パッケージインデックスを更新し、Docker Engine、containerd、Docker Composeの最新バージョンをインストールするか、次の手順に進んで特定のバージョンをインストールする
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin
- Docker Engineの特定のバージョンをインストールするには、リポジトリに使用可能なバージョンをリストしてから、以下を選択してインストールを行う
-
リポジトリで利用可能なバージョンを一覧表示
$ apt-cache madison docker-ce
-
たとえば、2番目の列のバージョン文字列を(
5:20.10.16~3-0~ubuntu-jammy
)使用して特定のバージョンをインストールするならば、次のようなコマンドを実行する$ sudo apt-get install docker-ce=5:20.10.13~3-0~ubuntu-hirsute docker-ce-cli=5:20.10.13~3-0~ubuntu-hirsute containerd.io docker-compose-plugin
-
1.3 proxyの設定
-
Docker Engine の proxy 設定
docker pull
などでイメージを落としてくる場合はDocker Engine にプロキシ設定をする必要がある。/lib/systemd/system/docker.service
で環境変数を指定。[Service]
の欄の下にEnvironment
を追記すればOK![Service] Environment=HTTP_PROXY=http://{HOST}:{port} Environment=HTTPS_PROXY=http://{HOST}:{port}
-
Docker コンテナ起動時の proxy 設定
~/.docker/config.json
を書いておくとコンテナ内に HTTP_PROXY などを自動で設定してくれる※Docker Compose のときにはつかえない?
{ "proxies": { "default": { "httpProxy": "http://{HOST}:{port}", "httpsProxy": "http://{HOST}:{port}" } } }
-
proxy設定の反映とDockerを再起動
$ sudo systemctl daemon-reload $ sudo systemctl restart docker
やってみたけどあまり意味のなかった設定
-
upstartの人
$ sudo cat /etc/default/docker (省略) export no_proxy='export no_proxy=127.0.0.1,localhost,xxx.xxx.xxx.xxx' export NO_PROXY="${no_proxy}" export http_proxy='http://your.proxy.url:port/' export HTTP_PROXY="${http_proxy}" export https_proxy='https://your.proxy.url:port/' export HTTPS_PROXY="${https_proxy}"
-
Systemdの人
$ sudo cat /etc/systemd/docker.service (省略) [Service] Environment="HTTP_PROXY=http://your.proxy.url:port/" "HTTPS_PROXY=https://your.proxy.url:port/"
※ /lib/systemd/system/docker.serviceと併用しようとするとDockerが起動しなくなるので注意!2つの設定が競合するのかな?
-
docker.service.d
にファイルの追加$ cd /etc/systemd/system/ $ mkdir docker.service.d $ sudo nano http-proxy.conf -> 内容の書き込み
$ cat /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment="HTTP_PROXY=http://proxy.example.com:8080/" Environment="HTTPS_PROXY=http://proxy.example.com:8080/"
1.4 確認
hello-world
イメージを走らせ、Dockerが正しくインストールされていることを確認$ sudo docker run hello-world
2. Dockerのアンインストール方法
-
Docker Engine、CLI、Containerd、およびDockerComposeパッケージをアンインストール
$ sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-compose-plugin
-
ホスト上のイメージ、コンテナー、ボリューム、またはカスタマイズされた構成ファイルは自動的に削除ない。すべてのイメージ、コンテナー、およびボリュームを削除するには下記を実行
$ sudo rm -rf /var/lib/docker $ sudo rm -rf /var/lib/containerd
※編集した構成ファイルは手動で削除する必要がある
3. 問題とその解決策
3.1 $ sudo docker run hello-world
を実行するとタイムアウトしてしまう
インターネットに接続できない
-> proxyを設定(上記参照)
proxy 設定してもDockerイメージが取得できない(conectできない)…
おそらく公開鍵の問題!
apt update
などを実行すると、「公開鍵を利用できないため、以下の署名は検証できませんでした」というエラーが出る。
つまりGPGエラーが問題だった!
ということでOpenGPG鍵をインポート
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-k
DockerのインストールでもGPG鍵キーのインストールはしているが、おそらく以下のどちらかが問題だった…
Install method
の 2. でもインストールしてるけどetc
のところをusr
にしなければならなかった1.2 DockerEngineのインストール
はどちらも実行してしまい、DockerイメージをダウングレードしてしまったためGPGエラーが起こった(?)
補足(やってみたけど意味のなかったこと)
GPGエラーについて
W: 署名照合中にエラーが発生しました。 リポジトリは更新されず、過去のインデックスファイルが使われます。 GPG エラー: http://packages.cloud.google.com/apt cloud-sdk-xenial InRelease: 公開鍵を利用できないため、 以下の署名は検証できませんでした: NO_PUBKEY 6A030B21BA07F4FB
と出力されたため、apt-key
コマンドでパブリックキーを追加した(パブリックキーの有効期限切れだと思った…)
$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6A030B21BA07F4FB
-> apt-key
ではproxyにうまく接続できない問題が発生…
-> --keyserver-option
を使用してproxyサーバを指定
$ sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-option http-proxy=http://x:y@proxy:port --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
Executing: gpg --ignore-time-conflict --no-options --no-default-keyring --secret-keyring /tmp/tmp.oqJcUg9wwq --trustdb-name /etc/apt/trustdb.gpg --keyring /etc/apt/trusted.gpg --primary-keyring /etc/apt/trusted.gpg --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-option http-proxy=http://x:y@proxy:port --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
gpg: 鍵A88D21E9をhkpからサーバーkeyserver.ubuntu.comに要求
gpg: 鍵A88D21E9: 公開鍵“Docker Release Tool (releasedocker) <docker@dotcloud.com>”を読み込みました
gpg: 処理数の合計: 1
gpg: 読込み: 1 (RSA: 1)
3.2 インターネットに(ブラウザで)接続できない
proxyの設定とGPG鍵のインストールで$ sudo docker run hello-world
は実行できるようになったが、未だChromeやFireFoxが使えない(インターネットに接続できない)…
-
docker ではUbuntuの以下4つのバージョンでしか正常に動作することが保証されてなかったため、Ubuntu21.04ではうまく行かなかった
- Ubuntu Jammy 22.04 (LTS)
- Ubuntu Impish 21.10
- Ubuntu Focal 20.04 (LTS)
- Ubuntu Bionic 18.04 (LTS)
-
22.04 に upgrade したら使えるように! → Ubuntu22.04 のproxy設定を手動にしたら使えるようになった!
参考
Dockerのインストール
proxy設定
- プロキシ環境下の Docker
- Proxy環境でdockerを外に繋ぐ方法
- プロキシサーバを使うように Docker を設定
- プロキシーサーバー利用の設定
- Ubuntu 18.04 LTS / 20.04 LTS に Docker をインストールする
問題
GPGエラーについて
Docker Container for Cuda
docker の cuda コンテナの追加設定
1. .bashrc の変更
/home/
と/root/
以下に保存/home/
はボリュームマウントしているので、新しくコンテナを作成する場合は設定ファイルを/home/
の保存し、作成したコンテナで/home/
以下の設定ファイルをコピーすること!
2. python のライブラリの追加
ライブラリを追加するディレクトリにパスを通す
$ export PYTHONPATH="/root/.local/lib/python3.8/site-pachages/:$PYTHONPATH"
- moysnn ライブラリのシンボリックリンクを"/root/.local/lib/python3.8/site-pachages/“以下に作成
3. コマンドのインストール
- tree
- trash
Connect to Container via ssh
dockerでsshを行う場合にはopensshd-serverをインストールし、設定を行う必要がある。
settings.sh
export DEBIAN_FRONTEND=noninteractive
apt-get install -y openssh-server
export mkdir /var/run/sshd
export ENV=NOTVISIBLE "in users profile"
echo "export VISIBLE=now" >> /etc/profile
echo "service ssh start" >> /etc/profile
Dockerfile
RUN bash /tmp/setting.sh
EXPOSE <port>
CMD ["/usr/sbin/sshd", "-D"]
ただしssh-serverが起動していなければ接続できない。そのため、コンテナ内で以下のコマンドを使用し、サーバーが止まっていないかを確認すること。
$ service ssh status
start or stop ssh
$ service ssh start
$ service ssh stop
trouble
何度もuser名などを変えているとssh接続できない…
known_hostsファイルの情報と異なるためsshできなくなる
$ ssh-keygen -f "<path of known-hosts file>" -R "[<host>]:<port>"
と実行すればOK! (log標準出力でも表示されるのでそちらを参照!)
- 詳しくはこちら
参照
How to install Docker Compose
- update
$ sudo apt update
$ sudo apt upgrade
- file のダウンロード
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 権限の付与
$ sudo chmod +x /usr/local/bin/docker-compose
- 動作確認
$ docker-compose --version
docker compose のアップグレード
docker compose の v1 系をインストールしてしまっていたので v2 系にグレードアップ
1系のDocker compose の削除
/usr/local/bin/
にあるdocker-compose
ディレクトリを削除
$ sudo trash docker-compose
新しいDocker compose のインストール
-
以下のコマンドを実行して Docker Compose の現時点での最新安定版をダウンロードします。
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} $ mkdir -p $DOCKER_CONFIG/cli-plugins $ curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
このコマンドによって、アクティブユーザーの$HOMEディレクトリ配下に Compose がインストールされます。 システム上の全ユーザー向けに Docker Compose をインストールする場合は、~/.docker/cli-pluginsの部分を/usr/local/lib/docker/cli-pluginsに置き換えます。
別のバージョンをインストールする場合は
v2.4.1
の部分を書き換える -
実行バイナリに対して実行権限を与えます。
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
-
インストール結果をテストします。
$ docker compose version
アンインストールする場合
- curlを使って Docker Compose をインストールしていた場合は、次のようにしてアンインストールします。
$ rm $DOCKER_CONFIG/cli-plugins/docker-compose
参考
Docker Compose
dockerでcudaコンテナの作成
cuda の GPG key 登録
-
古いキーの削除
$ sudo apt-key del 7fa2af80
-
ヘルパーパッケージを利用したキーの登録 nvidia が提供している、nvidia リポジトリ用の新しい署名キーのインストールを自動化する新しいヘルパーパッケージを利用して鍵を登録
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.0-1_all.deb $ sudo dpkg -i cuda-keyring_1.0-1_all.deb
※
ubuntu2204
とx86_64
は該当のものに書き換える -
remove の仕方 ※インストール時にターミナルに表示された文
A deprecated public CUDA GPG key appear to be installed. To remove the key, run this command: sudo apt-key del 7fa2af80
結局必要だったのかわからなかったけどとりあえずやったこと
Setting up NVIDIA Container Toolkit
-
パッケージリポジトリと GPG key のセットアップ
$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \ && curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \ sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \ sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
-
nvidia-docker2
パッケージのインストール$ sudo apt-get update $ sudo apt-get install -y nvidia-docker2
-
Docker demon のリスタート
$ sudo systemctl restart docker
-
ベースとなるCUDAコンテナを実行することによって、動作するセットアップをテスト
$ sudo docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
以下のような出力ならOK!
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 450.51.06 Driver Version: 450.51.06 CUDA Version: 11.0 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | |===============================+======================+======================| | 0 Tesla T4 On | 00000000:00:1E.0 Off | 0 | | N/A 34C P8 9W / 70W | 0MiB / 15109MiB | 0% Default | | | | N/A | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: | | GPU GI CI PID Type Process name GPU Memory | | ID ID Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
containerd
-
コンテナエンジンとしてcontainerdをシステムにインストールするために、いくつかの前提モジュールをインストール
$ sudo modprobe overlay \ && sudo modprobe br_netfilter
-
これらを確実に持続させることができる
$ cat <<EOF | sudo tee /etc/modules-load.d/containerd.conf overlay br_netfilter EOF
-
apt が HTTPS 上でリポジトリを使用できるようにするためのパッケージをインストール
$ sudo apt update $ sudo apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release
-
リポジトリとGPG key の追加
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/ docker-archive-keyring.gpg $ echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
※1回やってたらいらないかも…
Dockerfile and docker-compose.yml の作成
docker compose と Dockerfileを使う場合
コンテナ作成後の設定
- 鍵の作成
- ssh server の起動
$ bash ./sterter.sh
- vscodeのsettings.jsonとkeyboard.jsonの設定
- rootのパスワード設定
Dockerfile のみの場合
trouble
apt が使えない…
コンテナにはproxyを通してたけどaptに通すのを忘れてた…
Dockerfile の apt update
の前に以下の文を追加
RUN echo 'Acquire::http::proxy "http://proxy.cc.yamaguchi-u.ac.jp:8080"; \
Acquire::https::proxy "https://proxy.cc.yamaguchi-u.ac.jp:8080";' > /etc/apt/apt.conf
nvidia gpg key の更新
$ sudo apt-key del 7fa2af80
$ wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-keyring_1.0-1_all.deb
$ sudo dpkg -i cuda-keyring_1.0-1_all.deb
$ sudo apt update
cuda version を下げるとapt update
が通らなくなる
RUN apt-get update && apt-get install -y \
bzr \
cvs \
git \
mercurial \
subversion
みたいな感じで update
と install
をつなげてみたけどだめだった…
nvidiaのドライバが使えなくなった…
- nvidia driverのバージョンを落としてインストールし直す
- nvidia container toolkitをインストール
- proxy設定
参照
- Dockerhub nvidia/cuda
- NVIDA Installation Guide
- 【Docker】GPU が使える Jupyter Notebook 環境を最速で用意する
- NVIDIA Docker って今どうなってるの? (19.11版)
- 西井先生のページ
- NVIDIA Container Toolkit (NVIDIA Docker) は何をしてくれるか
- Dockerfileのプロキシ設定
- コンテナで Hello world
- docker上でjupyter-notebookを使用する方法
- NVIDIA DockerイメージのGPGキー更新に関する備忘録
- NVIDIAのリポジトリのキーが更新されました。(2022年4月28日)
- Dockerfile のベストプラクティス
- docker-composeで作成されるものの名前を明示的に指定する方法
CudaをDockerで使用する際のDockerfileの作成
-
次のようなDockerfileを作成する
FROM nvidia/cuda:11.4.0-cudnn8-devel-ubuntu20.04 USER root COPY ./requirements.txt /tmp WORKDIR /code # ENV DEBIAN_FRONTEND noninteractive ENV https_proxy "http://<proxy server>" ENV https_proxy "http://<proxy server>" RUN echo 'Acquire::http::proxy "http://<proxy server>"; \ Acquire::https::proxy "https://<proxy server>";' > /etc/apt/apt.conf RUN apt-get update && apt-get install -y \ curl \ python3 \ python3-distutils RUN curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py && python3 get-pip.py RUN pip install -r /tmp/requirements.txt
- proxy 設定は以下のようにする
ENV https_proxy "http://~~~" ENV http_proxy "http://~~~"
- **cuda の version を下げると
apt update
が通らなくなったので、RUN apt-get update
以下はコメントアウトして、 pythonなどはコンテナ作成後にアタッチしてインストールした…
- proxy 設定は以下のようにする
-
同じ階層に
requirememts.txt
を作成し、 Dockerfile で呼び出せるようにする。 このファイルには必要なパッケージを記入しておくjupyter jupyterlab numpy pandas matplotlib scikit-learn scikit-image scipy torch torchvision tqdm albumentations tensorflow-gpu Pillow opencv-python
-
作成したディレクトリ構造は次のようになる
$ tree my-nvidia-cuda/ my-nvidia-cuda/ ├── Dockerfile ├── requirements.txt └── src └── test.ipynb
-
Docker イメージをビルド
$ cd my-nvidia-cuda $ docker build . -t <image name>
-
Docker コンテナを起動
$ sudo docker run -it --gpus=all -v "$PWD":/code -p 8888:8888 --name <container name> <image name> /bin/bash
--gpus
はgpuのを列挙
Basic docker usage
systemctl の使い方
Docker の起動と停止
$ systemctl start docker.service
$ systemctl stop docker.service
$ systemctl stop docker.socket
設定の反映と再起動
$ systemctl deamon-reload
$ systemctl restart docker.service
docker コマンド
$ docker <上位コマンド> <副コマンド> <オプション> <対象> <引数>
option
オプションの書式 | 内容 |
---|---|
–name <コンテナ名> | コンテナ名の指定 |
-p <ホストのポート番号>:<コンテナのポート番号> | ポート番号の指定 |
-v <ホストのディスク>:<コンテナのディレクトリ> | ボリュームのマウント |
–net=<ネットワーク> | コンテナをネットワークに接続 |
-e <環境変数名>=<値> | 環境変数の指定 |
-d | バックグラウンドで実行(detach: デタッチモードの略) |
-i | コンテナに操作端末(キーボード)をつなぐ |
-t | 特殊キーを使用可能にする |
-help | ヘルプの表示 |
–rm | コンテナ終了時に自動的にコンテナを削除する |
–workdir , -w | コンテナ内部の作業ディレクトリを変更する |
Docker container の作成
$ docker run <option> <container image> <引数>
docker run
コマンドは、イメージをダウンロードするdocker pull
, コンテナを作成するdocker create
, コンテナを起動するdocker start
コマンドを一つにまとめたもの。
コンテナを起動せずに作成したい(docker createしたい)場合などに, docker create
とdocker start
を分けて使用する。
Docker 起動と停止
$ docker start <container name or container ID> #container の起動(container ID は他と重複しない先頭数文字だけでOK!)
$ docker stop <container name or container ID> #container のストップ
便利なコマンド
$ docker logs <container name> #logの確認
container の破棄
$ docker container ls #起動中のコンテナの表示(`docker ps`のように省略可)
$ docker container rm <container name> #コンテナの削除(``docker rm`のように省略可)
起動していないコンテナをすべて削除する場合は
$ docker container prune
image の破棄
$ docker image ls #ダウンロードしたイメージ一覧
$ docker image rm <repository>:<tag> #imageの削除(※tag が latest という最新版を表す値の場合は省略可, `docker rmi` のように省略可)
Docker の容量利用状況の確認
$ docker system df
Build Cache の削除
$ docker builder prune
※キャッシュが貯まると容量を大量に食うので注意!
detachとattach
-
detach Ctrl+P, Ctrl+Q
-
attach
$ docker attach <container name or containerID>
shellの実行
コマンド | コンテナの状態 | シェル終了時 |
---|---|---|
docker run | 停止時 | コンテナ終了 |
docker exec | 稼働時 | 稼働のまま |
-
実行中のコンテナの場合
$ docker exec -it <container name> /bin/bash
を実行することでシェルが起動する
※ここで
exit
してもdocker exec
で実行したものが終了するだけのため、コンテナは終了しない -
停止中のコンテナの場合
$ docker run --name <container name> -it <conteinaer image> /bin/bash
を実行することでシェルが起動する
※ここで
exit
するとコンテナも終了する -
補足
- ここではあくまで
/bin/bash
というコマンドを実行しているだけのため、/bin/passwd
(パスワードの変更画面を表示)のような他のコマンドを実行することもできる。 - 他のシェルを使用したい場合には
/bin/bash
でなく/bin/sh/
のように実行することもできる - 現在使用しているシェルは
echo $SHELL
, 使用可能なシェルはcat /etc/shells
で確認することができる。
- ここではあくまで
Appendix
補足
1回限り動かすコンテナの使い方
(例)go言語でコンパイルするためのコンテナを作成する場合
$ docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp golang:1.13 go built -v
ここではgo built -v
を実行してコンテナを終了・削除している。