博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker-compose 学习:通过 Dockerfile 和 build 指令搭建 LNMP
阅读量:7015 次
发布时间:2019-06-28

本文共 4362 字,大约阅读时间需要 14 分钟。

hot3.png

接上一篇

docker-compose 学习:通过 image 指令指定镜像搭建一个简单LNMP

docker-compose 理解:

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。
本次通过 Dockerfile 和 build 指令搭建 LNMP
Dockerfile 写得很简单,重点在学习docker-compose 构造过程

1、建立一个新项目:LNMP2

1- 单独建立一个 compose 学习的目录 $ tree lnmp2 -d lnmp2 ├── mysql │ └── data │ ├── mysql │ ├── performance_schema │ └── sys ├── nginx │ ├── conf.d │ └── www │ └── html └── phpfpm

2- 编写 Dockerfile

  • nginx 的 Dockerfile 只有一条 ~/compose/lnmp2$ cat ./nginx/Dockerfile FROM nginx:latest

  • php 的 Dockerfile ** 我是从之前学习 Dockerfile 的抄写过来的,里面大量的 php 扩展 学习时可以去掉后面的那些 也可以只有一条

    ~/compose/lnmp2$ cat ./phpfpm/Dockerfile

    FROM php:5.6.37-fpm-alpine3.7  RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \  && apk update\  && apk add --no-cache libmcrypt-dev freetype-dev libjpeg-turbo-dev \          git \          # libfreetype6-dev \          # libjpeg62-turbo-dev \          libpng-dev \  && docker-php-ext-install mcrypt mysqli pdo pdo_mysql mbstring bcmath zip opcache\  && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ \  && docker-php-ext-install -j$(nproc) gd
  • mysql 的 Dockerfile 实际也只有一条 ~/compose/lnmp2$ cat ./mysql/Dockerfile FROM mysql:5.7

    RUN apt update && apt install vim

  1. 分别测试 nginx、php、mysql 镜像和容器运行 只需要测试 image 和 docker run 可以正确运行即可,详细配置放在 compose 模版里面

  2. 编写模版 ss -tlnp |grep 3306 ss -tlnp |grep 82 确认好可以使用的端口,本次我使用 3308 和 82 端口来分别对应 mysql 和 nginx

    ~/compose/lnmp2$ cat docker-compose.yml

    version: "3" services:   web_server:     build: ./nginx       container_name: nginx     links:         - php:php57     ports:         - "82:80"         - "443:443"     volumes:         - ./nginx/www/html:/var/www/html         - ./nginx/conf.d:/etc/nginx/conf.d     db_server:     build: ./mysql       container_name: mysql57     environment:         MYSQL_ROOT_PASSWORD: 123456     ports:         - "3308:3306"     volumes:         - ./mysql/data:/var/lib/mysql   php:     build: ./phpfpm       container_name: php72     links:         - db_server:mysql57     ports:         - "9000:9000"     volumes:         - ./nginx/www/html:/var/www/html         - ./nginx/conf.d:/etc/nginx/conf.d
  3. 运行测试 ** 为了看得清晰,可以将之前学习的项目都 down 掉之后进行 因为运行时会产生新的 images 和新的 docker 容器 docker-compose down

    在当前目录下 ~/compose/lnmp2$ docker-compose up -d

    Creating network "lnmp2_default" with the default driver Creating mysql57 ... done Creating php72   ... done Creating nginx   ... done

    测试

    curl 127.0.0.1:82

4、 错误处理

  1. 第一次 up 之后,检查运行的容器,发现只有 2 个 ,nginx 容器没有起来!

    docker ps -s 	CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES               SIZE 	d07a05bdc966        lnmp2_php           "docker-php-entrypoi…"   26 seconds ago      Up 25 seconds       0.0.0.0:9000->9000/tcp              php72               0B (virtual 77.4MB) 	9018c7da0706        lnmp2_db_server     "docker-entrypoint.s…"   27 seconds ago      Up 25 seconds       33060/tcp, 0.0.0.0:3308->3306/tcp   mysql57             4B (virtual 372MB)

查看 nginx 容器日志 docker logs nginx

2019/04/17 01:47:18 [emerg] 1#1: invalid number of arguments in "fastcgi_pass" directive in /etc/nginx/conf.d/default.conf:23nginx: [emerg] invalid number of arguments in "fastcgi_pass" directive in /etc/nginx/conf.d/default.conf:23

** 因为我是从前一天的 lnmp 直接 cp 过来目录和 conf.d 的 default.conf 里面的 php 容器名字改变了,修改后又忘记了后面分号

** 修改 default.conf 之后,直接启动 nginx 容器即可,无需再次 up 以下是本次的 nginx 配置文件内容

~/compose/lnmp2$ cat ./nginx/conf.d/default.conf

server {	        listen       80;	        server_name  localhost;      location / {        root   /var/www/html;        index  index.html index.htm index.php;    }    #error_page  404              /404.html;    # redirect server error pages to the static page /50x.html    #    error_page   500 502 503 504  /50x.html;    location = /50x.html {        root   /var/www/html;    }    location ~ \.php$ {        root           /var/www/html;        # fastcgi_pass   127.0.0.1:9000;        # 必须修改为compose模版文件中php容器名字    fastcgi_pass   php72:9000;        fastcgi_index  index.php;        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改为$document_root        include        fastcgi_params;    }}

我的疑问:我希望在 build 指令中加上 --no-cache,但是怎么写都不对!目的是希望不受缓存影响,以免存在之前安装的image影响本次的 up

转载于:https://my.oschina.net/u/1440971/blog/3037959

你可能感兴趣的文章
Spring-AOP实践 - 统计访问时间
查看>>
电子技术·笔记6(2013-05\06)
查看>>
Makefile简易模板
查看>>
Windows Azure Storage (23) 计算Azure VHD实际使用容量
查看>>
压力测试工具Siege介绍
查看>>
ASP.NET如何调用MySQL的存储过程
查看>>
Visual Studio 进行Excel相关开发,Microsoft.Office.Interop.Excel.dll库
查看>>
swfdump——从内存中提取swf的工具
查看>>
【Javascript Demo】JS获取当前对象大小以及屏幕分辨率等
查看>>
Android去掉顶部的阴影
查看>>
卡尔曼滤波的原理说明
查看>>
C#对二进制文件的特定位置进行读写小结
查看>>
唯一不变的就是一直在变”--“数据”的华丽“变身术”
查看>>
编译器定义的C/C++语言各种基本数据类型的取值范围
查看>>
matlab 程序发布
查看>>
《Effective C#》读书笔记——条目24:用委托实现回调<使用C#表达设计>
查看>>
.Net中DataAdapter批量插入和更新数据总结
查看>>
DNS通道检测 国外学术界研究情况——研究方法:基于流量,使用机器学习分类算法居多,也有使用聚类算法的;此外使用域名zif low也有...
查看>>
Visual Studio 11 Beta新特性(一):安装VS11
查看>>
SQL Server-触发器(Trigger)之 After 触发器
查看>>