使用Docker部署LNMP环境 —— Docker-compose
其实通过上一篇文章《使用Docker部署LNMP环境 —— Dockerfile》基本是可以搭建好一个LNMP的环境了。
这一篇算是进阶使用,主要是通过一个叫Docker Compose的工具来简化我们运行容器的操作,当然类似的工具还有Docker Machine和 Docker Swarm,本篇只讲Docker Compose。
安装
参考官方文档
两条命令搞定
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
使用
从安装时使用的命令就能看到,Docker Compose的命令是 docker-compose
命令列表查阅Overview of docker-compose CLI
常用的基本就是ps、images看看信息,up、down运行容器,更多用法自行挖掘吧。
该工具简化容器运行操作,也就是之前说的将docker run命令也写到文件里交给Docker Compose来执行。
这些命令可以使用Docker Compose File里的命令代替并遵循其顺序结果以yml格式写到一个docker-compse.yml文件内。
实例
下面会贴出一个使用了多阶段构建的Dockerfile和docker-composer.yml
如果是之前跟着前两篇文章来运行过容器或创建过网络的话,需要先删除掉。
(1) 在/var/www/创建以下文件夹:
|-- docker
|-- html
|-- mysql
| |-- conf
| |-- data
| |-- logs
| `-- run
|-- nginx
`-- php
(2) 新增mysql用户和组并分配权限
groupadd mysql
useradd mysql-g mysql
chown -R mysql:mysql /var/www/mysql
chmod -R 777 /var/www/mysql
(3) 在/var/www/docker目录下放一个composer二进制可执行文件(文件名就叫composer),获取方式参考这里
(4) 在/var/www/nginx目录新增www.conf并写入以下内容:
server{
listen 80;
server_name www.yourdomain.com;
location / {
root /var/www/html;
index index.php index.html index.htm;
}
location ~\.php(.*)$ {
root /var/www/html;
fastcgi_pass 172.18.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
include fastcgi_params;
}
}
(5) 在/var/www/html目录新增index.php并写入以下内容:
<?php
phpinfo();
(6) 在/var/www/docker目录下创建Dockerfile文件并写入以下内容:
FROM mysql:5.7 AS stage-mysql
USER mysql:mysql
ENV MYSQL_ROOT_PASSWORD abc123
FROM nginx:latest AS stage-nginx
FROM php:7.1-fpm AS stage-php
WORKDIR /usr/local/bin
COPY composer .
RUN cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini \
&& apt-get update \
&& apt update ; yes "" |apt install git \
&& apt-get install -y \
libfreetype6-dev \
libjpeg62-turbo-dev \
libpng-dev \
libxslt1-dev \
&& rm -r /var/lib/apt/lists/* \
&& ./docker-php-ext-install pdo_mysql \
&& ./docker-php-ext-install mysqli \
&& ./docker-php-ext-install bcmath \
&& ./docker-php-ext-install mbstring \
&& ./docker-php-ext-install opcache \
&& ./docker-php-ext-install xsl \
&& ./docker-php-ext-install pcntl \
&& ./docker-php-ext-install -j$(nproc) iconv \
&& ./docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
&& ./docker-php-ext-install -j$(nproc) gd \
&& pecl install igbinary \
&& docker-php-ext-enable igbinary \
&& yes "" |pecl install lzf \
&& docker-php-ext-enable lzf \
&& yes "" |pecl install redis-4.0.1 \
&& docker-php-ext-enable redis
(7) 在/var/www/docker目录下创建docker-compose.yml文件并写入以下内容:
version: "3.4"
services:
nginx-t:
build:
context: .
target: stage-nginx
volumes:
- /var/www/html:/var/www/html
- /var/www/nginx:/etc/nginx/conf.d
ports:
- "80:80"
networks:
net-t:
ipv4_address: 172.18.0.2
php-t:
build:
context: .
target: stage-php
volumes:
- /var/www/html:/var/www/html
ports:
- "9000:9000"
networks:
net-t:
ipv4_address: 172.18.0.3
mysql-t:
build:
context: .
target: stage-mysql
volumes:
- /var/www/mysql/conf:/etc/mysql/conf.d
- /var/www/mysql/data:/var/lib/mysql
- /var/www/mysql/logs:/var/log/mysql
- /var/www/mysql/run:/var/run/mysqld
ports:
- "3306:3306"
networks:
net-t:
ipv4_address: 172.18.0.4
networks:
net-t:
ipam:
config:
- subnet: 172.18.0.0/20
driver: "bridge
(8) 使用Docker Compose构建镜像并运行容器
docker-compose up -d
等待完成即可,最后可以通过docker-compose ps 命令查看运行状态