のぐそんブログ

暗いおじさんがシコシコ書くブログです。

Dockerが全くわからないので調べたメモ

Dockerのことが全くわからないので、少し調べたことをまとめてみました。

Dockerをインストール

Macの場合はInstall Docker for Macからインストールします。

アプリケーションのDockerを起動。

dockerコマンドが利用できるようになります。

docker 

初心者の初期設定

使いこなせるようになるまでは以下の設定で良さそうです。

Dockerの構成

いまだによく仕組みがわからないのですが、正しくはないと思いますがこんな感じでしょうか。

原則として、1コンテナに1プロセス(nginx、phpなどなど)にしたほうがよいらしいです。

イメージはどこから入手するのか?

よく使われるイメージは Explore Official Repositories に揃っているようです。

Dockerコンテナを作成&起動

イメージからdockerコンテナを作成&起動してみたいと思います。

//docker run -d --name {コンテナの名前} {イメージ名}

docker run --name sample nginx

docker psで起動中のコンテナを表示すると以下のようになりました。

-dをオプションとしてつけた場合、バックグラウンドで実行することができます。
つけない場合は、その後コマンドの実行が同じターミナルでできなくなります(別窓でターミナルを立ち上げれば実行か可能)。

localhostでアクセスする

nginxのコンテナを起動してもlocalhostで表示することはできません。
だたし、作成時に-pオプションでポートを転送するように指定することができるようです。

下はホストの80番ポートを、コンテナの80番ポートに転送した場合の表示です。

run -d -p 80:80 --name test nginx

localhostを表示すると以下のようになります。

8080のポートでアクセスしたい場合は、↓になります

run -d -p 8080:80 --name test nginx

コンテンナの中に入る

docker exec -it コンテナ名 /bin/bash

-iはホストの入力をコンテナの標準出力をつなげる。
-tはキーボードから入力した文字をコンテナ内のプロセスに送る

-itのオプションは、シェル(bash)を起動して使えるようにするというイメージになるのでしょうか。

/bin/bashは実行するコマンド。

必ずしも↑になるわけではないようです。
↓のようなエラーが出た際に/bin/shを実行すると起動できました。

exec: "/bin/sh": stat /bin/sh: no such file or directory

出るときは

exit

ホストのディレクトリをマウントする

コンテナ側のファイルをホスト側のファイルに同期します。
-vオプションを利用します。

run -d -p 80:80 -v ホストのフォルダ:コンテナのフォルダ --name test nginx

Dockerfileでイメージを作成する

①Dockerfileを作成

Dockerfileを作成する(手動でもOK)

tocuh Dockerfile

以下のような感じにする。

# どのイメージを基にするか
FROM php:7.2.7-apache
# 作成したユーザの情報
MAINTAINER Admin <admin@admin.com>
# RUN: docker buildするときに実行される
RUN echo "now building..."
# CMD: docker runするときに実行される
CMD echo "now running..."

②ビルドする

docker build -t sample/php .

-tはビルド成功時のメッセージを表示させる。

docker imagesで作成したイメージを確認できる。

③イメージからコンテナを作成する

コンテナを作成する際に、ポートの指定と、ファイルのマウントも行います。

$(pwd)はカレントディレクトリになります。

docker run -d -p 80:80 -v $(pwd):/var/www/html --name sample_php sample/php

④indexファイルを作成

カレントディレクトリにindex.phpを作成します。 このファイルが、コンテナの/var/www/htmlにマウント(同期)されます。

<h1>ハローワールド</h1>

localhostでアクセスする

↓の画面が表示される。

コマンド

コマンド 説明
docker version バージョン情報
docker info 動作状況
docker search {イメージ名} イメージを探す
docker pull {イメージ名} イメージを取得
docker rmi {イメージ名} イメージを削除
docker images 取得済みのイメージ一覧
docker run {イメージ名} コンテナの作成&起動
docker stop {コンテナ名} コンテナの停止
docker start {コンテナ名} コンテナの起動
docker restart {コンテナ名} コンテナの再起動
docker ps 実行中のコンテナ一覧  -aのオプションで停止中のコンテナも全て表示
docker rm {コンテナ名} コンテナを削除
docker log {コンテナ名} コンテナのログをみる

参考

初心者による初心者のためのDocker入門 その1 dockerコマンド編
Dockerの開発環境構築 (Mac + Docker + PHP + Apache)