Dockerfile / DockerCompose メモ

公開イメージをpull
公開イメージ+Dockerfileをbuildしオリジナルイメージを作成
オリジナルイメージをrunしてコンテナとして起動
(コンテナは一つのプロセスとして動作している)

Dockerコマンド

ビルド:
ベースイメージに対して機能を加えて独自のイメージを作り出す

docker build . -t イメージ名
カレントディレクトリのdockerfileを参照
tオプションで名前を指定する。

コンテナ実行:
docker run イメージ名

Dockerfileファイル命令

FROM:
ベースイメージの設定

MAINTAINER:
製作者

ENV:
環境変数
コンテナ用の環境変数

ARG:
環境変数
ビルド用(Dockerfile内)一時的な環境変数

WORKDIR:
作業ディレクトリ

RUN:
コマンド実行(イメージ作成時)

CMD:
コマンド実行(コンテナ実行時)

EXPOSE:
ポート解放
(docker run -p のみでポートは開く)

USER:
ユーザー切り替え

DockerCompose.yml命令

設定値は「:」
文字列は「’」「”」
複数の値は「-」
コメントは「#」

Docker Compoesごとに独立したネットワークになる。

version:
バージョン

services:
コンテナの名前定義

volumes:
コンテナが利用するボリューム定義

networks:
コンテナが利用するネットワーク定義

・サービスの命令

iamge
利用するイメージを指定する。

Dockerfileを利用する場合、build
(ymlから相対パスで指定)

volumes
ホスト:コンテナと記述する。

restart
docker run -d –restart
と同じ

depends_on
compose up/down
したときに指定したサービスが先に起動/終了するようになる。

environment
環境変数設定。

ports
ポートマッピング(ホスト:コンテナ)
(docker run -p xxx:xxxと同じ)

tty
docker run -it
の-tにあたる設定。

Volumes

バインドとボリュームがある。
ボリュームの場合、dockerエンジンの管理領域に永続化ストレージができる。

・ボリュームマウント

volumes:
 db_data:

ボリューム(パス指定のみ)
services:
 wordpress:
  volumes:
   - /var/www/html

WSLでの位置
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\ランダム\_data

名前付きボリューム
services:
 wordpress:
  volumes:
   - aaa:/var/www/html
volumes:
 aaa:

WSLでの位置
\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\wordpressfolder_aaa\_data

・バインド

services:
 wordpress:
  volumes:
   - ./html:/var/www/html

.はdocker-compose.ymlのあるパスを指す。

WindowsのDockerDesktopの場合、
– C:\Users\mail\Desktop\html:/var/www/html
のように指定することもできる。
(~を利用するとWindowsからパスが見えなくなる)

WordPressを実行してみる

Win10でGUIのDockerDesktopを利用。

・docker-compose.yml作成

適当なフォルダを作成し、その中に、
docker-compose.yml
を作成する。
(フォルダ名がContainer/Apps名になる)

・Volumes,Containers/Apps作成

作成したフォルダに移動し、
docker-compose up -d
を実行する。

・docker-compose.ymlを修正した場合

Volumes,Containers/Appsをクリアしてコマンドを再実行する。
(docker-compose.ymlの場所を変えれば別のVolumes,Containers/Appsとして作成される)

・ブラウザのアクセス

http://localhost:8000

・エクスプローラのアクセス
(パス指定のみした場合のボリューム)

\\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes

・シェルのアクセス

docker ps
一覧を確認する。

docker exec -it wordpress1-wordpress-1 /bin/bash
接続する。

exit
終了する。

・未使用ボリューム一括削除

docker volume prune

Mattermostを実行してみる

git config –global core.autocrlf input
WSLで利用する場合、Winでcloneすると改行コードが変換されてしまうため。

確認
git config core.autocrlf

・評価版の場合

docker run –name mattermost-preview -d –publish 8065:8065 mattermost/mattermost-preview

***

本番の場合

・クローン

https://github.com/mattermost/mattermost-docker.git

・docker-compse.yamlを編集

args:
– edition=team
のコメントを外す。

・コンテナ作成

docker-compose up -d

Apache/MySQL/PHPを実行してみる

・フォルダ構成

php7.2-apache
└dockerfile
docker-compose.yml

・Dockerfile

FROM php:7.2-apache
RUN docker-php-ext-install pdo_mysql

・コマンド

docker-compose.ymlでビルドされるが、
もし単体でDockerfileをビルドする場合、
docker build . -t php7.2

・docker-compose.yml

・コマンド

docker-compose up -d

・イメージの名前を指定する場合

services:
 fuga:
  build: ここでdockerfileのフォルダ名
  image: 付けたい名前
(pullはされない)

コマンドで実行

ほぼDockerDesktopで作業しているが一部コマンドでやる場合。

・イメージ取得

プル
docker pull node

一覧
docker images

・コンテナ作成

(docker run [オプション] image [コマンド])
docker run -it –name container -p 81:80 -v C:\Users\mail\Desktop\test:/home node /bin/bash

–rm 利用後コンテナ削除
–name 作成するコンテナに名前をつける
-it 中に入れる
-d バックグラウンドで起動
-p ポートマッピング
-v バインド(ホスト:コンテナ)
ここでのコマンドは/bin/bashとなる。最初に実行するコマンド。