前回の記事で、Windows向けのDocker Desktopをインストールしてみました。
今回は、このDockerを使って、イメージの実行などの基本的な方法を紹介します◎
前回の記事はこちら。Dockerのインストールを行いました。
https://ameblo.jp/bakery-diary/entry-12626747554.html
目次
2.環境
1.イメージ、コンテナとは
コンテナとは、1つのOS上に乗っかった、独立したプロセスの実行空間。
…と言葉で説明しても分かりにくいので、図をどうぞ。
各コンテナは、1つのOS(Windows、Mac、Linuxなど)の上に乗っかっているが、
それぞれのコンテナは独立して存在し、動作する。
独立しているからこそ、あるコンテナで異常が発生して動かなくなっても、
他のコンテナは原則その影響を受けず動き続けることができる。
※コンテナは、仮想化技術と比較して理解するのが多分1番分かりやすいけど、
それを話すと長くなるため、他サイト様をググってくださいm(__)m
で、コンテナを作るための土台部分、「こんなコンテナを作りたいですよー」という設計図・指示書の役割を果たしているのが、イメージとなる。
オブジェクト指向でいうと、クラスとオブジェクト(インスタンス)の関係が、
イメージとコンテナの関係に近いと思う。
以降、実際に、イメージからコンテナを作ってみたい。
大まかな流れとしては、
①イメージをDocker Hubというところから取得する
②取得したイメージをもとにコンテナを作成・実行する
となる。
※①の代わりに、自分でイメージを作る方法もあるが、高度なので今回は見送る。
2.環境
・Windows10 Home(バージョン1903)
・Docker Desktop for Windows(Docker Engine v19.03.13-beta2)
3.Docker Hubのアカウント作成とログイン
実際にイメージを取得してコンテナを動かす前に、Docker Hubのアカウント作成およびログインを行う。
Docker Hubとは、ユーザの作成したコンテナイメージを全世界で共有できるサービスのこと。
Git HubのDockerバージョンだと思えばOK。
Docker Hubへは、自分で作ったものを公開することもできる一方、
アカウントがあれば誰でもイメージをアップロードできるので、全てのイメージが必ずしも信頼できるとは限らない。
実際にDocker Hubからイメージを取得する時は、信頼できる製造元かどうかきちんとチェックする必要がある。
今回の記事では、このDocker Hubからイメージを取得してみたいので、
まずは以下からアカウントを作る。
アカウント作成自体は、メールアドレスやパスワードの設定など、よくある流れなので、説明は割愛m(__)m
アカウントを作ったら、コマンドプロンプトで「docker login」コマンドを実行し、ログインしておく。
ログインしないと、イメージの取得の際などに、
「unauthorized: incorrect username or password」というエラーが出てイメージを取得できない。
$ docker login
Authenticating with existing credentials...
Stored credentials invalid or expired
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username : xxxxxx # ←ユーザ名とパスワードを聞かれるので、作成したものを打ち込む
Password:
Login Succeeded
4.イメージを利用してみる
ログイン出来たら、さっそくイメージを取得していきたい。
今回はCentOS8のイメージを例に進めていく。
◎イメージの取得および実行
以下のrunコマンドを、コマンドプロンプトから実行。
$ docker run centos:centos8
「centos:centos8」の部分は、「イメージ名:イメージのタグ名」という並びにする。
タグ名は、イメージのバージョンのようなものだと考えてOK。
※イメージ名とタグ名の探し方は、この記事の最後に記載しています。
出力結果例:
Unable to find image 'centos:centos8' locally
centos8: Pulling from library/centos
3c72a8ed6814: Pull complete Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Downloaded newer image for centos:centos8
出力結果から分かる通り、runコマンドを使うことで、
イメージを取得(pull)したうえで、それを実行してくれる。
取得元(イメージが存在している場所)は、最初にアカウントを作ったDocker Hubのリポジトリとなる。
なお、イメージを1度取得しておけば、2回目以降のrunコマンドでは、すぐにイメージが実行される。(デフォルトの動作)
◎イメージの取得
イメージを実行せずに、まずは取得だけしたい場合は、pullコマンドを利用する。
$ docker pull centos:centos8
出力結果例:
centos8: Pulling from library/centos
Digest: sha256:76d24f3ba3317fa945743bb3746fbaf3a0b752f10b10376960de01da70685fbd
Status: Image is up to date for centos:centos8
docker.io/library/centos:centos8
◎イメージの一覧確認
取得済みイメージ(ローカルにあるイメージ)は、imagesコマンドで一覧確認できる。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos centos8 0d120b6ccaa8 7 weeks ago 215MB
◎イメージの削除
取得したイメージを削除したい場合は、コマンドを使う。
ただし、当該イメージを利用したコンテナが存在していると、削除できない。
そのため、以下のようなエラーが出た場合は、先にコンテナを削除してから、イメージを削除する。
・エラー例
Error response from daemon: conflict: unable to delete 0d120b6ccaa8 (must be forced) - image is being used by stopped container febe248bdf8a
・イメージの削除 $
削除も、取得時と同様、イメージ名とタグ名を指定して行う。
$ docker rmi centos:centos8
5.コンテナを利用してみる
◎コンテナを作成
イメージの実行(run)が、すなわちコンテナの作成となる。
調子に乗って同じイメージでいっぱいrunすると、その分だけコンテナもたくさんできるので、
必要数だけ実行するようにしたい。(不要なコンテナは削除できるけど面倒なのでw)
$ docker run centos:centos8
◎コンテナを作成して実行状態のままとする
単にコンテナを作成(run)すると、起動・実行はしてくれるものの、すぐに停止状態になってしまう。
そのため起動後、実行状態を維持したい時は、「-idt」オプションを付けて実行するとよい。
$ docker run -itd centos:centos8
◎コンテナの一覧確認
・実行状態のコンテナの一覧を表示
$ docker ps
・停止状態のコンテナを含む、全コンテナを表示
$ docker ps -a
◎コンテナの停止
$ docker stop コンテナID
コンテナIDは、1つ上で紹介した、「コンテナの一覧確認」コマンド(docker ps)で確認できる。
イメージの名前を指定するわけではないため注意。
$ docker ps
CONTAINER ID IMAGE COMMAND ・・・(後略)
3fee5eb6ca47 centos:centos8 "/bin/bash" ・・・(後略)
# ↑こいつをコピペして、コンテナIDとして指定
◎コンテナの削除
$ docker rm コンテナID
コンテナIDの調べ方は、「コンテナの停止」に書いた内容に同じ。
ここまでが最低限の、イメージとコンテナの利用方法。
実際にコンテナ上で、自分の作ったサービスを動かしてみたいけど、そもそも自分の作ったサービスがない…w
コンテナの詳細の勉強のためにも、気長に何か作ってみようかな。。
最後に、Docker Hubのイメージとタグ名を探す方法をご紹介。
6.イメージとタグの探し方
◎CUIで探す
以下のコマンドで、キーワードにあったイメージ名を探せる。
$ docker search 検索キーワード
ただしコマンドでは、タグ名の一覧までは表示されない。
そのため基本的には、次のGUIで探す方法をお勧めする。
◎GUIで探す
Docker Hubから探すことができる。
ページの上部にある、虫眼鏡マークから、探したいイメージのキーワードを打ち込んで検索する。
今回はCentOSで検索してみた。
CentOSの公式が検索に引っかかったので、これをクリック。
CentOSのイメージの詳細ページに飛ぶ。
「Tags」というタブがあるので、これを開く。
Tagsタブは、タグの一覧を示してくれる。
どれを選ぶかはケースバイケースだが、今回はCentOS8を選んだ。
「docker pull イメージ名:タグ名」のコマンドも書いてくれているので、それをそのままコピペしてpullすると楽。
参考サイトさま
https://tech-lab.sios.jp/archives/19073
https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae