このサイトは、只今WEB業界で活躍中のデザイナー、プログラマーの方々の情報を集めたweb統合情報サイトです。

Archives Details

2018年 Docker 使い方 まとめ その3

Docker

2018.12.17

この記事は最終更新日から1年以上が経過しています。

 

どもです。

前回の「2018年 Docker 使い方 まとめ その2」の続きになります。

Docker公式サイト

www.docker.com

Docker Hub

Docker Hubでアカウントを作成すると、作成したdocker イメージを、Docker Hubのレポジトリにpushすることができます。

レポジトリにpushすることで、公開したり共有が可能となっております。

 

docker hub

https://hub.docker.com/

 

Docker Hubへプッシュ

作成したdocker イメージをDocker Hubのレポジトリにpushしていきます。

Docker Hubでアカウントを作成したら、dockerコマンドでログインを行います。

 

レジストリサーバーにログイン

$ docker login

docker loginコマンドで、Docker Hubのログインが行えます。

コマンド入力後、Docker Hubで作成したアカウント名、パスワードを入力

Login Succeeded」のメッセージが表示すればログイン成功です。

そのほかにも、Quay.ioにもログイン可能となっております。

Quay.ioにログイン

$ docker login quay.io

 

Docker Hubにイメージをプッシュするルールとして以下のようになっております。

 

DockerHubにおけるタグ付けルール

<DockerID>/<イメージ名>:<タグ名>

 

タグ名は省略可能で、省略するとデフォルトで「latest」のタグになります。

 

$ docker tag docker-whale takayama/docker-whale:1.0.0

 

pushコマンド

$ docker push <DockerID>/<イメージ名>:<タグ名>

 

pullコマンド

$ docker pull takayama/docker-whale:1.0.0

上記はDocker Hubにpushしたイメージをpullとなります。

 

nginx イメージ webサーバー構築

Docker Hubには色々な公式イメージレポジトリが存在します。

今回は、nginxイメージを用いて、webサーバーを構築していきます。

nginx公式イメージは以下のページとなります。

 

dockerHub nginx公式

https://hub.docker.com/_/nginx

 

上記のページの Exposing external portに記述されているコマンドで実行が可能となります。

 

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

 

nginxのコンテナを立ち上げるコマンド

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

 

任意のコンテナ名を指定可能となっていて、コンテナ名で指定することでDockerコマンドを実行することが可能となります。

「-d 」は、デタッチドモードと言われるもので、 指定がなければ、フォワグランドで立ち上がるので、他の操作できなくなります。

「-p」は、ポート番号指定となります。

$ docker run —name test-nginx -d -p 8080:80 nginx

 

早速上記のdockerコマンドを実行すると、ローカルにdockerイメージがない場合は pullコマンドが行われ、

コンテナIDが表示し起動します。

無事起動できたら、ブラウザからアクセスして確認しましょう。

http://localhost:8080/

 

nginxのデフォルトページが表示したかと思います。

いとも簡単にnginxの環境が用意できました。

停止と削除のコマンドは以下の通りとなります。

 

停止

$ docker stop test-nginx

 

削除

$ docker rm test-nginx

 

「-d」なしで、フォワグランドで実行

$ docker run —name test-nginx -p 8080:80 nginx

上記の「-d」なしのdockerコマンドを用いて、フォワグランドで起動してみます。

起動後、再度 ブラウザで「http://localhost:8080/」をアクセスすると、アクセスログが表示します。

 

