在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