Docker-作成 マルチコンテナDockerアプリケーションを定義および管理するためのコマンドラインツールです。 ComposeはPythonスクリプトであり、pipコマンドを使用して簡単にインストールできます(pipは、PythonパッケージリポジトリからPythonソフトウェアをインストールするコマンドです)。 composeを使用すると、1つのコマンドで複数のDockerコンテナーを実行できます。これにより、サービスとしてのコンテナーを作成でき、開発、テスト、およびステージング環境に最適です。
このチュートリアルでは、docker-composeを使用してLEMPスタック環境(LEMP =Linux-Nginx-MySQL-PHP)を作成する方法を段階的に説明します。すべてのコンポーネントを異なるDockerコンテナーで実行し、Nginxコンテナー、PHPコンテナー、PHPMyAdminコンテナー、およびMySQL/MariaDBコンテナーをセットアップします。
前提条件
- Ubuntuサーバー16.04-64ビット
- root権限
このステップでは、Dockerをインストールします。 DockerはUbuntuリポジトリで利用できます。リポジトリを更新してからインストールするだけです。
ubuntuリポジトリを更新してアップグレードします:
sudo apt-get update
sudo apt-get upgrade
ubuntuリポジトリから最新のDockerをインストールします。
sudo apt-get install -y docker.io
Dockerを起動し、起動時に起動できるようにします:
systemctl start docker
systemctl enable docker
Dockerサービスが実行されています。
次に、以下のコマンドでdockerを使用してテストできます:
docker run hello-world
DockerからHelloworld。
最初のステップでは、Dockerをすでにインストールしています。次に、docker-composeをインストールします。
作成のインストールにはpython-pipが必要です。apt:
を使用してpythonとpython-pipをインストールします。sudo apt-get install -y python python-pip
インストールが完了したら、pipコマンドを使用してdocker-composeをインストールします。
pip install docker-compose
次に、docker-composeバージョンを確認します:
docker-compose --version
Docker-composeがインストールされました。
このステップでは、docker-compose環境を構築します。 root以外のユーザーを使用するため、今すぐそのユーザーを作成する必要があります。
' hakaseという名前の新しいユーザーを追加します '(必要に応じて、ここで独自のユーザー名を選択してください):
useradd -m -s /bin/bash hakase
passwd hakase
次に、新しいユーザーを「 docker」に追加します 'dockerをグループ化して再起動します。
usermod -a -G docker hakase
sudo systemctl restart docker
これで、ユーザーのハカセ 'sudoなしでdockerを使用できます。
次に、rootユーザーから、suを使用して「hakase」ユーザーにログインします。
su - hakase
作成環境用の新しいディレクトリを作成します。
mkdir lemp-compose/
cd lemp-compose/
これは私たちのdocker-compose環境であり、Dockerコンテナにあるすべてのファイルはこのディレクトリにある必要があります。 docker-composeを使用する場合は、「 docker-compose.yml」という名前の.ymlファイルが必要です。 '。
'lemp-compose'ディレクトリに、いくつかの新しいディレクトリとdocker-compose.ymlファイルを作成します。
touch docker-compose.yml
mkdir -p {logs,nginx,public,db-data}
- ログ :Nginxログファイルのディレクトリ。
- nginx :仮想ホストなどのNginx構成が含まれています。
- 公開 :Webファイル、index.html、およびPHP情報ファイルのディレクトリ。
- db-data :MariaDBデータディレクトリボリューム。
'ログにログファイルerror.logとaccess.logを作成します 'ディレクトリ。
touch logs/{error,access}.log
' nginxに新しいnginx仮想ホスト構成ファイルを作成します 'ディレクトリ:
vim nginx/app.conf
以下に構成を貼り付けます:
upstream php {
server phpfpm:9000;
}
server {
server_name 193.70.36.50;
error_log "/opt/bitnami/nginx/logs/myapp-error.log";
access_log "/opt/bitnami/nginx/logs/myapp-access.log";
root /myapps;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi.conf;
fastcgi_intercept_errors on;
fastcgi_pass php;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
ファイルを保存してvimを終了します。
' publicに新しいindex.htmlファイルとPHP情報ファイルを作成します 'ディレクトリ。
echo '<h1>LEMP Docker-Compose</h1><p><b>hakase-labs</b>' > public/index.html
echo '<?php phpinfo(); ?>' > public/info.php
これで、次のような環境ディレクトリが表示されます。
tree
前のステップでは、コンテナに必要なディレクトリとファイルを作成しました。このステップでは、ファイル' docker-compose.ymlを編集します。 '。 docker-compose.ymlファイルで、LEMPスタックのサービス、各コンテナーのベースイメージ、およびDockerボリュームを定義します。
'ハカセにログインします 'ユーザーとdocker-compose.ymlを編集します vimでファイルする:
su - hakase
cd lemp-compose/
vim docker-compose.yml
-Nginxサービスを定義する
以下にnginx構成を貼り付けます:
nginx:
image: 'bitnami/nginx'
ports:
- '80:80'
links:
- phpfpm
volumes:
- ./logs/access.log:/opt/bitnami/nginx/logs/myapp-access.log
- ./logs/error.log:/opt/bitnami/nginx/logs/myapp-error.log
- ./nginx/app.conf:/bitnami/nginx/conf/vhosts/app.conf
- ./public:/myapps
その構成では、すでに定義済みです:
- nginx :サービス名
- 画像 :' bitnami / nginxを使用しています 'Docker画像
- ポート :コンテナポートを公開 80 ホストポートへ80
- リンク :リンク' nginx 'サービスコンテナから'phpfpm 'コンテナ
- ボリューム :ローカルディレクトリをコンテナにマウントします。ログファイルディレクトリをマウントし、Nginx仮想ホスト構成をマウントし、Webルートディレクトリをマウントします。
-PHP-fpmサービスを定義する
Nginxブロックの下に構成を貼り付けます:
phpfpm:
image: 'bitnami/php-fpm'
ports:
- '9000:9000'
volumes:
- ./public:/myapps
ここで定義しました:
- phpfpm :サービス名を定義します。
- 画像 :' bitnami / php-fpmを使用してphpfpmサービスのベースイメージを定義します '画像。
- ポート :TCPポート 9000でPHP-fpmを実行しています ポートを公開する9000 ホストに。
- ボリューム :Webルートディレクトリをマウントします' public 'から'myapps 'コンテナ上。
-MySQLサービスを定義する
3番目のブロックで、MariaDBサービスコンテナーの以下の構成を貼り付けます。
mysql:
image: 'mariadb'
ports:
- '3306:3306'
volumes:
- ./db-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=hakase-labs123
ここで、私たちが使用していることがわかります:
- mysql :サービス名として。
- 画像 :コンテナは' mariadbに基づいています 'Docker画像。
- ポート :ポート 3306を使用するサービスコンテナ MySQL接続の場合、ポート 3306でホストに公開します 。
- ボリューム : db-data ディレクトリmysql
- 環境 :環境変数を設定します' MYSQL_ROOT_PASSWORD 'コンテナのビルド時に実行されるDockerイメージへのmysqlルートパスワード。
-PHPMyAdminサービスの構成
最後のブロック、以下の構成を貼り付けます:
phpmyadmin:
image: 'phpmyadmin/phpmyadmin'
restart: always
ports:
- '8080:80'
links:
- mysql:mysql
environment:
MYSQL_USERNAME: root
MYSQL_ROOT_PASSWORD: hakase-labs123
PMA_HOST: mysql
'phpmyadmin' docker imageを使用しており、コンテナポートをマッピングしています 80 8080へ ホストで、コンテナを mariadbにリンクします コンテナ、restartを常に設定し、dockerイメージのいくつかの環境変数を設定します。これにはset' PMA_HOST '。
ファイルを保存してvimを終了します。
完全な例はgithubで見ることができます。
これで、docker-composeを実行する準備が整いました。注:docker-composeを実行する場合は、docker-composeプロジェクトディレクトリにいて、compose構成のymlファイルがあることを確認する必要があります。
以下のコマンドを実行して、LEMPスタックを起動します。
docker-compose up -d
-d: デーモンまたはバックグラウンドとして実行中
新しいコンテナが作成されたという結果が表示されます。以下のコマンドで確認してください。
docker-compose ps
これで、Nginx、PHP-fpm、MariaDB、PHPMyAdminを実行する4つのコンテナーができました。
ホスト上のdocker-proxyによって使用されているポートを確認しています。
netstat -plntu
Nginxコンテナの場合はポート80、MariaDBコンテナの場合はポート3306、php-fpmコンテナの場合はポート9000、PHPMyAdminコンテナの場合はポート8080が表示されます。
Webブラウザからポート80にアクセスすると、index.htmlファイルが表示されます。
http:// serverip-address /
PHP-fpmが実行されていることを確認し、Webブラウザからアクセスします。
http://serverip-address/info.php
MySQLシェルのMySQLコンテナにアクセスします。
docker-compose exec mysql bash
mysql -u root -p
TYPE MYSQL PASSWORD: hakase-labs123
次に、新しいデータベースを作成します。
create database hakase_db;
exit
MariaDB mysqlシェルコンテナにアクセスでき、新しいデータベース' hakase_dbを作成しました '。
次に、ポート8080でPHPMyAdminにアクセスします:http:// serverip-address:8080/。
PHPMyAdminログインページが表示されます。ユーザー名'rootと入力するだけです。 'およびパスワードは'hakase-labs123 '。
PMA_HOSTで定義されているmysqlコンテナに自動的に接続されます 環境変数。
[移動]をクリックします 'そして、' mysqlに接続されているphpmyadminダッシュボードが表示されます。 'コンテナ。
成功! LEMPスタックは、4つのコンテナーで構成されるdocker-composeセットアップの下で実行されています。
https://hub.docker.com/r/bitnami/nginx/
https://hub.docker.com/r/bitnami/php-fpm/
https://hub.docker.com/_/mariadb/
https://hub.docker.com/r/phpmyadmin/phpmyadmin/
https://docs.docker.com/compose/
https://github.com/yuzukiseo/hakase-labs/tree/master/lemp-compose