博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
docker-compose 学习:通过 image 指令指定镜像搭建一个简单LNMP
阅读量:5964 次
发布时间:2019-06-19

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

hot3.png

docker-compose理解:

每个服务都必须通过 image 指令指定镜像或 build 指令(需要 Dockerfile)等来自动构建生成镜像。
本次先直接指定镜像来搭建一个简单LNMP,作为学习docker-compose入门
实际操作一定是需要 Dockerfile 来配置,才能满足自己的个性化需求

1、 安装 docker-compose

官网 一个不错的入门网站 https://docker_practice.gitee.io/compose/compose_file.html

  1. 预先设置一下阿里云 Docker 加速 再次抄录一下,省得每次都忘记,每次都去查找 ** 下文中 是我申请后的专属加速器地址,记得换成自己的地址

    1. 安装/升级Docker客户端 推荐安装1.10.0以上版本的Docker客户端,参考文档 docker-ce 2. 配置镜像加速器 针对Docker客户端版本大于 1.10.0 的用户 您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' {   "registry-mirrors": ["https://2xxxxxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker

    截图如下: 在这里插入图片描述

  2. 安装 docker-compose 按照官网操作

    sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

    实在太慢!所以,又去找了一下国内镜像 国内镜像参考文章

按照以上参考文章抄过来

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

果然秒达!接下来设置可运行

chmod +x /usr/local/bin/docker-compose

确认一下:

$docker-compose --version	docker-compose version 1.24.0, build 0aa59064

2、尝试建立第一个项目:LNMP

  1. 单独建立一个 compose 学习的目录 mkdir compose && cd compose mkdir lnmp1 && cd lnmp1 建立一个 mysql 数据存放目录,一个 nginx/php 存放目录 mkdir mysql mkdir nginx && cd nginx 按照 nginx 网站习惯,建立一个conf.d 目录和一个 www 目录 在 www/html 下预先写好一个 index.php *** 画蛇添足的在前面加了几句话只是为了确认起来方便!

    wellcome WZH!

    this is a docker demo

    20190416

    ==================

    最终目录结构如下

    $ tree lnmp -d lnmp ├── mysql │ └── data │ ├── mysql │ ├── performance_schema │ └── sys └── nginx ├── conf.d └── www └── html

3、开始编写模版

  1. 参考:

  2. 预先确认一下端口占用情况

    ss -tlnp |grep 3306 LISTEN 0 80 127.0.0.1:3306 0.0.0.0:*

ss -tlnp |grep 80LISTEN   0         80                127.0.0.1:3306             0.0.0.0:*       LISTEN   0         128                       *:80                     *:*

** 我的 3306 和 80 端口都已经被占用,所以,以下脚本中宿主机端口换成了 3307 和 81

  1. 分别测试 nginx、php、mysql 镜像和容器运行

  2. 编写模版文件 docker-compose.yml

    $ cat docker-compose.yml

    version: "3" services:   web_server:     image: nginx:latest     container_name: nginx     links:         - php:php     ports:         - "81:80"         - "443:443"     volumes:         - ./nginx/www/html:/var/www/html         - ./nginx/conf.d:/etc/nginx/conf.d     db_server:     image: mysql:5.7.21     container_name: mysql     environment:         MYSQL_ROOT_PASSWORD: 123456     ports:         - "3307:3306"     volumes:         - ./mysql/data:/var/lib/mysql   php:     image: php:5.6-fpm     container_name: php     links:         - db_server:mysql     ports:         - "9000:9000"     volumes:         - ./nginx/www/html:/var/www/html         - ./nginx/conf.d:/etc/nginx/conf.d
    1. 运行测试 在当前目录下 $ docker-compose up -d mysql is up-to-date php is up-to-date nginx is up-to-date

      ** 如果修改了 docker-compose.yml,再次启动之前先停止 $ docker-compose down Stopping nginx ... done Stopping php ... done Stopping mysql ... done Removing nginx ... done Removing php ... done Removing mysql ... done

      确认容器是否启动 $ docker ps -s

      CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                      NAMES               SIZE 6bb7eb2c7665        nginx:latest        "nginx -g 'daemon of…"   About an hour ago   Up About an hour    0.0.0.0:443->443/tcp, 0.0.0.0:81->80/tcp   nginx               2B (virtual 109MB) 47f3ed37ac21        php:5.6-fpm         "docker-php-entrypoi…"   About an hour ago   Up About an hour    0.0.0.0:9000->9000/tcp                     php                 0B (virtual 344MB) 41d22b0b79f0        mysql:5.7.21        "docker-entrypoint.s…"   About an hour ago   Up About an hour    0.0.0.0:3307->3306/tcp                     mysql

      curl 127.0.0.1:81

浏览器打开 在这里插入图片描述

4、错误处理

  1. curl 127.0.0.1:81/index.php 总是 404 Not Found 因为 conf.d 的 default.conf 抄过来的是实际环境,php解析 fastcgi_pass 127.0.0.1:9000; 现在需要换成 php容器名 fastcgi_pass php:9000;

  2. docker ps -s 查看时, nginx 容器总是没有启动 换成 php容器名没有写正确

以下是从参考文章抄过来修改后的 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   php:9000        fastcgi_index  index.php;        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改为$document_root        include        fastcgi_params;    }}

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

你可能感兴趣的文章
Phonegap Online和Offline
查看>>
软件设计
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
Android 动态注册 亮屏、息屏广播
查看>>
NYOJ 题目77 开灯问题(简单模拟)
查看>>
15.6. HTML嵌入图片
查看>>
Could not find class &#39;XXX.activity‘&#39;, referenced from method &#39;YYYY&#39;
查看>>
I.MX6Q MfgTool2 ucl2.xml eMMC
查看>>
[家里蹲大学数学杂志]第425期一个定积分的计算
查看>>
ASP.NET Web API 应用教程(一) ——数据流使用
查看>>
Python系列干货之Python与设计模式!
查看>>
C# iTextSharp 生成 PDF
查看>>
【中亦安图】Systemstate Dump分析经典案例(8)
查看>>
Template Method(模板方法)模式
查看>>
Dynamic proxy (good-原创)
查看>>
【Redis】Java之Redis工具类
查看>>
算法系列15天速成——第十一天 树操作(上)
查看>>
MySQL中游标使用以及读取文本数据
查看>>
Kubernetes部署的最佳安全实践
查看>>
理解C语言——从小菜到大神的晋级之路(8)——数组、指针和字符串
查看>>