docker初识_初识 docker 搭建自己的开发环境
換了一臺設備,程序猿嘛第一件事肯定是先把開發環境搭建起來,以前為了方便都是搞的集成環境,這次準備下載集成環境的時候,突然想起 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 搭建自己的开发环境的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 苹果为什么微信提醒有延迟
- 下一篇: 抱闸是什么意思 何谓抱闸