docker-compose 学习:通过 image 指令指定镜像搭建一个简单LNMP
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
预先设置一下阿里云 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
截图如下:
安装 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
单独建立一个 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、开始编写模版
参考:
https://www.jianshu.com/p/7fff488604c1
https://www.cnblogs.com/blogscc/p/9473123.html预先确认一下端口占用情况
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
分别测试 nginx、php、mysql 镜像和容器运行
编写模版文件 docker-compose.yml
$ cat docker-compose.ymlversion: "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
运行测试
在当前目录下
$ 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 -sCONTAINER 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、错误处理
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;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相关推荐
- Docker Compose学习之docker-compose.yml编写规则 及 实战案例
[Docker那些事]系列文章 docker 安装 与 卸载 centos Dockerfile 文件结构.docker镜像构建过程详细介绍 Dockerfile文件中CMD指令与ENTRYPOINT ...
- 【深度学习笔记1】神经网络的搭建与简单应用
目录 推荐阅读 前言 神经网络与深度学习 使用Tensorflow搭建神经网络 环境搭建和导包遇到的问题: 问题1:Duplicate registrations for type 'optimize ...
- ROS学习笔记十:用C++编写一个简单的服务和客户端
ROS学习笔记十:用C++编写一个简单的服务和客户端 这一节主要介绍如何使用C++编写一个简单的服务和客户端节点. 编写服务节点 由于在前面的练习中,已经向beginner_tutorials软件包中 ...
- 配置私有仓库(使用registry镜像搭建一个私有仓库)
在使用Docker一段时间后,往往会发现手头积累了大量的自定义镜像文件,这些文件通过公有仓库进行管理并不方便:另外有时候只是希望在内部用户之间进行分享,不希望暴露出去.这种情况下,就有必要搭建一个本地 ...
- maven学习笔记之IDEA+Maven+Jetty运行一个简单的web项目
maven学习笔记 一.什么是maven Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Life ...
- 一步步学习SpringBoot(一) 快速搭建一个web
适应读者 前端工程师(java系的公司) 前端架构师(java系的公司) java工程师 测试工程师(java系的公司) 什么是SpringBoot? Spring Boot便是一个社区反馈推动的项目 ...
- python编程制作接金币游戏_pygame学习笔记(6):完成一个简单的游戏
学了这么长时间的Pygame,一直想写个游戏实战一下.看起来很简单的游戏,写其来怎么这么难.最初想写个俄罗斯方块,想了很长时间如何实现,想来想去,也没写出来,于是干脆下载别人的代码来读.后来,要想写一 ...
- pytorch学习笔记(1):开始一个简单的分类器
参考文档:https://mp.weixin.qq.com/s/wj8wxeaGblJijiHFZA6lXQ 回想了一下自己关于 pytorch 的学习路线,一开始找的各种资料,写下来都能跑,但是却没 ...
- 神经网络学习笔记2.2 ——用Matlab写一个简单的卷积神将网络图像分类器
配套视频讲解 10分钟学会matlab实现cnn图像分类_哔哩哔哩_bilibili 10分钟学会matlab实现cnn图像分类 整体代码 链接:https://pan.baidu.com/s/1bt ...
- Linux系统学习:网络指令:如何查看一个域名有哪些 NS 记录
Linux 中提供了不少网络相关的指令,因为网络指令比较分散,本课时会从下面几个维度给你介绍,帮助你梳理常用的网络指令: 远程操作: 查看本地网络状态: 网络测试: DNS 查询: HTTP. 这块知 ...
最新文章
- ubuntu 命令行下查看网页 w3m
- 请求solr服务器未响应,solr与tomcat整合
- edge robert matlab,哪位熟悉matlab的大神路过瞄一眼哈
- 飞鸽传书下载 分析企业OpenEIM
- 可转债的投资价值算法
- 查看linux服务器dns,Linux中查看和设置DNS服务器
- Hbase CallQueueTooBigException 异常处理
- H3C V7版本的系统默认权限
- FTP Client Setup
- 团队作业4——第一次项目冲刺 FiRsT DaY
- RPM软件包管理(安装、卸载、查询、制作)
- 在单链表中删除指定值的节点
- EFUCMSE16小说漫画系统搭建教程
- java文件上传下载接口_java 文件上传下载
- U盘插入电脑说要格式化,但电脑又说“磁盘被写保护,无法格式化”,如何解决
- Unity——射线检测
- 程序员到创业,成长之路的技能分享
- 第1章思维导图图片版
- 通过 BTC 联动程度判断牛熊
- Spring Security 集成 OIDC 项目编码 | 认证(三)
热门文章
- Map集合-根据宠物昵称查找宠物
- Python 06 编码
- 使用Python来处理文件
- 深入理解 flex 布局以及计算_Flexbox, Layout
- java并发编程:线程安全管理类--原子操作类--AtomicLongFieldUpdaterT
- [原创] 对于深度学习(deep learning)在工业界的应用现状和突破 [by matthewbai]
- IOS6 编程:Core Data持久化数据存储(5)-使用Core Data模板创建EntLibCart项目
- Spring 的 IOC原理
- (转)重写重载多态,接口与类
- 在写易买网时产生的错误 JSTL标签库中c:choose/c:choose不能放JSP页面!-- --注释...