Dockerのイメージを取得してコンテナを動かしてみる | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

前回の記事で、Windows向けのDocker Desktopをインストールしてみました。

今回は、このDockerを使って、イメージの実行などの基本的な方法を紹介します◎

 

前回の記事はこちら。Dockerのインストールを行いました。

https://ameblo.jp/bakery-diary/entry-12626747554.html

 

 

 

目次

1.イメージ、コンテナとは

2.環境

3.Docker Hubのアカウント作成とログイン

4.イメージを利用してみる

5.コンテナを利用してみる

6.イメージの探し方について

参考サイト

 

 

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からイメージを取得してみたいので、

まずは以下からアカウントを作る。

https://hub.docker.com/

 

アカウント作成自体は、メールアドレスやパスワードの設定など、よくある流れなので、説明は割愛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から探すことができる。

https://hub.docker.com/

 

ページの上部にある、虫眼鏡マークから、探したいイメージのキーワードを打ち込んで検索する。

 

今回はCentOSで検索してみた。

CentOSの公式が検索に引っかかったので、これをクリック。

 

CentOSのイメージの詳細ページに飛ぶ。

「Tags」というタブがあるので、これを開く。

 

Tagsタブは、タグの一覧を示してくれる。

どれを選ぶかはケースバイケースだが、今回はCentOS8を選んだ。

「docker pull イメージ名:タグ名」のコマンドも書いてくれているので、それをそのままコピペしてpullすると楽。

 

 

参考サイトさま

https://tech-lab.sios.jp/archives/19073

https://qiita.com/tifa2chan/items/e9aa408244687a63a0ae