ファイルの違い
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名になる)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
version: '3' services: db: image: mysql:5.7 volumes: - db_data:/var/lib/mysql restart: always environment: MYSQL_ROOT_PASSWORD: passw0rd MYSQL_DATABASE: wp_db MYSQL_USER: wp_user MYSQL_PASSWORD: 1234 wordpress: depends_on: - db image: wordpress:latest ports: - "8000:80" restart: always environment: WORDPRESS_DB_HOST: db:3306 WORDPRESS_DB_NAME: wp_db WORDPRESS_DB_USER: wp_user WORDPRESS_DB_PASSWORD: 1234 volumes: db_data: |
・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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
version: '3' services: php: build: php7.2-apache image: php7.2 volumes: - ./html:/var/www/html ports: - 8000:80 container_name: lamp-php7.2 mysql: image: mysql:5.7 volumes: - ./mysql:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD=abc123 - MYSQL_DATABASE=test_db - MYSQL_USER=test_user - MYSQL_PASSWORD=abc123 container_name: lamp-mysql5.7 command: mysqld --character-set-server=utf8mb4 |
・コマンド
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
を作る。
1 2 3 4 5 6 7 8 9 10 11 |
version: "3.8" services: # MediaWiki コンテナ mediawiki: image: mediawiki:latest ports: - 8080:80 volumes: - C:\Users\USER\Desktop\MediaWiki\www\data:/var/www/data - C:\Users\USER\Desktop\MediaWiki\LocalSettings.php:/var/www/html/LocalSettings.php |
※
/var/www/html
を最初からマウントしていると起動しない
・フォルダで、
docker-compose up -d
を実行。
・必要なイメージがダウンロードされ、コンテナが起動する。
・http://localhost:8080
にアクセス
DBはSQLiteを選んであとは、そのまま。
ウィキ名を付け、管理アカウントを指定する。
設定が完了すると、
LocalSettings.php
をダウンロードする。
・コンテナを削除
保存したLocalSettings.phpを移動。
docker-compose.ymlに以下追加。
1 |
C:\Users\USER\Desktop\MediaWiki\LocalSettings.php:/var/www/html/LocalSettings.php |
・コンテナを再度作成
・フォルダ構成
C:\Users\USER\Desktop\MediaWiki
-www
–data
–html
-docker-compose.yml
-LocalSettings.php