换了一台设备,程序猿嘛第一件事肯定是先把开发环境搭建起来,以前为了方便都是搞的集成环境,这次准备下载集成环境的时候,突然想起 docker 这个东西,在下虽然了解一些概念性的东西但一直为曾实践。人嘛,没有梦想和咸鱼有什么分别。接下来就给大家分享我这两天倒腾的结果

为了方便控制我采用的是编写配置文件 docker-compose.yml 的方式

我的目标是 mac + php + nginx + mysql,安装 docker 我就省略了,阮老师文章里面有通道。以下是我的 yml 文件配置

version: "3"

services:

nginx:

image: nginx:latest

ports:

- "8080:80"

volumes:

- $PWD/project:/usr/share/nginx/html

- $PWD/config/nginx:/etc/nginx

php:

image: php:7.2-fpm

ports:

- "9000:9000"

volumes:

- $PWD/project:/var/www/html

mysql:

image: mysql:5.7

environment:

- MYSQL_ROOT_PASSWORD=root

- MYSQL_DATABASE=demo

- MYSQL_USER=demo

- MYSQL_PASSWORD=demo

ports:

- "3306:3306"

在 yml 文件所在目录运行命令 docker-compose up 加载配置,运行成功便会创建三个正在运行的容器,可以使用 docker container ls 查看详细信息,使用 docker container exec -it containerID /bin/bash 可以进入某个容器执行 shell 命令。

我这个配置估计是极简了,我认为也是最核心的配置。说说我的理解,首先通过 image 获取镜像,通过 ports 建立宿主机和容器的端口映射,通过 volumes 挂载宿主机 目录/文件 到服务容器指定位置(我觉得一般就是工作目录和配置文件)。不出意外现在访问 http://127.0.0.1:8080 你就能看到 nginx 欢迎界面。

前面都是小case,接下来我说几个我抓狂的地方(由于 nginx 配置得少,我后面说的要是过于简单,请大家见谅,我不是故意拉低社区知识质量,毕竟我一直都在学习如何把一个网站搞好),配置 nginx 我最终修改的是配置文件 /etc/nginx/conf.d/default.conf 开始我一直在 /etc/nginx/nginx.conf 来来回回,找了一堆列子都未果,还浪费了大把时间,反正最后找到 default.conf 修改几点如下

一、

location / {

root /usr/share/nginx/html;

# 这里添加了index.php

index index.html index.htm index.php;

}

二、

location ~ \.php$ {

# 这里修改为 php 读取文件目录

root /var/www/html;

# 这里修改为 php 服务名称(和 yml 配置保持一直)和对应的端口

# 千万不要使用容器 ip,因为重起容器之后 ip 地址会被重新分配

fastcgi_pass php:9000;

fastcgi_index index.php;

# 这里的默认值我注释了起来,因为很痛啊

# 到这里我页面一直是 File not found

# 搜索引擎是个好东西,后面找到配置替换,终于输出 Hello world

# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

include fastcgi_params;

}

再说说 php,官网的镜像扩展很少,所以 mysql 扩展还得自己装,我装的是 PDO

我这里用的是一种比较直接了当的方式(也是淘了很久啊), 进入容器找到 /usr/local/bin 目录,运行 docker-php-ext-install pdo_mysql 完事。

前面说了容器 IP 地址每次重启会变,所以连接 mysql 的时候 host 请替换为服务名称,像这样,注意 host 参数。

$dns = "mysql:dbname=demo;host=mysql;charset=utf8";

$pdo = new PDO($dns, 'demo', 'demo');

mysql 这里主要注意 environment(环境变量)

MYSQL_ROOT_PASSWORD 是强制性的提供的,作为最高操作权限的密码。

MYSQL_DATABASE 做为镜像启动时创建的数据库的名称

MYSQL_USER 用户

MYSQL_PASSWORD 密码

更多环境变量参考:https://hub.docker.com/_/mysql/

ps:别说 English 看不懂,谷歌翻译看个大概应该也懂吧

差不多就这样了,如果可以集齐龙珠,我想再聪明点,所以有任何写的不到位的地方还望各位指正,在下一向 吃一堑,长一智。

