其实通过上一篇文章《使用Docker部署LNMP环境 —— Dockerfile》基本是可以搭建好一个LNMP的环境了。
这一篇算是进阶使用,主要是通过一个叫Docker Compose的工具来简化我们运行容器的操作,当然类似的工具还有Docker MachineDocker 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 命令查看运行状态

标签: none

添加新评论