はじめに
UbunuでDockerを使う方法のまとめです。
方法
インストール
# DockerオフィシャルのGPGキーを追加する
$ sudo apt update
$ sudo apt install ca-certificates curl
$ sudo install -m 0755 -d /etc/apt/keyrings
$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
$ sudo chmod a+r /etc/apt/keyrings/docker.asc
# Dockerのダウンロードサイトをaptリポジトリに追加する
$ echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
$ sudo apt update
# Docker Engine関係ライブラリのインストール
$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# sudoしなくてもdockerコマンドを使えるようにする
$ sudo gpasswd -a ユーザ名 docker
# Dockerのバージョン確認
$ docker --version
参考
Install Docker Engine on Ubuntu
実行から停止
# Dockerイメージのダウンロード(イメージのアップデートにも使える)
$ docker pull イメージ名:タグ
# コンテナの起動
$ docker run ~
# よく使うオプション
-d バックグラウンドで実行するとき
-it キーボード操作する
-e 環境変数の設定
-p ポートの設定。"ホストのポート番号:コンテナのポート番号"で指定
-v ディレクトリをマウントする
--rm 終了と同時にコンテナ削除
--mount type=bind or volume, src=ボリューム名, dst=マウント先
--net Dockerネットワークに参加
# 実行状態の確認
# -aをつけると稼働中ではないものも含めて全てのコンテナを表示する。
$ docker ps
# 稼働中のコンテナに入る
$ docker exec -it コンテナ名 bash
# コンテナの停止
$ docker stop コンテナ名
# コンテナの再開
$ docker start コンテナ名
# ログの確認
$ docker logs コンテナ名
# ダウンロードしたDockerイメージのリスト表示
$ docker image ls
環境の削除
# コンテナの破棄
$ docker rm コンテナ名
# Dockerイメージの削除
$ docker image rm リポジトリ名:タグ
# 停止しているコンテナを全て削除する
$ docker container prune
# イメージを全て削除する
$ docker image prune
# 停止中のコンテナ、使われていないネットワーク、danglingイメージ、buildキャッシュを全部まとめて消す
$ docker system prune -a
ファイル操作
# 実行中のコンテナ内を操作したいとき
$ docker exec コンテナ名 /bin/bash
# ファイルのコピー
# ホスト -> コンテナ
$ docker cp コピー元のパス コンテナ名:コピー先のパス
# コンテナ -> ホスト
$ docker cp コンテナ名:コピー元のパス コピー先のパス
ボリューム操作
# ボリュームの作成
$ docker volume create --name ボリューム名
# 作成したボリュームのリスト表示
$ docker volume ls
# ボリュームの詳細表示
$ docker volume inspect ボリューム名
# ボリュームの削除
$ docker volume rm ボリューム名
ネットワーク関係
# Dockerが管理するネットワークの表示
$ docker network ls
# Dockerネットワークを作る
$ docker network create ネットワーク名
-> IPアドレスではなく、コンテナ名で通信できる
# Dockerネットワークに接続
$ docker network connect ネットワーク名 コンテナ名
# Dockerネットワークから切断
$ docker network disconnect ネットワーク名 コンテナ名
# Dockerネットワークの削除
$ docker network rm ネットワーク名
Dockerfile 関係
# Dockerfileからイメージ作成
$ docker build . -t イメージ名
イメージの更新
$ docker commit コンテナ名 イメージ名:タグ名