だいぶ前にDockerを軽く触りましたが、一度会社PCが新しくなって環境がなくなってからは構築できず、そのまま遠ざかっていました。
この春、またPC入れ替えで新しくなったので、Dockerを構築してもう少し活用したいと思い、備忘録兼ねて構築に使わせてもらったサイトと基本的なコマンドをまとめておこうかと思います。
まずは構築
以下の環境に構築しました。
エディション:Windows11 Pro
バージョン:23H2
OSビルド:22631.3593
CPU:Intel(R) Core(TM) i7
メモリ:16G
構築メモは以下の記事を参考にさせて頂きました。
また、弊社サイトですが、以下の記事のおかげでネットワークつながらない問題が解決しました。(Windows10構築メモですが、ネットワーク部分は同じだったので助かりました)
よく使うコマンド
ちょっとしたオプション忘れがちなので、以下にメモ。
今の状況を見る
今あるイメージはimagesコマンドで見ることができます。
ubuntu@MYPC:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d2c94e258dcb 13 months ago 13.3kB
今実行中のコンテナはpsコマンドで見ることができます。
-a をつけると停止しているコンテナもすべて表示されます。
ubuntu@MYPC:~$ docker ps -a
CONTAINER_ID IMAGE COMMAND CREATED STATUS PORTS NAMES
761727eb5a76 hello-world "/hello" 4 weeks ago Exited (0) 4 weeks ago cool_wozniak
イメージ作成
Dockerfileを使ってイメージを作成します。
適当なフォルダを作って、Dockerfileを作ります。
ubuntu@MYPC:~$ mkdir /docker_setting/ubuntu-python3
ubuntu@MYPC:~$ touch /docker_setting/ubuntu-python3/Dockerfile
一旦、Pythonが動く環境をベースにしたかったので、シンプルなものだけ作りました。
FROM ubuntu:22.04
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y git python3 python3-pip
以下のコマンドで実行するとイメージが作成されます。
ubuntu@MYPC:~$ cd /docker_setting/ubuntu-python3/
ubuntu@MYPC:~/docker_setting/ubuntu-python3$ docker build -t ubuntu-python3 .
[+] Building 80.0s (7/7) FINISHED docker:default
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 145B 0.0s
=> [internal] load metadata for docker.io/library/ubuntu:22.04 2.8s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [1/3] FROM docker.io/library/ubuntu:22.04@sha256:a6d2b38300ce017add71440577d5b0a90460d0e57fd7aec21dd0d1b0761bbfb2 4.2s
=> => resolve docker.io/library/ubuntu:22.04@sha256:a6d2b38300ce017add71440577d5b0a90460d0e57fd7aec21dd0d1b0761bbfb2 0.0s
=> => sha256:52882761a72a60649edff9a2478835325d084fb640ea32a975e29e12a012025f 2.30kB / 2.30kB 0.0s
=> => sha256:a8b1c5f80c2d2a757adc963e3fe2dad0b4d229f83df3349fbb70e4d12dd48822 29.53MB / 29.53MB 3.0s
=> => sha256:a6d2b38300ce017add71440577d5b0a90460d0e57fd7aec21dd0d1b0761bbfb2 1.13kB / 1.13kB 0.0s
=> => sha256:2af372c1e2645779643284c7dc38775e3dbbc417b2d784a27c5a9eb784014fb8 424B / 424B 0.0s
=> => extracting sha256:a8b1c5f80c2d2a757adc963e3fe2dad0b4d229f83df3349fbb70e4d12dd48822 1.0s
=> [2/3] RUN apt-get update && apt-get upgrade -y 7.5s
=> [3/3] RUN apt-get install -y git python3 python3-pip 64.4s
=> exporting to image 1.0s
=> => exporting layers 1.0s
=> => writing image sha256:6399f1dcc3f32eee54a25274708b87ec96cc60ea2a54cd4d86d9fb970f42fefa 0.0s
=> => naming to docker.io/library/ubuntu-python3
コンテナ実行
作業用フォルダを作って、そこをマウントしつつ実行します。
以下は、ubuntu イメージを使って新しいコンテナを起動し、その中でシェル (/bin/bash) を実行するコマンド
ubuntu@MYPC:~$ docker run -it --name analyse-env ubuntu-python3 /bin/bash
root@d0bf907b8533:/#
オプションのiやtは標準入力や疑似ターミナルに関するコマンド、--nameはコンテナ名をつけるオプションになってます(今回は「analyse-env」という名前でコンテナを作成)
コンテナ削除
使うコマンド:docker rm <コンテナID>
まず、削除するコンテナのCONTAINER_IDを以下のコマンドで、探します
-aは停止しているコンテナも表示してくれます
ubuntu@MYPC:~$ docker ps -a
CONTAINER_ID IMAGE COMMAND CREATED STATUS PORTS NAMES
761727eb5a76 hello-world "/hello" 4 weeks ago Exited (0) 4 weeks ago cool_wozniak
今回は、構築時に作ったhello-worldコンテナを削除したいので、「761727eb5a76」というIDのコンテナを削除します。
削除するIDが分かったら以下のコマンドでサクッと削除できます。
ubuntu@MYPC:~$ docker rm 761727eb5a76
イメージ削除
使うコマンド:docker rm <イメージID>
イメージを削除する際は、それに紐づいているコンテナから削除する必要があります。
まずは、先ほどのコンテナ削除の際にIDを見るコマンドでIMAGE列に削除したいイメージが書かれているコンテナを削除します。
そのあと、削除するIMAGE_IDを以下のコマンドで探します
ubuntu@MYPC:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-python3 latest 6399f1dcc3f3 18 minutes ago 498MB
hello-world latest d2c94e258dcb 13 months ago 13.3kB
hello-worldイメージのIMAGE_IDが分かったら、以下のコマンドで削除します
docker image rm d2c94e258dcb
再度コマンドをたたくと、削除されていることが分かります。
ubuntu@PMR666N:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-python3 latest 6399f1dcc3f3 22 minutes ago 498MB
その他
容量を節約したい!
使い終わったコンテナを自動で削除するオプションをつける(--rm)
それほど節約にはならないかもしれませんが、あれこれ試しにコンテナ作ってごみがたまるのを防ぐことはできるかと。
ubuntu@MYPC:~$ docker run -it --rm --name analyse-env ubuntu-python3 /bin/bash
root@d0bf907b8533:/#
ファイルのI/Oが遅いのはつらい
「作ったファイルはWindows上に置いておきたい」、「Windows上で調整したファイルをコンテナで連携したい」との思いで、ファイル連携を試行錯誤していましたが、今回の環境作りで改めて調べなおしたら、
- WSL2上にファイルを置く(\\wsl2$\home<ユーザ名>でWindows上からファイルがおける)
- コンテナがWSL2のフォルダをマウントするように実行する
と良さそうということが分かりました。
マウントする際は、コンテナ起動時にオプションを追加します。
試しにWSL2の~/work/docker_shareというフォルダをコンテナの/shareにマウントしたときのコマンドを以下にメモしておきます。
ubuntu@MYPC:~/work/docker_share$ ls
test.txt
ubuntu@MYPC:~/work/docker_share$ docker run -it --rm -v $PWD:/share --name analyse-env ubuntu-python3 /bin/bash
root@3da02ec3cabb:/# cd /share
root@3da02ec3cabb:/share# ls
test.txt ←マウントするフォルダに入れておいたテキストファイルが見えている
root@3da02ec3cabb:/share#
「$PWD:/share」はWSL2でコマンドをたたく時のカレントディレクトリを示しています。
コマンドとしては
-v <ホスト側のディレクトリ>:<コンテナ側のディレクトリ>
として記載します。