Dockerfile / DockerCompose メモ

ファイルの違い

Dockerfile:カスタマイズしたImageを作成するためのファイル
docker-compose.yml:複数のコンテナを組み合わせて実行するdocker-composeのための設定ファイル

基本的な流れ

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

Dockerコマンド

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

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

コンテナ実行:
docker run イメージ名
-d バックグラウンドで実行
–name コンテナに名前をつける(ハイフン*2)
-p ポートフォーワード(ホスト側:コンテナ側)

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となる。最初に実行するコマンド。

MySQL

・構成

dockerfile
my.cnf

・dockerfile

FROM mysql:8.0
ENV MYSQL_ROOT_PASSWORD passw0rd!
ADD my.cnf /etc/mysql/conf.d/my.cnf

・my.cnf

[mysqld]
character-set-server=utf8

・実行

docker build . -t mysql8
docker run -d –name mysql8 -p 49152:3306 mysql8

SQL Server

・構成

dockerfile

・dockerfile

FROM mcr.microsoft.com/mssql/server:2019-latest
ENV ACCEPT_EULA=Y
ENV SA_PASSWORD=passw0rd!
ENV MSSQL_PID=Express
ENV MSSQL_LCID=1041
ENV MSSQL_COLLATION=Japanese_CI_AS

※これでExpressを利用できる。

・イメージ、コンテナ作成

docker build . -t mssql2019
docker run –name mssql2019 -d -p 49153:1433 mssql2019

・コマンド説明

以下のbuild,runはcmdで実行してもDockerDesktopに反映される。

docker build -t [作成するオリジナルイメージ名]
(カレントディレクトリのdockerfileを利用する)

docker run –name mssql2022 -d -p 49153:1433 [利用するオリジナルイメージ名]
–name 作成するコンテナに名前をつける
-d バックグラウンドで起動
-p ポートマッピング

・接続
サーバー:localhost,49153
ログインID:sa
パスワード:passw0rd!

Media Wiki

・フォルダを作り、
docker-compose.yml
を作る。


/var/www/html
を最初からマウントしていると起動しない

・フォルダで、
docker-compose up -d
を実行。

・必要なイメージがダウンロードされ、コンテナが起動する。

・http://localhost:8080
にアクセス

DBはSQLiteを選んであとは、そのまま。
ウィキ名を付け、管理アカウントを指定する。
設定が完了すると、
LocalSettings.php
をダウンロードする。

・コンテナを削除

保存したLocalSettings.phpを移動。

docker-compose.ymlに以下追加。

・コンテナを再度作成

・フォルダ構成
C:\Users\USER\Desktop\MediaWiki
-www
–data
–html
-docker-compose.yml
-LocalSettings.php