注意事项

1、像MySQL配置文件、Nginx配置文件、网站根目录这种比较经常操作的需要先使用 docker cp 将文件从容器里复制到主机目录,docker run的时候直接挂载目录就可以了

2、docker run MySQL和Nginx的时候注意使用 --link实现容器之间通信

3、运行容器的时候注意使用 --ip 固定容器IP

安装 MySQL

mysql 需要挂载的目录

/var/lib/mysql
/etc/mysql/conf.d

挂载详情

# 主机目录:容器目录
~/web/mysql/data:/var/lib/mysql
~/web/mysql/conf:/etc/mysql/conf.d

文件备份

将mysql的配置文件,自带数据库,sock配置 复制到主机目录

# docker cp container_ID:容器目录 主机目录
docker cp 2d19ae0acd5d:/var/lib/mysql ~/web/mysql/data
docker cp 2d19ae0acd5d:/etc/mysql/conf.d ~/web/mysql/conf

目录分解

docker run
--name mysql # 指定容器名称
-e MYSQL_ROOT_PASSWORD=root # 初始化root用户的密码为root
-p 3307:3306 # 将容器的3306端口映射到主机的3307端口
--privileged=true # 给容器加上特定的权限,否则可能会出现常见容器失败的情况
-v ~/web/mysql/data:/var/lib/mysql # 挂载目录 mysql数据文件
-v ~/web/mysql/conf:/etc/mysql/conf.d # 挂载目录 mysql配置文件
--restart=always # 设置失败自动重启 可写为 --restart=on-failure:5 最多重启五次
-d mysql:5.7

命令实现

docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -p 3307:3306 --privileged=true -v ~/web/mysql/data:/var/lib/mysql -v ~/web/mysql/conf:/etc/mysql/conf.d --restart=always -d mysql:5.7

安装PHP

需要挂载的目录

/var/www/html

挂载详情

# 主机目录:容器目录
~/web/www/:/var/www/html

文件备份

# docker cp container_ID:容器目录 主机目录
docker cp 7da668050b8a:/var/www/html /docker-data/web/www

目录分解

docker run
--name php
-p 9000:9000
--privileged=true
-v ~/web/www/:/wwwroot
--link mysql:mysql # 使用link实现两个容器之间的通信
--restart=always
-d
php:7.2-fpm

命令实现

docker run --name php -p 9000:9000 --privileged=true -v ~/web/www/:/wwwroot --link mysql:mysql --restart=always -d php:7.2-fpm

扩展安装

# 进入容器执行命令安装扩展
docker-php-ext-install [扩展名称] # 安装GD库
apt update #更新软件源
apt install -y libwebp-dev libjpeg-dev libpng-dev libfreetype6-dev #安装各种库
docker-php-source extract #解压源码
cd /usr/src/php/ext/gd #gd源码文件夹
docker-php-ext-configure gd --with-webp-dir=/usr/include/webp --with-jpeg-dir=/usr/include --with-png-dir=/usr/include --with-freetype-dir=/usr/include/freetype2 #准备编译
docker-php-ext-install gd #编译安装
php -m | grep gd
docker restart [container ID]#重启容器

安装Nginx

需要挂载的目录

/usr/share/nginx/html
/etc/nginx/conf.d

挂载详情

# 主机目录:容器目录
~/web/www:/usr/share/nginx/html
~/web/nginx/conf.d:/etc/nginx/conf.d

文件备份

# docker cp container_ID:容器目录 主机目录
docker cp e0babc8a32ad:/usr/share/nginx/html ~/web/www
docker cp e0babc8a32ad:/etc/nginx/conf.d ~/web/nginx/conf.d

目录分解

docker run
--name nginx
-p 8080:80
--privileged=true
-v ~/web/www:/wwwroot
-v ~/web/nginx/conf.d:/etc/nginx/conf.d
--link php:php
--restart=always
-d
nginx

命令实现

docker run --name nginx -p 8080:80  --privileged=true -v ~/web/www:/wwwroot -v ~/web/nginx/conf.d:/etc/nginx/conf.d --link php:php --restart=always -d nginx

Nginx配置文件参考

