雑食系オンラインサロンにてDockerの重要性を理解しましたので、
このたび、ポートフォリオづくりの流れで実装していきます。
本稿は、
DockerHubアカウント取得 → DockerDesktop(mac)インストール → 操作の練習
という流れです。
自分と同じように、
何していいかわからないゼロスタートの方になるべくわかるようにしたいと思っています。
前提
macOS : Catalina 10.15.3
ruby : 2.5.1
Rails : 5.2.4.1
ターミナル使用
Docker version 19.03.8
では、はじめましょう!
1.Dockerをインストールする
・Docker for Macをインストールする
・DockerHubのアカウントを作ってログイン、DockerHubからimageをダウンロードします。
・DockerHubのURLはこちら
https://hub.docker.com/editions/community/docker-ce-desktop-mac
サインインしたら、「Get Docker」ボタンを押します。
ダウンロードを終えると以下の指示がありますので、Dockerをアプリフォルダに移します。
Dockerがインストール完了できたか、ターミナル上で docker version コマンドを実行します。
docker version
こんな感じになります。
![Last login.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F617331%2F473b05f9-ad22-e3e7-a4a5-b73642c13aee.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=8ae7a5a6913dd724c2605fdc2c8db46c)
2.Dockerコマンドでコンテナイメージを取得する
コンテナを作成する際、Dockerfileを作成しなくともコマンドだけでコンテナの起動が可能です。
Docker Hub上に存在する「Nginx(エンジンエックス)」 のコンテナイメージをローカルにPULLしてみます。
Nginx(エンジンエックス)は本番環境で使用するフリーWebアプリケーションサーバーです。
当方は、デプロイでよくお世話になっています。
・Docker Hub上で「Nginx」 を検索すると PULLコマンドが右の黒いボックスに出てきます。

![Explore.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F617331%2F61898c8e-93b1-dfa9-1f80-42233f7c271b.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1c7bfe0eb22839af9d286df8eca96865)
コマンド「docker pull nginx」をターミナル上にコピペして実行してみます。
docker pull nginx
docker imagesコマンドを実行してイメージを取得できているか確認します。
docker images
3.取得したコンテナイメージを「 runコマンド 」で起動する
docker run -d -p[ホスト側ポート]:[コンテンナ側ポート][タグ名]
-d : バックグラウンドでコンテナ起動
-p : ポートの指定 ホスト側は localhostポート番号 となります
(railsでlocalhost:3000打ちますよね、ご存知の方は多いかと思います、それです)
タグ名 : nginx
任意で、タグ名の前に「 test 」というコンテナネームをつけてみました。
ホスト側のポート番号を8081 →localhost:8081
コンテンナ側ポート番号を80 にして
「runコマンド」 を実行してみます。
docker run -d -p 8081:80 --name test nginx
ブラウザで URLに 「localhost:8081」 と入力しますと表示されました。起動してるっぽいけど?

では、以下のコマンドでコンテナの状態を見てみます。
docker ps -a
or
docker container ls
真ん中あたり 「STATUS が Up」 になっていますので、起動しています。

4.起動しているコンテナを停止する
以下のコマンドでコンテナを停止させてみます。
docker stop [コンテナID]
or
docker container stop [コンテナ名]
今回は、コンテナ名で実行してみます。
docker container stop test
ぱっと見、よくわかりませんので、以下のコマンドで状態を確認します。
docker container ls
or
docker container ls -a
コマンド docker container ls -a を見ると、
STATUS が Exited(終了しました) なので、停止したようです。
![[user@keisukeagamiAir ~ docker container 1s.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F617331%2F8e22573c-872b-1f54-5ec6-5d09b966e647.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=1dde40929bd4c03df078c868e75cd03f)
ブラウザで localhost:8081 と入力しますと、こうなりました。
![ZOH1HE77EzTtA.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F617331%2F5d899f63-75c4-31e6-6220-5f032b5d476a.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=afc480a78511e1d82757ef40749f2375)
これでコンテナは停止していることがわかります。
5.停止したコンテナを削除する
今回は、もう必要ありませんのでコンテナを削除します。
docker rm [ コンテナID ] カッコは要りません
削除したいコンテナのIDを確認します。
docker container ls -a

削除したいコンテナのIDがわかったので、削除コマンドを実行します。
docker rm c6d60e5c8239
docker container ls -a
無事削除できたようです。
6.コンテナイメージを削除する
コンテナを削除できましたので、あとは残っているコンテナイメージまで削除します。
docker images を実行してコンテナイメージの状態を確認します。
docker images
イメージを削除するコマンドを実行します。
docker image rm [ image名 or imageID ] カッコは不要です
今回はImageIDを使ってみます。
docker image rm ed21b7a8aee9
実行します。
続いて、削除できたか確認します。
docker images
無事、イメージを削除できました。
#7.まとめ
1. DockerHub からimage(コンテナイメージ)を取得する
・image取得コマンド: docker pull [image名]
・オブジェクト指向で例えると、image は クラス (例:"くるま"という概念の設計図)
・コンテナの素になるもの
2. docker run コマンドを実行して、image(コンテナイメージ)からコンテナ(contaier)ができる
・オブジェクト指向で例えると、container は インスタンス (例:"くるま"概念から作った"トヨタ車"の設計図)
・コンテナはイメージから作られる実際の動作環境
・原則1コンテナ1アプリ
・コンテナでは環境変数やポートなどさまざまな設定ができるようになる
3.もし、いらなくなったら、コンテナを停止して削除 → コンテナの素のイメージも削除する
・コンテナの停止コマンド: docker container stop [コンテナID or コンテナ名]
・コンテナの削除コマンド: docker rm [コンテナID]
・イメージの削除コマンド: docker rmi [イメージID]
#8.最後に
当方、
実務未経験+初学者+テッ○キャンプ卒業+転職活動中であります。
初めての投稿です。
この先のdocker実装を進めつつ、わかりやすい記事を寄稿していきたいと考えています。
・参考にさせていただいた記事です。
**DockerをMacにインストールする(更新: 2019/7/13)
本当にありがとうございました。
##ローカル・Dockerで開発環境を整えるまでの続編
②Dockerを初めて導入してRails sする (2020.4時点)
③Docker MYSQLにデモデータ(seed_fu)を投入する!(2020.4時点)
④ローカルDocker環境でデータ永続化、entrypointでseed_fuをやり直しする(2020.4.時点)
⑤AWS仮想サーバを利用する、AWSアカウント作成 + EC2インスタンス作成(2020.4時点)
こちらも続けて見ていただけると流れがわかると思います。