Dockerに入門しました。複数回に分けて備忘録として記載していきます。
本記事ではハンズオン/Dockerのインストール・作成・起動・停止までの対応を記載します。
【参考記事】
- 【Udemy】米シリコンバレーDevOps監修!超Docker完全入門(2022)【優しい図解説とハンズオンLab付き】
- 【Udemy】現役Webエンジニアが教えるPHP,MySQL,dockerを使用したフルスクラッチ開発
【関連記事】
- 【第1回】Dockerインストール→Linux(CentOS7)を起動
- 【第2回】Linuxの概要/GCPでUbuntuをインストール
- 【第3回】WEBサーバを構築(Nginx)/ネットワークの概要
- 【第4回】WEBアプリ構築/Dockerでの環境構築準備
- 【第5回】Dockerの概要
- 【第6回】Dockerのインストール・作成・起動・停止
- 【第7回】PHPの開発環境を構築(PHPとApacheのみ)
- 【第8回】PHPの開発環境を構築(docker-composeで複数コンテナを一括で起動)
- 【第9回】PHPの環境構築_その2_(環境構築自動化)
インストール先の環境
開発環境として、MacにDockerをインストール
Dockerのインストール
公式手順に従ってインストールします。
>> 【Docker公式】概要説明とセットアップ
こちらに簡易手順をまとめました。
>> 【参考手順】Dockerのインストール
ハンズオン/DockerでUbuntuのコンテナを起動し、Hello Worldを表示
# cmd
$ docker run ubuntu:20.04 echo hello world
# result
Unable to find image 'ubuntu:20.04' locally
20.04: Pulling from library/ubuntu
455c32d33260: Pull complete
Digest: sha256:4a45212e9518f35983a976eead0de5eecc555a2f047134e9dd2cfc589076a00d
Status: Downloaded newer image for ubuntu:20.04
hello world
# docker imageがDL
# Hello Worldが表示された
# err
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
→ DockからDockerのアプリを起動
→ Docker daemonを起動し、再度実行
ローカルにあるイメージの一覧
# cmd
$ docker images
# result
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 c9eb527b091d 4 weeks ago 65.7MB
Dockerイメージとは
- Dockerコンテナの動作環境となるテンプレートファイル
- OSやアプリケーションからアプリケーションの実行に使われるコマンド、メタデータまで含まれる
- Dockerコンテナを実行するためには、Dockerイメージが必要
- クラウド上のレジストリ「Docker Hub」からダウンロード/自分で作って使うこともできる
イメージの取得
# cmd
# ubuntuのイメージを取得する例
$ docker pull ubuntu
# Bash を起動
$ docker run -it ubuntu:20.04 bash
# result
# プロンプトが帰ればOK
ハンズオン/コンテナNginxのコンテナを起動しHello World
Nginxのdocker-imageを取得
# cmd
$ docker pull nginx
# 確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 7ace790b8bce 42 hours ago 65.7MB
nginx latest 114aa6a9f203 42 hours ago 135MB
次にNginxサーバーのコンテナを起動してみる(コンテナを単体で起動)
# cmd
$ docker run -p 80:80 nginx
# イメージ名 nginx
# イメージからコンテナをrunする
# 80:80 ホスト側:コンテナ側のポートをマッピングしている
# ホスト側は80が使用中であれば、他の番号をマッピングしてもOK
# nginx側は80のままでOK
エラー対応
# ERR
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 -> 0.0.0.0:0: listen tcp 0.0.0.0:80: bind: address already in use.
# 上記のエラー:ホスト側で80ポートはすでに使用されている → ホスト側のポートを変えて確認してみる
$ docker run -p 81:80 nginx
# 確認方法1
ブラウザに以下のアドレスを入力
「http://localhost:81」 # 上記でホスト側に設定したポートを記載する
# result
以下の画面が表示されればOK
Ctrl + C でプロセスをkillするとSTDIN(標準入力画面)に戻る
画面ショット
確認方法2
# curlコマンドで確認
# 別なターミナル画面を起動
# コマンド発行後、HTMLが表示されればOK
$ curl http://localhost:81
Nginxをバックグラウンド(デタッチモードで起動)
# こちらの方法だと、別なターミナルを起動する必要はない
$ docker run -d -p 81:80 nginx
# 確認が終わったらコンテナを停止する
# コンテナIDを取得
$ docker ps
# コンテナIDを使用して、次のコマンドを実行して、コンテナを停止させる
$ docker stop
# 事後確認
$ docker ps
curlコマンド発行時の画面例
Dockerの使われ方
開発環境
WindowsやMacなどのHost OSの上で使われる
本番環境
多くはLinux OS上でデプロイされる
ステータスの確認
# cmd
$ docker ps #
$ docker ps -a #
コンテナの停止
$ exit
コンテナの再起動
$ docker start
コンテナの停止
$ docker stop
コンテナの削除
$ docker rm
$ docker rm # 複数指定
$ docker rm -f # 強制削除
$ docker rm `docker ps -a -q` # 一括削除
# example
# 全てのコンテナを確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4e63ba6fdbaa nginx "/docker-entrypoint.…" 5 minutes ago Exited (0) 3 minutes ago musing_poitras
5c975a1c52ec nginx "/docker-entrypoint.…" 5 minutes ago Created upbeat_chaum
271e22673af7 ubuntu:20.04 "bash" 9 minutes ago Exited (127) 6 minutes ago loving_chaplygin
8e9d5dbf82bb ubuntu:20.04 "echo hello world" 10 minutes ago Exited (0) 10 minutes ago flamboyant_williamson
# 全てのコンテナを削除する
$ docker rm `docker ps -a -q`
4e63ba6fdbaa
5c975a1c52ec
271e22673af7
8e9d5dbf82bb
# 事後確認
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
イメージの削除
# cmd
$ docker image rm
$ docker image prune
# コンテナ削除 → イメージ削除の順番が望ましい
# example
# 事前確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu 20.04 7ace790b8bce 42 hours ago 65.7MB
nginx latest 114aa6a9f203 43 hours ago 135MB
# イメージ削除
$ docker image rm
コンテナが存在する場合、ERRする場合あり
# 使用していないイメージを一括削除
# コンテナから参照されておらずタグもないイメージを削除
$ docker image prune
# コンテナに関連付けられていないイメージを全て削除
# 以下のように「-a(–all)」オプションを追加
docker image prune -a
# 再度確認
$ docker images
# example
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:
:
:
Total reclaimed space: 200.3MB
# 事後確認
# docker imagesで何もリストされないことを確認
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE