【Docker第6回】ハンズオン/Dockerのインストール・作成・起動・停止

【Docker第6回】ハンズオン/Dockerのインストール・作成・起動・停止

Dockerに入門しました。複数回に分けて備忘録として記載していきます。

本記事ではハンズオン/Dockerのインストール・作成・起動・停止までの対応を記載します。

【参考記事】


【関連記事】


インストール先の環境

開発環境として、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