在mac上安装docker-nginx
docker pull nginx
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:rw -v $PWD/logs:/wwwlogs:rw -d nginx
rw 读写 ro 只读
会报下面这个问题:
因为不能挂载不存在的文件,但是可以挂载不存在的目录。我们挂载的 nginx.conf 文件 是需要 提前编写好的。
详细说明请参考Docker volume 挂载时文件或文件夹不存在
nginx镜像在docker-hub上有详细的使用介绍:
以上说明的大致内容是:
1.配置文件可以根据 官方文档编写
2.如果想使用默认配置,可以创建一个临时实例,copy配置文件后,再使用配置文件运行新的镜像去挂载配置文件
3.或者使用Dockerfile 直接从 nginx镜像 copy配置文件
4.如果Dockerfile文件包含"CMD"命令,要确保带有参数 “-g daemon off” . 否则容器会启动后立即停止(docker运行nginx为什么要使用 daemon off)
所以先在一个test容器中复制一份配置文件。先复制nginx.conf
docker run --name test -d nginx
docker cp test:/etx/nginx/nginx.conf ./nginx/conf/
如果不知道配置文件的存放目录,可以进去容器查看一下。
docker exec -it test /bin/bash
再运行
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:rw -v $PWD/logs:/wwwlogs:rw -d nginx
docker ps
可以看到成功启动docker-nginx
根据刚才的启动挂载,查看nginx.conf 文件, 会有【 include /etc/nginx/conf.d/*.conf;】 ,所以也应该挂载conf.d目录到宿主机上。
复制目录到挂载目录下
docker cp mynginx:/etc/nginx/conf.d ./conf/conf.d
重新挂载目录:
docker stop mynginx
docker rm mynginx
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/conf.d:/etc/nginx/conf.d -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:rw -v $PWD/logs:/wwwlogs:rw -d nginx
修改conf/conf.d/default.conf 文件的root, 指向docker内挂载的目录,方便本地文件同步。
登录docker
docker exec -it mynginx /bin/bash
可以观察在宿主机修改挂载目录的文件,docker对应的也会同步文件。
docker-php 安装
docker search php
docker search php-fpm
搜索出不同的结果,尝试了下载最新的php:latest 版本, 运行后就退出。
docker run -p 9000:9000 --name myphpfpm -v $PWD/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs -d php:latest
然后选用php-fpm 【具体区别尚不清楚】
docker run -p 9000:9000 --name myphpfpm -v $PWD/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs -d bitnami/php-fpm:latest
修改nginx配置文件(IP 是docker-php的IP),重启
在宿主机挂载的www目录下,创建index.php文件
即可成功访问php文件。
docker实例随docker启动
重启docker,运行的实例都会关闭,需要一个一个手动运行。
docker update --restart=always mynginx
再次重启docker,实例会跟随一起启动。
【待处理】 重启docker,实例的IP地址会变更,需要重新配置IP地址。
编写php文件, 会发现更新总是有缓存延时。
原因是 docker-php 开启了 opcache ,
使用 opcache_get_status() 可以查看缓存情况。
调试代码时,可以关闭opcache, 或者 调用 opcache_reset() 函数「需要等待上一个缓存失效」;
docker-mysql 安装
docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:latest
docker exec -it mymysql /bin/bash #终端登录msyql
-e MYSQL_ROOT_PASSWORD=123456:初始化root用户的密码
使用代码连接不上数据库,需要执行下面命令
命令行进入mysql 终端,
use mysql ,
use mysql ;
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
给docker固定IP
docker network ls
docker inspect bridge
# 创建新的网络
docker network create --subnet=172.18.0.0/16 mynetwork
# 重新创建docker,指定IP
docker run -p 9000:9000 --name myphpfpm --net mynetwork --ip 172.18.0.2 -v $PWD/www:/www -v $PWD/conf:/usr/local/etc/php -v $PWD/logs:/phplogs -d bitnami/php-fpm:latest