本作品采用《CC 协议》,转载必须注明作者和本文链接

你迷茫的原因大多数是因为,想得多,做得少

docker初识_初识 docker 搭建自己的开发环境相关推荐

  1. docker mysql 操作_[Docker] Docker 快速搭建本地MySQL开发环境

    [Docker] Docker 快速搭建本地MySQL开发环境 关于 Docker 的安装使用本文不再赘述,有兴趣的可以通过官网或是浏览我的专栏文章了解.今天着重给大家介绍下如何利用Docker快速搭 ...

  2. python数据分析开发环境_在MAC上搭建python数据分析开发环境

    最近工作转型到数据开发领域,想在本地搭建一个数据开发环境.自己有三年python开发经验,马上想到使用numpy.scipy.sklearn.pandas搭建一套数据开发环境. ubuntu的环境,百 ...

  3. 如何搭建java web环境_搭建java WEB开发环境和应用

    搭建java WEB开发环境和应用 更新时间:2009年06月07日 02:28:56   作者: 使用Tomcat服务器,使用DBCP数据源搭建Web开发环境 一 使用Tomcat服务器,使用DBC ...

  4. 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境

    使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境 使用IntelliJ IDEA和Maven管理搭建+Web+Tomcat开发环境 前言:原来一直使用Eclipse,换 ...

  5. 5分钟搭建好ElasticSearch开发环境

    5分钟搭建好ElasticSearch开发环境 基于ElasticSearch 7 ElasticSearch简介 Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引擎, ...

  6. 使用IntelliJ IDEA 13搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  7. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  8. Windows下搭建ARM11裸机开发环境(1):工具安装

    By: Ailson Jack Date: 2019.05.04 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/ ...

  9. Windows下搭建ARM11裸机开发环境(3):Eclipse+JLink调试代码

    By: Ailson Jack Date: 2019.05.17 个人博客:http://www.only2fire.com/ 本文在我博客的地址是:http://www.only2fire.com/ ...

  10. Eclipse和PyDev搭建完美Python开发环境(Windows篇)(转)

    摘要:本文讲解了用Eclipse和PyDev搭建Python的开发环境. 十一长假在家闲着没事儿,准备花点时间学习一下Python. 今儿花了一个下午搭建Python的开发环境,不禁感叹----开源的 ...

最新文章

  1. hbase shell 查看列名_Hbase的简单命令使用
  2. CentOS 7更新时出现Multilib version problems
  3. [cocos2d-x·总结]关于cocos2d-x几种画图方法的用法与思考
  4. ptrace 系统调用
  5. 讲讲volatile的作用
  6. P3338-[ZJOI2014]力【FFT】
  7. LeetCode MySQL 580. 统计各专业学生人数
  8. [进阶] --- Python3 异步编程详解(史上最全篇)
  9. 阿里的盔甲、未来20年发展的动力以及对未来的洞察
  10. 源码共享,希望一起互相学习
  11. 【Python算法】分类与预测——logistic回归分析
  12. ubuntu上virsh+kvm安装虚拟机
  13. 64位电脑 装32位oracle,64位Windows可以安装32位的Oracle吗
  14. JAVA中两个数组比较可以使用Arrays.equals()
  15. 使用ORL人脸库,通过GRNN网络和HOG特征提取的人脸识别算法matlab仿真
  16. 学弟学妹看我文章顺利毕业,基于HTML+Javascript五子棋人机博弈系统设计与实现《记得收藏》
  17. 亲身体验过13款滚动截屏App,谁才是最好用的iPhone长截屏工具?
  18. 详解:路由器性能的各项指标
  19. Python 标准库 xml 详解
  20. WiFi相关知识介绍

热门文章

  1. javaio流层次结构_流的多层次分组
  2. 通过TLS发送的Java邮件
  3. Selenium Java教程– Selenium中的类名定位器
  4. Java中的8种原始类型
  5. 参数化测试 junit_参数化的JUnit测试
  6. 在Spring Boot启动时运行代码
  7. spring 事务持久性_项目学生:Spring数据的持久性
  8. spring条件注解有哪些_Spring4有条件
  9. Java 10及更高版本的思考
  10. Java开发人员应了解的JVM流行语