mac上docker安裝nginx,php,mysql

在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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章