Dockerとは
Dockerとは、コンテナ型の仮想環境を作成できるもの。ちなみにGo言語で書かれている
ミドルウェアのイストールや各種設定をコード化して管理しており、共有しやすいという利点がある。
Dockerイメージとは
コンテナを実行するために必要なファイル。
レイヤー構造で構成されており読み取り専用となっていおり、レイヤーはコマンドを実行するたびに積み重ねられる。
Dockerイメージをもとにコンテナを起動すると、コンテナレイヤーというレイヤーができる。コンテナレイヤーは読み書き可能なレイヤーとなっている。
このコンテナレイヤーで過去のレイヤーで追加したファイルを削除することもできるが、履歴として過去のレイヤーにファイルは残り続ける。
Dockerコンテナとは
DockerコンテナとはDockerイメージを元に作成される仮想環境。
基本的にDockerコンテナは停止した後も停止ステータスとして残りつづける。
Docker Hubとは
Docker Hubとは、Dockerイメージを公開しているレジストリサービス
Dockerのインストール
公式サイトでDockerをインストールします。
コンテナの起動してみる
Hello woldというメッセージを表示する簡単なイメージを動かす。
docker run hello-world
docker run のコマンドは、以下の3つのコマンドを一度に実行するコマンドである。
- docker pull :イメージの取得
- docker create :コンテナの作成
- docker start :コンテナの起動
ローカルPCに常駐しているDockerデーモンがhello-worldというイメージを探しに行く。
ローカルPC上にイメージがない場合、DockerデーモンはDocker Hubにイメージを探しに行く(docker pull)
イメージをダウンロードして作成(docker create)、イメージからコンテナ起動する(docker start)
すでに、ローカルPC上にイメージが存在している場合は、そのイメージからコンテナを起動するので処理は早くなる。
Dockerイメージの基本操作
ローカルにあるイメージを確認
docker images
ローカル上にあるイメージにタグ付けし、新しいイメージ名でイメージを作成したい場合
docker tag {ローカルにあるイメージ名} {新しいイメージ名}:{タグ名}
イメージの詳細情報
docker inspect {イメージ名}
イメージの削除
docker rmi {イメージ名}
イメージの強制削除の場合、-fを付ける
docker rmi -f {イメージ名}
イメージの作成
イメージを作成するためには、まず作業ディレクトリ内にDockerfileという名のファイルを作成する。
Dockerfileからイメージを作ることをイメージビルドという。
まず、Dockerfileを編集する。
各行へ「命令 引数」といった書式で書いていく。
そして、各命令ごとに新しいレイヤーが追加されていく。
下記の命令ではwhalesayイメージへ新たに3つのレイヤーが追加されたこととなる。
FROM docker/whalesay
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune | cowsay
各命令について説明する。
FROM
イメージを作成する際のベースとなるイメージを指定する命令。今回はwhalesayイメージというコンソールでクジラが話しているアスキーアートを表示するイメージ。whalesayイメージは、Linux ディストリビューションのUbuntuがイメージのベースとなっている。
RUN
イメージビルド時に実行するコマンドを指定する命令。
CMD
コンテナ起動時に実行するコマンドを指定する命令。
Dockerfileからイメージビルド
Dockerfileからイメージをビルドするには以下のコマンドを実行。
docker build -t test-build .
-tオプションは、ビルドしたイメージに名前を付けるオプション。
最後のピリオドは、ビルドコンテキスト指定でイメージを作成する際のファイルなどの範囲をあわらす。
ピリオドの場合は、カレントディレクトリの意味。
ビルドを実行したら、docker images
でイメージを確認できる。
キャッシュを読み込みたくない時は、–no-cacheオプションを使用する。
docker build --no-cache -t test-build .
イメージからコンテナの実行
イメージからコンテナを実行。
docker run test-build
実行すると、クジラのアスキーアートの吹き出しに名言が表示されて、実行するたびにその名言が変わるのが確認できる。
NginxイメージでWebサーバーをたてる
NginxイメージでWebサーバーたてていく。
DcokerHubのメニューの「Explore」から検索に行き、「nginx」と検索してNginxのイメージを見つける。
Nginxイメージの説明の中のExposing external portにある以下のコマンドを参考にする。
docker run --name some-nginx -d -p 8080:80 some-content-nginx
–nameオプションは起動するコンテナ名に名前をつけるオプション。
-dオプションはデタッチモードのことで、コンテナをバックグラウンドで起動するオプション。
-pオプションはホストとコンテナのポートマッピングを設定するオプション。ここでは、8080はホストマシンが外部から受けるポート番号。80はコンテナにマッピングされるポート番号。
ローカルでコンテナ起動している場合、localhostの8080番ポートにアクセスすればコンテナの80番ポートに転送される。
Nginxコンテナの起動
以下のコマンドでnginxコンテナの起動。
docker run --name test-nginx -d -p 8080:80 nginx
ブラウザでlocalhostの8080番ポートにアクセスし確認。
http://localhost:8080/
Nginxのデフォルトページが確認できればOK。
コンテナ停止とともにコンテナを削除
Dockerのコンテナは、コンテナが停止しても停止ステータスとして残り続ける。
コンテナが停止した時点でコンテナを削除したい場合は、–rmオプションを付ける。
docker run --name test-nginx --rm -d nginx
ディレクトリのマウント
ホスト側のディレクトリをコンテナ側でマウントするには、DockerHubのNginxイメージの説明の中のHosting some simple static contentにある以下のコマンドを参考にする。
docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -d nginx
-vオプション部分のコロン区切りになっているところでマウントするティレクトリを指定する。
はじめのコロンまでがホスト側のディレクトリのパスで次がコンテナ側ディレクトリのパス。最後のroはReadOnlyの略で、読み取り専用でマウントするオプション指定。
マウントしてNginxコンテナの起動
以下のコマンドでマウントしてnginxコンテナの起動。
docker run --name mount-nginx -v /Users/user/mount-test/html:/usr/share/nginx/html:ro -d -p 8080:80 nginx
ホスト側のディレクトリ(/Users/user/mount-test/html)は任意で作成して、index.htmlなどを配置しておく。
ブラウザでlocalhostの8080番ポートにアクセスし確認。
http://localhost:8080/index.html
index.htmlの内容が表示されればOK。
コメント