Dockerは食わず嫌いでしたが、昨今の流れをうけて勉強ました。社内のプロキシ地獄に陥りましたが、なんとかDockerの上にアプリを構築することができました。なくてはならないものだとは思いますが、プロキシって本当にやっかいですよね。これで挫折してしまう人は多いのではないでしょうか。私も挫折しかかりました。
まずはDockerの概念的なところから勉強しました。イメージすることって大事ですよね。
Docker Hub/Dockerfile/イメージ/コンテナとコマンドのイメージ
まずはDocker用語とコマンドの対応表を作ってみました。これで理解が進んだ気がします。
ubuntuの取得から起動までを順番に行う
順番にコマンドを打っていきます。
ubuntu 18.04のイメージをDocker Hubから取得
docker pullでDocker Hubよりubuntuのイメージをpullします。”ubuntu:18.04″はubuntuというイメージの18.04タグを指定する意味です。タグ名がない場合は最新のlatestがデフォルトで設定されます。
~/docker $ docker pull ubuntu:18.04 18.04: Pulling from library/ubuntu 6abc03819f3e: Pull complete 05731e63f211: Pull complete 0bd67c50d6be: Pull complete Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5 Status: Downloaded newer image for ubuntu:18.04
docker imagesで取得したイメージの一覧を見ることができます。
~/docker $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu 18.04 7698f282e524 4 weeks ago 69.9MB
ubuntu 18.04のイメージをDockerfileから取得
Dokerfileを用いて、docker buildでもイメージを作成することができます。
Dockerfileにはubuntuの18.04バージョンのイメージを指定します。FROMではベース・イメージを指定します。今回はubuntuイメージの18.04バージョンをベース・イメージとしています。
~/docker $ cat Dockerfile FROM ubuntu:18.04
Docker buildでイメージを生成します。”-tdockerfile/ubuntu:dockerfile18.04″オプションでリポジトリ名”dockerfile/ubuntu”と、タグ名”ubuntu:dockerfile18.04″を指定しています。
~/docker $ docker build -t dockerfile/ubuntu:dockerfile18.04 . Sending build context to Docker daemon 2.048kB Step 1/1 : FROM ubuntu:18.04 ---> 7698f282e524 Successfully built 7698f282e524 Successfully tagged dockerfile/ubuntu:dockerfile18.04
- -t, –tag=[] ‘名前:タグ’ 形式で名前とオプションのタグを指定
docker imagesでイメージ一覧をチェックすると、pulldで生成したイメージは下のREOPSITORYが”ubuntu”、Dockerfileで生成したイメージは上の”dockerfile/ubuntu”になっています。大元はubuntuの18.04なのでIMAGE IDは同じ”7698f282e524″ですね。
~/docker $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE dockerfile/ubuntu dockerfile18.04 7698f282e524 4 weeks ago 69.9MB ubuntu 18.04 7698f282e524 4 weeks ago 69.9MB
イメージからコンテナの作成
docker createでpullから生成したイメージからコンテナを作成します。
~/docker $ docker create -it --name ubuntu1804 ubuntu:18.04 69d0c633fa74809116d51089674896aa79fc86945faf9c5e2304e5650f991f75
- -i, –interactive アタッチしていなくても STDIN を開き続ける
- -t, –tty 疑似ターミナル (pseudo-TTY) を割り当て
- –name=”” コンテナに名前を割り当て
docker psにてコンテナの一覧の表示。
~/docker $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69d0c633fa74 ubuntu:18.04 "/bin/bash" 11 seconds ago Created ubuntu1804
- -a, –all 全てのコンテナを表示 (デフォルトは実行中コンテナのみ表示)
次にDockerfileで生成したイメージからコンテナを作成します。”–name dockerfile_ubuntu1804″がコンテナ名で、”dockerfile/ubuntu:dockerfile18.04″はイメージ名+タグ名です。
~/docker $ docker create -it --name dockerfile_ubuntu1804 dockerfile/ubuntu:dockerfile18.04 950d1bff9627d4d46f1be14611a5aff265983912d859736b3978986d59c52911
Docker psにてコンテナの一覧の表示。上のCONTAINER IDが”8bc163cce752″が、Dockerfileから生成したイメージから作成したコンテナです。中身はともにubuntu:18.04なので上も下も一緒です。
~/docker $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 950d1bff9627 dockerfile/ubuntu:dockerfile18.04 "/bin/bash" 10 seconds ago Created dockerfile_ubuntu1804 69d0c633fa74 ubuntu:18.04 "/bin/bash" 38 seconds ago Created ubuntu1804
コンテナの起動
docker startで、pullしたイメージ由来のコンテナを起動します。引数にコンテナID”69d0c633fa74″を指定していますが、コンテナ名の”docker start ubuntu1804″でも同じように起動できます。
~/docker $ docker start 69d0c633fa74 69d0c633fa74
起動すると、STATUSが”Up 3 seconds”となり、起動してからどれくらい経ったのかを確認できます。
~/docker $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 69d0c633fa74 ubuntu:18.04 "/bin/bash" 2 minutes ago Up 3 seconds ubuntu1804
次にDockerfile由来のコンテナを起動します。
~/docker $ docker start dockerfile_ubuntu1804 dockerfile_ubuntu1804
Dockerfile由来のコンテナは上、pulled由来のコンテナは下に表示されています。IMAGE IDは一緒ですが、CONTAINER IDは異なっています。
~/docker $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 950d1bff9627 dockerfile/ubuntu:dockerfile18.04 "/bin/bash" 6 minutes ago Up 2 seconds dockerfile_ubuntu1804 69d0c633fa74 ubuntu:18.04 "/bin/bash" 6 minutes ago Up 19 seconds ubuntu1804
起動したubuntuに入る
コンテナ上でubuntu:18.04が起動している状態なので、このubuntu:18.04にbashで入ることができます。引数はコンテナ名”ubuntu1804″。@以下はコンテナIDになっています。
~/docker $ docker exec -it ubuntu1804 /bin/bash root@69d0c633fa74:/# ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr root@69d0c633fa74:/# exit exit
CONTAINER IDでも入ることができます。
~/docker $ docker exec -it 69d0c633fa74 /bin/bash root@69d0c633fa74:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@69d0c633fa74:/# exit exit
イメージの取得からコンテナの起動まで一気に行う
イメージの取得(pull/Dockerfile)、コンテナの作成(create)、コンテナの起動(start)を別々に行ってきましたが、docker runを使うとこれらの作業を一気に行うことができます。コンテナ名を”run_ubuntu1804″として実行します。
~/docker $ docker run -it -d --name run_ubuntu1804 ubuntu:18.04 58eaa54983356453ec94bf505707eb8052bcf29c5648290e2dcb31fc1ba18f6b
- -i, –interactive コンテナの STDIN にアタッチ
- -t, –tty 疑似ターミナル (pseudo-TTY) を割り当て
- -d, –detach コンテナをバックグラウンドで実行し、コンテナ ID を表示
コンテナは一番上に、”run_ubuntu1804″として作成され、起動されました。イメージはすでにあるのでスキップしています。
~/docker $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 58eaa5498335 ubuntu:18.04 "/bin/bash" About a minute ago Up About a minute run_ubuntu1804 950d1bff9627 dockerfile/ubuntu:dockerfile18.04 "/bin/bash" 3 hours ago Up 3 hours dockerfile_ubuntu1804 69d0c633fa74 ubuntu:18.04 "/bin/bash" 3 hours ago Up 3 hours ubuntu1804
bashで入ることができます。
~/docker $ docker exec -it run_ubuntu1804 /bin/bash root@58eaa5498335:/# ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var root@58eaa5498335:/# exit exit
イメージ/コンテナの削除
全てのコンテナの停止。
~/docker $ docker stop $(docker ps -q) 61b37a2d141e
停止したコンテナはdocker container pruneで削除。
~/docker $ docker container prune WARNING! This will remove all stopped containers. Are you sure you want to continue? [y/N] y Deleted Containers: 950d1bff9627d4d46f1be14611a5aff265983912d859736b3978986d59c52911 69d0c633fa74809116d51089674896aa79fc86945faf9c5e2304e5650f991f75 Total reclaimed space: 69B
イメージはdocker image pruneで削除。
~/docker $ docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: untagged: dockerfile/ubuntu:dockerfile18.04 untagged: ubuntu:18.04 untagged: ubuntu@sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5 deleted: sha256:7698f282e5242af2b9d2291458d4e425c75b25b0008c1e058d66b717b4c06fa9 deleted: sha256:027b23fdf3957673017df55aa29d754121aee8a7ed5cc2898856f898e9220d2c deleted: sha256:0dfbdc7dee936a74958b05bc62776d5310abb129cfde4302b7bcdf0392561496 deleted: sha256:02571d034293cb241c078d7ecbf7a84b83a5df2508f11a91de26ec38eb6122f1 Total reclaimed space: 69.86MB
コメント