server {
listen 80;
server_name tplay.yulongcode.com; root /wwwroot/tplay/public; # 项目在容器里的目录
index index.php index.html index.htm; location / {
if (!-e $request_filename){
rewrite ^(.*)$ /index.php?s=$1 last; break;
}
} error_page 500 502 503 504 /50x.html; location ~ \.php$ {
fastcgi_pass PHP容器IP:PHP端口;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}

Docker搭建开发环境(Nginx+MySQL+PHP)的更多相关文章

  1. 使用 docker 搭建开发环境

    作为一个 freelancer,经常能够接到很多的开发工作,这些金主,有喜欢 PHP 的,有习惯撒手不管的:有偏好 sqlite 的,也有喜欢 PG 的,我甚至见过 mysql.PG 一起使用的项目: ...

  2. 利用Docker搭建开发环境

    一. 前言 随着平台的不断壮大,项目的研发对于开发人员而言,对于外部各类环境的依赖逐渐增加,特别是针对基础服务的依赖.这些现象导致开 发人员常常是为了简单从而直接使用公有的基础组件进行协同开发,在出现 ...

  3. Docker 搭建开发环境

    本文介绍如何将Docker集成到开发环境,自动构建应用,并使容器拥有独立的内网IP为开发人员提供服务. 术语解释 Docker镜像:一个不可修改的"模板",每个代码版本对应一个镜像 ...

  4. [转]利用Docker构建开发环境

    利用Docker构建开发环境 Posted by  makewonder on 2014 年 4 月 2 日   最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境, ...

  5. 利用Docker构建开发环境

    最近接触PAAS相关的知识,在研发过程中开始使用Docker搭建了自己完整的开发环境,感觉生活在PAAS时代的程序员真是幸福,本文会简要介绍下Docker是什么,如何利用Docker来搭建自己的开发环 ...

  6. 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)

    Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...

  7. 深入浅出Docker(五):基于Fig搭建开发环境

    概述 在搭建开发环境时,我们都希望搭建过程能够简单,并且一劳永逸,其他的同事可以复用已经搭建好的开发环境以节省开发时间.而在搭建开发环境时,我们经常会被复杂的配置以及重复的下载安装所困扰.在Docke ...

  8. Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践

    Spring Boot 2 (五):Docker Compose + Spring Boot + Nginx + Mysql 实践 Spring Boot + Nginx + Mysql 是实际工作中 ...

  9. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

随机推荐

  1. 顺序表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> //基本操作函数用到的状态码 #define TRUE 1; #define FALSE 0; # ...

  2. C++覆盖,隐藏,重载

    code[class*="language-"], pre[class*="language-"] { color: rgba(51, 51, 51, 1); ...

  3. Java例题_27 100以内的素数

    1 /*27 [程序 27 求素数] 2 题目:求 100 之内的素数 3 */ 4 5 /*分析 6 * 素数:是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数. 7 * 同第二题: ...

  4. 手摸手教你阅读和调试大型开源项目 ZooKeeper

    本文作者:HelloGitHub-老荀 Hi,这里是 HelloGitHub 推出的 HelloZooKeeper 系列,免费开源.有趣.入门级的 ZooKeeper 教程,面向有编程基础的新手. 项 ...

  5. 五年了,你还在用Junit4吗?

    junit5 JUnit5在2017年就发布了,你还在用junit4吗? 什么是junit5 与以前的JUnit版本不同,JUnit 5由三个不同子项目的多个不同模块组成. JUnit 5 = JUn ...

  6. Java8中的Stream流式操作 - 入门篇

    作者:汤圆 个人博客:javalover.cc 前言 之前总是朋友朋友的叫,感觉有套近乎的嫌疑,所以后面还是给大家改个称呼吧 因为大家是来看东西的,所以暂且叫做官人吧(灵感来自于民间流传的四大名著之一 ...

  7. 分库分表之后,id主键如何处理?

    (1)数据库自增id 这个就是说你的系统里每次得到一个id,都是往一个库的一个表里插入一条没什么业务含义的数据,然后获取一个数据库自增的一个id.拿到这个id之后再往对应的分库分表里去写入. 这个方案 ...

  8. JavaScript 中对象解构时指定默认值

    待解构字段为原始值 正常情况下, const obj = { a: 1, b: 2, }; const { a, b } = obj; console.log(a, b); // 1 2 当被解构字段 ...

  9. Qt获取一张图片的平均色(主色调)

    这两天在一个小工具中想做一个图标的发光效果,用固定颜色做出来效果很丑,于是想到此方法,得到图标的主色调后,将颜色调亮,并设置为阴影颜色,从而达到类似发光的效果. 本文章主要在于得到一张图片的平均色,并 ...

  10. 记一次 .NET医疗布草API程序 内存暴涨分析

    一:背景 1. 讲故事 我在年前写过一篇关于CPU爆高的分析文章 再记一次 应用服务器 CPU 暴高事故分析 ,当时是给同济做项目升级,看过那篇文章的朋友应该知道,最后的结论是运维人员错误的将 IIS ...