xxx.xx.x.x - - [13/Jan/yyyy:hh:mm:ss +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36" "-"

フォワグランドで起動したコンテナを停止する場合は「ctl + c」で終了できます。

 

バインドマウント

ボリューム

Docker Hub nginx公式

ttps://hub.docker.com/_/nginx

 

再び、nginx公式イメージのページを確認します。

Hosting some simple static content」の項目に以下のコマンドが記述されています。

こちらは、静的なhtmlページを配置するコマンド例となっております。

$ docker run —name some-nginx -v /some/content:/usr/share/nginx/html:ro nginx

先程、nginxを起動したコマンドに 「-v」オプションのコマンドを付与して起動するコマンドは以下の通りとなります。

$ docker run —name some-nginx -v /some/content:/usr/share/nginx/html:ro -d -p 8080:80 some-content-nginx

「-v」をみてみると

「-v /some/content:/usr/share/nginx/html:ro」

-v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション>

となっております。

「ro」 はリードオンリーとなり、読み取り専用のオプションとなります。

 

バインドマウント

$ docker run —name <コンテナ名> -d -v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション> -p <ホスト側のポート番号>:<コンテナ側のポート番号> <イメージ名>

 

「ホスト側のディレクトリ」のパスの指定は絶対パスとなります。

「コンテナ側のマウントポイント」では、nginxのデフォルトの公開ドキュメントルートを指定します。

Macの場合

-v /Users/<ユーザー名>/docker-test:/usr/share/nginx/html:ro

 

/Users/<ユーザー名>/は「~」に置き換えれます。

「ホスト側のディレクトリ」に、index.html ファイルを作成してテストしてみます。

$ mkdir ~/docker-test
$ vim ~/docker-test/index.html

index.html

<!doctype html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
        content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
web帳 docker test
</body>
</html>

web帳 docker testと記述しただけのhtmlファイルを用意。

以下のdockerコマンドを実行。

$ docker run --name test-nginx -v ~/docker-test:/usr/share/nginx/html:ro -d -p 8080:80 nginx

 

起動後、ブラウザで「http://localhost:8080/」をアクセス。

上記の様に「~/docker-test」内に作成した「index.html」が表示すれば成功です。

 

Docker file COPY

dockerコマンドの「cp」や、DockerFileの「COPY」コマンドを見ていきます。

まずは、nginxのイメージを使ってコンテナを起動します。

$ docker run —name tmp-nginx —rm -d nginx

「–rm」オプションは、コンテナを停止すると、コンテナも削除されるオプションです。

コンテナを削除せず、同名のコンテナを使用できないので、その際はコンテナを削除する必要がありますが、

「–rm」オプションを付与してコンテナ起動すると、コンテナを停止と同時にコンテナも削除され便利なので削除が必要な場合は付与しましょう。

 

docker cp コマンド

それでは、先程起動した nginxのコンテナから、設定ファイルを取得するため

dockerの 「cp」コマンドを使用していきます。

それぞれ「ホストマシン→コンテナ内」「コンテナ内→ホストマシン」の指定は以下のようになります。

 

ホストマシンのファイルをコンテナ内にコピーする場合

$ docker cp <ホスト上のコピーしたいファイルのパス> <コンテナ名 or ID>:<コピー先のパス>

 

コンテナ内のファイルをホストマシンにコピーする場合

$ docker cp <コンテナ名 or ID>:<コンテナ上のコピーしたいファイルのパス>:<コピー先のパス>

 

それでは、起動しているnginxのコンテナから、設定ファイルを取得してみます。

上記で作成した、docker-testディレクトリに移動。

 

$ cd docker-test/

 

nginxの設定ファイルをとってくる

$ docker cp tmp-nginx:/etc/nginx/conf.d/default.conf ./

起動している「tmp-nginx」からnginxの設定ファイルである「/etc/nginx/conf.d/default.conf」をコピーし、

カレントディレクトリの「docker-test」にコピーしました。

 

$ cat default.conf

取得したファイルが参照できるかと思います。

listen 80;をlisten 8080;に変更してみます。

 

$ vim default.conf
listen 8080;

 

Dockerfileでコンテン内に適応

最後に、先程取得したnginxの設定ファイルであるdefault.confを、

nginxの設定ファイルパスにコピーできるようにDockerfileを作成していきます。

先程取得した「default.conf」と、同ディレクトリに配置します。

Dockerfileの記述は以下の通り。

 

$ vim dockerfile

 

Dockerfile

FROM nginx:latest
COPY default.conf /etc/nginx/conf.d/default.conf

作成できましたら、ビルドします。

ビルド

$ docker build -t nginx:1.0.0 .

 

ビルド成功しましたら、docker runコマンドで起動します。

 

nginxコンテナを起動

$ docker run —name web -p 8080:80 —rm nginx:1.0.0

起動後、ブラウザで「http://localhost:8080/」をアクセス。

上記のままだとコンテナ内のポート80番にアクセスしているので表示しないのが確認できるかと思います。

こちらを「8080」に変更します。

$ docker run —name web -p 8080:8080 —rm nginx:1.0.0

再度、ブラウザで「http://localhost:8080/」をアクセス。

nginxのデフォルトページが表示し、nginxのデフォルトポートが「8080」に変更されているが確認できたかと思います。

と言ったわけで、続きは次回にでも。

ではではぁ。

Comment

Related Article

2018年 Docker 使い方 まとめ その3

2018.12.17

2018年 Docker 使い方 まとめ その2

2018.12.16

2018年 Docker 使い方 まとめ その1

2018.12.15

忙しい人向けの Docker Composeで作る nginx + PHP7-fpm + mysql + phpMyAdmin の環境構築

2017.02.13

CATEGORY LIST

LATEST NEWS

Mac VSCodeで、SFML C++開発環境を作る。

C++

2024.09.09

Rust-SDL2 examplesをすべて試す

Rust

2024.09.01

JavaScriptで、DOMを放り投げる処理

JavaScript

2024.07.27

Rustで創る MOS 6502 CPU その2

Rust

2024.07.23

Rustで創る MOS 6502 CPU その1

Rust

2024.07.19

汎用 3D mesh/model viewerを求め。と、簡単に、FBXファイルをglTF(glb)に変換ツールを求め。

C++

2024.06.06

M1 Macで、OpenGL GLUTを使ってコンパイルする

C

2024.04.27

Rust - Actix Web mongo ユーザー登録 JWT認証

Rust

2024.03.24

Rust - Actix Web JWT 認証認可 APIの作成

Rust

2024.02.25

Rust - Actix Web × JSON 静的ファイルをAPIで返却

Rust

2024.01.19

Rust - Actix Web × MongoDB環境をサクッと起動

Rust

2024.01.18

5分で学ぶ RustでWave Function Collapse (波動関数崩壊アルゴリズム)

Rust

2024.01.15

RANKING

Follow

SPONSOR

現在、掲載募集中です。



Links

About Us

WEBデザイナーの、WEBデザイナーによる、WEBデザイナーの為のサイト。「みんなで書こう!」と仲間を募ってみたが、結局書くのは自分だけとなってしまいました。日々のメモを綴っていきます。

Entry Profile

Graphical FrontEnd Engineer
- Daisuke Takayama

MAD CITY 北九州市で生まれ育つ。20代はバンド活動に明け暮れ、ふと「webデザイナーになりたい。」と思い、デジタルハリウッド福岡校入学。卒業後、数々の賞を受賞、web業界をざわつかせる。
現在、主に、ゲーム制作中心に港区六本木界隈で活動中。

FOLLOW US