docker-compose理解:

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

环境:

visualbox ubuntu 1804 本地删除了 mysql

1、 安装 docker-compose

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

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

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

    实在太慢!所以,又去找了一下国内镜像
    国内镜像参考文章
    https://blog.csdn.net/huiyanghu/article/details/82253886

按照以上参考文章抄过来

 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 --versiondocker-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
    *** 画蛇添足的在前面加了几句话只是为了确认起来方便!

     <h3> wellcome WZH!<h4> this is a docker demo<h5> 20190416<p>==================</p><?phpphpinfo();?>
    

    最终目录结构如下

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

3、开始编写模版

  1. 参考:
    https://www.jianshu.com/p/7fff488604c1
    https://www.cnblogs.com/blogscc/p/9473123.html

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

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

ss -tlnp |grep 80
LISTEN   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:latestcontainer_name: nginxlinks:- php:phpports:- "81:80"- "443:443"volumes:- ./nginx/www/html:/var/www/html- ./nginx/conf.d:/etc/nginx/conf.d  db_server:image: mysql:5.7.21container_name: mysqlenvironment:MYSQL_ROOT_PASSWORD: 123456ports:- "3307:3306"volumes:- ./mysql/data:/var/lib/mysqlphp:image: php:5.6-fpmcontainer_name: phplinks:- db_server:mysqlports:- "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               SIZE6bb7eb2c7665        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

浏览器打开http://192.168.1.193: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:9000fastcgi_index  index.php;fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # 修改为$document_rootinclude        fastcgi_params;}
}

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

  1. Docker Compose学习之docker-compose.yml编写规则 及 实战案例

    [Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...

  2. 【深度学习笔记1】神经网络的搭建与简单应用

    目录 推荐阅读 前言 神经网络与深度学习 使用Tensorflow搭建神经网络 环境搭建和导包遇到的问题: 问题1:Duplicate registrations for type 'optimize ...

  3. ROS学习笔记十:用C++编写一个简单的服务和客户端

    ROS学习笔记十:用C++编写一个简单的服务和客户端 这一节主要介绍如何使用C++编写一个简单的服务和客户端节点. 编写服务节点 由于在前面的练习中,已经向beginner_tutorials软件包中 ...

  4. 配置私有仓库(使用registry镜像搭建一个私有仓库)

    在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便:另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...

  5. maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目

    maven学习笔记 一.什么是maven Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Life ...

  6. 一步步学习SpringBoot(一) 快速搭建一个web

    适应读者 前端工程师(java系的公司) 前端架构师(java系的公司) java工程师 测试工程师(java系的公司) 什么是SpringBoot? Spring Boot便是一个社区反馈推动的项目 ...

  7. python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏

    学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读.后来,要想写一 ...

  8. pytorch学习笔记(1):开始一个简单的分类器

    参考文档:https://mp.weixin.qq.com/s/wj8wxeaGblJijiHFZA6lXQ 回想了一下自己关于 pytorch 的学习路线,一开始找的各种资料,写下来都能跑,但是却没 ...

  9. 神经网络学习笔记2.2 ——用Matlab写一个简单的卷积神将网络图像分类器

    配套视频讲解 10分钟学会matlab实现cnn图像分类_哔哩哔哩_bilibili 10分钟学会matlab实现cnn图像分类 整体代码 链接:https://pan.baidu.com/s/1bt ...

  10. Linux系统学习:网络指令:如何查看一个域名有哪些 NS 记录

    Linux 中提供了不少网络相关的指令,因为网络指令比较分散,本课时会从下面几个维度给你介绍,帮助你梳理常用的网络指令: 远程操作: 查看本地网络状态: 网络测试: DNS 查询: HTTP. 这块知 ...

最新文章

  1. ubuntu 命令行下查看网页 w3m
  2. 请求solr服务器未响应,solr与tomcat整合
  3. edge robert matlab,哪位熟悉matlab的大神路过瞄一眼哈
  4. 飞鸽传书下载 分析企业OpenEIM
  5. 可转债的投资价值算法
  6. 查看linux服务器dns,Linux中查看和设置DNS服务器
  7. Hbase CallQueueTooBigException 异常处理
  8. H3C V7版本的系统默认权限
  9. FTP Client Setup
  10. 团队作业4——第一次项目冲刺 FiRsT DaY
  11. RPM软件包管理(安装、卸载、查询、制作)
  12. 在单链表中删除指定值的节点
  13. EFUCMSE16小说漫画系统搭建教程
  14. java文件上传下载接口_java 文件上传下载
  15. U盘插入电脑说要格式化,但电脑又说“磁盘被写保护,无法格式化”,如何解决
  16. Unity——射线检测
  17. 程序员到创业,成长之路的技能分享
  18. 第1章思维导图图片版
  19. 通过 BTC 联动程度判断牛熊
  20. Spring Security 集成 OIDC 项目编码 | 认证(三)

热门文章

  1. Map集合-根据宠物昵称查找宠物
  2. Python 06 编码
  3. 使用Python来处理文件
  4. 深入理解 flex 布局以及计算_Flexbox, Layout
  5. java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdaterT
  6. [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
  7. IOS6 编程:Core Data持久化数据存储(5)-使用Core Data模板创建EntLibCart项目
  8. Spring 的 IOC原理
  9. (转)重写重载多态,接口与类
  10. 在写易买网时产生的错误 JSTL标签库中c:choose/c:choose不能放JSP页面!-- --注释...