見出し画像

Dockerの勉強をしました[第二弾]

勉強のメモです!!


ついに今回からコンテナを実行したりなんやかんやします!

頑張るぞ!!!😤

※この記事はDockerのインストールが完了している前提で進めます。


1:hello-worldコンテナを実行してみよう!

早速ですが、試しにhello-worldコンテナを実行してみましょう!

コンテナの実行はターミナルで行います。

スクリーンショット 2020-07-17 19.30.17

コンテナを動かすにはrunコマンドを使います。

$ docker run hello-world

runのコマンドの後ろにはイメージを指定します。

今回はhello-worldというイメージを取得してコンテナを動かしたいのでrunの後ろにはhello-worldがきます。

スクリーンショット 2020-07-17 19.36.05

するとHello from Docker!というメッセージと、このメッセージがどのようにして生成されたのかの説明がずらっと出てきます。

でも英語読むのめんどくさいですよね😭

なので日本語で説明してみようと思います!

ーーーーーーーーー

①docker run hello-worldと打つ

②DockerコマンドがDockerデーモンに接続してhello-worldのイメージを探す

③存在しなかった場合、インターネットを経由してDocker Hubというサーバにhello-worldイメージを取得しに行く

④取得したhello-worldイメージをPCに保存する

⑤保存したhello-worldイメージを元にコンテナを起動し、入力されたコマンドを実行する

⑥実行結果がターミナルに表示される

ーーーーーーーーー

ちなみにDockerデーモン上にすでにイメージが存在している場合、Docker Hubからイメージをダウンロードする必要がない為コンテナの起動が早くなります。

試しにさっきのコマンドをもう1回打ってみましょう!

$ docker run hello-world

どうですか?さっきより早く結果が表示されたんじゃないでしょうか?

やったー😆

ーーーーーーーーー

2:Docker runコマンドは複数のコマンドが合体している

さて、先ほどは試しにDocker runコマンドを打ってもらいました。

実はこのコマンド、3つのDockerコマンドが合体しているんです😎

正体はこいつらだ!!!

1.docker pull
2.docker create
3.docker start

1.pullコマンド

これはDocker Hub上のイメージを取得する為のコマンドです。

GitHubとか使ったことある人はわかると思います。

あれと同じ感じです😎

2.createコマンド

これはコンテナの作成を行うコマンドです。

3.startコマンド

これはコンテナを起動させるコマンドになります。

ーーーーーーーーー

3:Docker Hubって何ですか?😰

ざっくり言うとDockerのイメージの公開やダウンロードなどが行えるレジストリサービスのことです。

Docker Hubはホーム画面の右上のクジラのアイコンをクリックしてDocker Hubを選択することで簡単に移動することができます!

スクリーンショット 2020-07-17 22.43.42

それではDocker Hubに移動して画面上部にあるのExploreをクリックしてみてください。

そうするとこんな画面に飛んだと思います。

スクリーンショット 2020-07-17 22.47.52

ここではDockerイメージの検索や詳細を見ることができます。

それでは左上の検索バーにnginxと入れてみましょう!

スクリーンショット 2020-07-17 22.51.01

はい。nginxのイメージ一覧が出てきました。

いくつもあってどれを使えばいいのかよく分かりませんね....

こういう時はofficial imageを使いましょう。


それぞれのイメージの右上をみてみてください。

1つだけofficial imageと書いてあると思います。

スクリーンショット 2020-07-17 22.55.39

これがofficial imageです!


それではnginxのofficial imageをクリックして詳細をみてみましょう。

スクリーンショット 2020-07-17 23.00.52

するとこのようなページに移動したと思います。

それでは下にスクロールしてみてExposing external portという欄を確認してみてください。

スクリーンショット 2020-07-17 23.02.14

ここにはnginxのコンテナを立ち上げるためのコマンドがいくつか書かれています。

今回はExposing external portという欄のコマンドを使ってみましょう!

ーーーーーーーーー

4:コマンドの説明

それでは早速コンテナを立ち上げたいですが、その前にExposing external portに書かれているコマンドをみてみましょう。

$ docker run --name some-nginx -d -p 8080:80 some-content-nginx

これじゃあ何を書いてるのか分かりませんね😨

なので日本語で書いてみました。

$ docker run --name <コンテナ名> -d -p <ホスト側のポート番号>:<コンテナ側のポート番号> <イメージ名>

--nameの後ろには立ち上げたいコンテナ名を書きます。

コンテナ名は自由に決めることができますがすでに立ち上がっているコンテナと同じ名前はつけられません。


そのあとの-dはデタッチドモードというコンテナの実行をバックグラウンドで行えるものです。

つけなくてもコンテナを動かすことはできますが、そうすると他の操作ができなくなります😭

後で試してみましょう!


そのあとの-pはコンテナのポートをコンテナ外に公開するオプションです。

それでは実際にコンソールに入力してみましょう!

ーーーーーーーーー

5:nginxのコンテナを立ててみる

それではコンソールにこちらのコマンドを入力してみてください。

$ docker run --name study-nginx -d -p 8080:80 nginx

今回はstudy-nginxという名前のコンテナを立ち上げてみます。

ポート番号は8080番にしていますが、すでに8080番を使っている場合は他のポート番号で大丈夫です。


実行が終わると普段のコンソール画面に戻ってきたと思います。

それではブラウザを開いてlocalhostの8080番を検索してみましょう。

スクリーンショット 2020-07-17 23.29.11

このようなページが表示されたら成功です!

スクリーンショット 2020-07-17 23.29.40

それでは一旦コンテナを停止して、-dオプションなしで実行してみましょう。

コンテナの停止は

docker stopコマンドでできます。

$ docker stop study-nginx


停止できたらコンテナ一覧を表示します。

一覧を表示するにはdocker psコマンドを使います。

$docker ps


あれ?😨何も表示されない😱

スクリーンショット 2020-07-17 23.38.03

実はこのコマンド、現在実行中のコンテナしか表示させられません。


停止しているコンテナを一覧表示するには-aオプションをつけます。

$ docker ps -a

スクリーンショット 2020-07-17 23.40.32

今度はコンテナ一覧が表示されました!

一覧が表示できたら一番左のCONTAINER IDをコピーします。

このCONTAINER IDを使ってコンテナを一旦削除しましょう。


コンテナの削除はdocker rmコマンドで可能です。

$ docker rm <コンテナのID>


コンテナの削除ができたらもう一度停止しているコンテナの一覧表示をしてみてください。

何も出てこなければ成功です!


そうしたら、今度は-dオプションをつけずにnginxを立ち上げてみましょう。

$ docker run --name study-nginx -p 8080:80 nginx


どうですか?

-dをしなかった場合、フォアグラウンドで動作するため他の操作ができなくなります。

それではもう一度localhostの8080番にアクセスした後、コンソールを確認してみてください。


......どうですか?

-dオプションをつけなかった場合コンソールにはnginxのログが流れてくるようになります。


それではコンテナを終了しましょう。

デタッチドモードではない場合、Ctrl + Cで終了できます。

ーーーーーーーーー

まとめ

イメージの取得、コンテナの作成、起動ができる

$ docker run 


イメージの取得

$ docker pull


コンテナの作成

$ docker create


コンテナの起動

$ docker start


コンテナの停止

$ docker stop


起動中のコンテナの一覧表示

$ docker ps (-aオプションで停止中のコンテナの一覧表示)


コンテナの削除

$ docker rm


間違ってるところあったら教えて欲しいです🙇‍♂️

この記事が気に入ったらサポートをしてみませんか?