Docker安裝PHP+nginx+mysql 簡(jiǎn)書教程
引言
這段時(shí)候主攻云服務(wù)
1. CentOS 服務(wù)器
2. 配置
3. Docker
服務(wù)器
用戶名:ssh root@182.61.35.7
密碼:xxx (想要的找我)
管理控制臺(tái)地址:https://console.bce.baidu.com/bcc/#/bcc/instance/list
CentOS 文件目錄
參考文獻(xiàn):Centos目錄-結(jié)構(gòu)詳細(xì)版 https://blog.csdn.net/daniel_fei/article/details/64495653
- /:根目錄
- /usr/bin:可執(zhí)行二進(jìn)制文件目錄,如常用的命令ls、tar、mv、cat等
- /boot:放置Linux系統(tǒng)啟動(dòng)時(shí)用到的一些文件。/boot/vmlinuz為linux的內(nèi)核文件,以及/boot/gurb。建議單獨(dú)分區(qū),分區(qū)大小100M即可
- /dev:存放linux系統(tǒng)下的設(shè)備文件,訪問(wèn)該目錄下某個(gè)文件,相當(dāng)于訪問(wèn)某個(gè)設(shè)備,常用的是掛載光驅(qū)mount /dev/cdrom /mnt
- /etc:系統(tǒng)配置文件存放的目錄
- /home:系統(tǒng)默認(rèn)的用戶家目錄,新增用戶賬號(hào)時(shí),用戶的家目錄都存放在此目錄下,表示當(dāng)前用戶的家目錄,test表示用戶test的家目錄
- /lib:/usr/lib :/usr/local/lib : 系統(tǒng)使用的函數(shù)庫(kù)的目錄,程序在執(zhí)行過(guò)程中,需要調(diào)用一些額外的參數(shù)時(shí)需要函數(shù)庫(kù)的協(xié)助,比較重要的目錄為/lib/modules
- /lost+fount:系統(tǒng)異常產(chǎn)生錯(cuò)誤
- /mnt:/media:光盤默認(rèn)掛載點(diǎn)
- /opt: 給主機(jī)額外安裝軟件所擺放的目錄
- /proc: 此目錄的數(shù)據(jù)都在內(nèi)存中,如系統(tǒng)核心,外部設(shè)備,網(wǎng)絡(luò)狀態(tài)
- /root: 系統(tǒng)管理員root的家目錄,系統(tǒng)第一個(gè)啟動(dòng)的分區(qū)為/
- /sbin:/usr/sbin:/usr/local/sbin: 放置系統(tǒng)管理員使用的可執(zhí)行命令,如fdisk、shutdown、mount等。與/bin不同的是,這幾個(gè)目錄是給系統(tǒng)管理員root使用的命令,一般用戶只能"查看"而不能設(shè)置和使用。
- /tmp: 一般用戶或正在執(zhí)行的程序臨時(shí)存放文件的目錄,任何人都可以訪問(wèn),重要數(shù)據(jù)不可放置在此目錄下
- /srv: 服務(wù)啟動(dòng)之后需要訪問(wèn)的數(shù)據(jù)目錄,如www服務(wù)需要訪問(wèn)的網(wǎng)頁(yè)數(shù)據(jù)存放在/srv/www內(nèi)
- /usr: 應(yīng)用程序存放目錄,/usr/bin 存放應(yīng)用程序, /usr/share 存放共享數(shù)據(jù),/usr/lib 存放不能直接運(yùn)行的,卻是許多程序運(yùn)行所必需的一些函數(shù)庫(kù)文件。/usr/local:存放軟件升級(jí)包。/usr/share/doc: 系統(tǒng)說(shuō)明文件存放目錄。/usr/share/man: 程序說(shuō)明文件存放目錄,使用 man ls時(shí)會(huì)查詢/usr/share/man/man1/ls.1.gz的內(nèi)容建議單獨(dú)分區(qū),設(shè)置較大的磁盤空間
- /var: 放置系統(tǒng)執(zhí)行過(guò)程中經(jīng)常變化的文件,如隨時(shí)更改的日志文件 /var/log,/var/log/message: 所有的登錄文件存放目錄,/var/spool/mail: 郵件存放的目錄, /var/run: 程序或服務(wù)啟動(dòng)后,其PID存放在該目錄下。建議單獨(dú)分區(qū),設(shè)置較大的磁盤空間
操作
基本操作:
獲取CentOS版本:
$ lsb_release -a
查看當(dāng)前內(nèi)核版本
$uname -r
Docker簡(jiǎn)介:
Linux基本指令:
vim/vi:
CentOS上傳和下載文件
利用scp傳輸文件
1、從服務(wù)器下載文件
scp username@servername:/path/filename /tmp/local_destination
例如scp codinglog@192.168.0.101:/home/kimi/test.txt /tmp/local_destination 把192.168.0.101上的/home/kimi/test.txt
的文件下載到 /tmp/local_destination
2、上傳本地文件到服務(wù)器
scp /path/local_filename username@servername:/path
例如scp /var/www/test.php codinglog@192.168.0.101:/var/www/ 把本機(jī)/var/www/目錄下的test.php文件
上傳到192.168.0.101這臺(tái)服務(wù)器上的/var/www/目錄中
3、從服務(wù)器下載整個(gè)目錄
scp -r username@servername:remote_dir/ /tmp/local_dir
例如:scp -r codinglog@192.168.0.101 /home/kimi/test /tmp/local_dir
例如:scp -r root@182.61.35.7:/Users/Docker/php-nginx-compose /Users/gl/Desktop
4、上傳目錄到服務(wù)器
scp -r /tmp/local_dir username@servername:remote_dir
例如:
scp -r test codinglog@192.168.0.101:/var/www/ 把當(dāng)前目錄下的test目錄上傳到服務(wù)器
的/var/www/ 目錄
例如:
scp -r /Users/gl/Desktop/php-nginx-compose root@182.61.35.7:/Users/Docker/
CentOS chmod命令
參考文獻(xiàn):http://man.linuxde.net/chmod
u User,即文件或目錄的擁有者;
g Group,即文件或目錄的所屬群組;
o Other,除了文件或目錄擁有者或所屬群組之外,其他用戶皆屬于這個(gè)范圍;
a All,即全部的用戶,包含擁有者,所屬群組以及其他用戶;
r 讀取權(quán)限,數(shù)字代號(hào)為“4”;
w 寫入權(quán)限,數(shù)字代號(hào)為“2”;
x 執(zhí)行或切換權(quán)限,數(shù)字代號(hào)為“1”;
- 不具任何權(quán)限,數(shù)字代號(hào)為“0”;
s 特殊功能說(shuō)明:變更文件或目錄的權(quán)限。
chmod u+x,g+w f01 //為文件f01設(shè)置自己可以執(zhí)行,組員可以寫入的權(quán)限 chmod u=rwx,g=rw,o=r f01 chmod 764 f01 chmod a+x f01 //對(duì)文件f01的u,g,o都設(shè)置可執(zhí)行屬性
wget 命令:
實(shí)例1:使用wget下載單個(gè)文件
命令:
wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.6.5/
實(shí)例2:使用wget -O下載并以不同的文件名保存
實(shí)例4:使用wget -c斷點(diǎn)續(xù)傳 對(duì)大文件可能斷開連接的情況有用
實(shí)例5:使用wget -b后臺(tái)下載
實(shí)例6:偽裝代理名稱下載
命令:
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16" http://www.minjieren.com/wordpress-3.1-zh_CN.zip
說(shuō)明:
有些網(wǎng)站能通過(guò)根據(jù)判斷代理名稱不是瀏覽器而拒絕你的下載請(qǐng)求。不過(guò)你可以通過(guò)–user-agent參數(shù)偽裝。
實(shí)例7:使用wget –spider測(cè)試下載鏈接
命令:
wget --spider URL
實(shí)例9:使用wget -i下載多個(gè)文件: filelist.txt 是有多個(gè)url組成的文件
命令:
wget -i filelist.txt
tar命令:
tar命令詳解
-c: 建立壓縮檔案
-x:解壓
-t:查看內(nèi)容
-r:向壓縮歸檔文件末尾追加文件
-u:更新原壓縮包中的文件
這五個(gè)是獨(dú)立的命令,壓縮解壓都要用到其中一個(gè),可以和別的命令連用但只能用其中一個(gè)。
下面的參數(shù)是根據(jù)需要在壓縮或解壓檔案時(shí)可選的。
-z:有g(shù)zip屬性的
-j:有bz2屬性的
-Z:有compress屬性的
-v:顯示所有過(guò)程
-O:將文件解開到標(biāo)準(zhǔn)輸出
總結(jié)
1、*.tar 用 tar –xvf 解壓
2、*.gz 用 gzip -d或者gunzip 解壓
3、.tar.gz和.tgz 用 tar –xzf 解壓
4、*.bz2 用 bzip2 -d或者用bunzip2 解壓
5、*.tar.bz2用tar –xjf 解壓
6、*.Z 用 uncompress 解壓
7、*.tar.Z 用tar –xZf 解壓
案例
sudo tar -zxf hadoop-2.6.5.tar.gz -C /usr/local 安裝到絕對(duì)目錄中。使用-C命令
find命令:
find的使用實(shí)例:
$ find . -name 'my*'
搜索當(dāng)前目錄(含子目錄,以下同)中,所有文件名以my開頭的文件。
$ find . -name 'my*' -ls
搜索當(dāng)前目錄中,所有文件名以my開頭的文件,并顯示它們的詳細(xì)信息。
$ find . -type f -mmin -10
搜索當(dāng)前目錄中,所有過(guò)去10分鐘中更新過(guò)的普通文件。如果不加-type f參數(shù),則搜索普通文件+特殊文件+目錄。
locate命令的使用實(shí)例:
$ locate /etc/sh
搜索etc目錄下所有以sh開頭的文件。
$ locate ~/m
搜索用戶主目錄下,所有以m開頭的文件。
$ locate -i ~/m
搜索用戶主目錄下,所有以m開頭的文件,并且忽略大小寫
whereis命令只能用于程序名的搜索,而且只搜索二進(jìn)制文件(參數(shù)-b)、man說(shuō)明文件(參數(shù)-m)和源代碼文件(參數(shù)-s)。如果省略參數(shù),則返回所有信息。
whereis命令的使用實(shí)例:
$ whereis grep
which命令的作用是,在PATH變量指定的路徑中,搜索某個(gè)系統(tǒng)命令的位置,并且返回第一個(gè)搜索結(jié)果。也就是說(shuō),使用which命令,就可以看到某個(gè)系統(tǒng)命令是否存在,以及執(zhí)行的到底是哪一個(gè)位置的命令。
which命令的使用實(shí)例:
$ which grep
type命令其實(shí)不能算查找命令,它是用來(lái)區(qū)分某個(gè)命令到底是由shell自帶的,還是由shell外部的獨(dú)立二進(jìn)制文件提供的。如果一個(gè)命令是外部命令,那么使用-p參數(shù),會(huì)顯示該命令的路徑,相當(dāng)于which命令。
type命令的使用實(shí)例:
$ type cd
系統(tǒng)會(huì)提示,cd是shell的自帶命令(build-in)。
$ type grep
系統(tǒng)會(huì)提示,grep是一個(gè)外部命令,并顯示該命令的路徑。
$ type -p grep
加上-p參數(shù)后,就相當(dāng)于which命令。
安裝Docker:
參考文獻(xiàn):http://www.lxweimin.com/p/3a4cd73e3272
Linux內(nèi)核和發(fā)行版的關(guān)系:
Docker 要求 CentOS 系統(tǒng)的內(nèi)核版本高于 3.10 ,查看本頁(yè)面的前提條件來(lái)驗(yàn)證你的CentOS 版本是否支持 Docker 。
查看你當(dāng)前的內(nèi)核版本
$ uname -r
安裝 Docker
$ yum -y install docker
啟動(dòng) Docker 后臺(tái)服務(wù)
$ service docker start
測(cè)試運(yùn)行 hello-world,由于本地沒(méi)有hello-world這個(gè)鏡像,所以會(huì)下載一個(gè)hello-world的鏡像,并在容器內(nèi)運(yùn)行。
$ docker run hello-world
Docker簡(jiǎn)介:
- Docker服務(wù)啟動(dòng)快
- Docker服務(wù)與Virtaul Machine 的區(qū)別
- Docker更易遷移、更加簡(jiǎn)單的管理、更快速的交互和部署
- Docker三要素:鏡像、容器、倉(cāng)庫(kù)
- docker 基本操作 :參考:https://letong.gitbooks.io/docker/content/container/rm.html
刪除與終止容器:
docker stop cool_nginx
docker rm cool_nginx
查看鏡像:
docker images
查看運(yùn)行的容器:
docker ps
批量快速停止所有容器:
docker stop $(docker ps -q)
批量快速停止所有容器:
docker rm $(docker ps -aq)
一條命令停止并刪除所有容器:
docker stop (docker ps -q) & docker rm(docker ps -aq)
docker-compose 批量啟動(dòng)容器
docker-compose up -d
docker-compose 批量停止容器
docker-compose stop
docker刪除鏡像
docker rmi 鏡像id/鏡像名
docker刪除鏡像
docker rmi 鏡像id/鏡像名
docker進(jìn)入mysql 容器
docker exec -it dnmp:mysql
鏡像
獲取鏡像
從 Docker Hub 倉(cāng)庫(kù)下載一個(gè) Ubuntu 12.04 操作系統(tǒng)的鏡像
docker pull ubuntu:12.04
列出
顯示本地已有鏡像
docker images
- 來(lái)自哪個(gè)倉(cāng)庫(kù),比如docker.io
- 鏡像的標(biāo)記,比如14.04
- 它的ID號(hào)
- 創(chuàng)建時(shí)間
- 鏡像大小
創(chuàng)建
先使用下載的鏡像啟動(dòng)容器:
sudo docker run -t -i training/sinatra /bin/bash
利用Dockerfile來(lái)創(chuàng)建鏡像:
容器
倉(cāng)庫(kù)
Docker搭建PHP開發(fā)環(huán)境
參考文獻(xiàn):更好的PHP開發(fā)環(huán)境-Docker篇 http://www.blue7wings.com/php%20tutorial/Better-Dev-Envirenment-Docker.html
第一步:安裝docker 。yum install docker 很簡(jiǎn)單
第二步:安裝nginx。docker pull nginx。
第三步:使用docker images查看一下我們剛剛拉取下來(lái)的鏡像
第四步:實(shí)例化該鏡像,我們把實(shí)例化的鏡像稱之為容器,鏡像和容器的關(guān)系就好比類和實(shí)例的關(guān)系。docker run -p 80:80 nginx 。 訪問(wèn) http://182.61.35.7:80 即可看到nginx頁(yè)面。
第五步:讓nginx在后臺(tái)運(yùn)行,進(jìn)入守護(hù)進(jìn)程。docker run -p 80:80 --name cool_nginx -d nginx
第六步:查看docker 進(jìn)程:-p是端口參數(shù),給上-d參數(shù)表示容器是守護(hù)程序會(huì)進(jìn)入后臺(tái)運(yùn)行,--name則是重新給容器命名。
成功之后,用docker ps來(lái)查看當(dāng)前已經(jīng)啟動(dòng)的容器。
第七步:現(xiàn)在我們進(jìn)入這個(gè)容器,并修改這個(gè)Nginx默認(rèn)網(wǎng)頁(yè)。
docker exec -it cool_nginx bash > echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
第八步:掛載一個(gè)本地目錄到容器
docker run -p 80:80 --name cool_nginx -d -v /Users/Docker/src/:/usr/share/nginx/html/ nginx
第九步:安裝PHP7.1 docker pull php:7.1-fpm
第十步:PHP掛在到一個(gè)本地目錄。
docker run -d --name cool_php_fpm -v /Users/Docker/src/:/usr/share/nginx/html/ php:7.1-fpm
第十一步:連接PHP和nginx --link cool_php_fpm
第十二步:創(chuàng)建default_nginx.conf文件并將其掛在到本地目錄
server { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html index.php; charset utf-8; location / { try_files uriuri/ /index.php?query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } access_log off; error_log /var/log/nginx/error.log error; sendfile off; client_max_body_size 100m; location ~ \.php? { fastcgi_pass cool_php_fpm:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; fastcgi_intercept_errors off; fastcgi_buffer_size 16k; fastcgi_buffers 4 16k; } location ~ /.ht { deny all; } }
然后用docker rm cool_nginx命令刪除掉原先的Nginx容器,掛載該配置文件重新實(shí)例化:
docker run -p 80:80 \ --name cool_nginx -d \ -v /Users/Docker/src/:/usr/share/nginx/html/ \ -v /Users/Docker/default_nginx.conf:/etc/nginx/conf.d/default.conf:ro \ --link cool_php_fpm nginx
在本地src/目錄下,新建一個(gè)test.php文件,寫入熟悉的內(nèi)容:
<?php echo phpinfo();
訪問(wèn) http://182.61.35.7:80 即可看到nginx頁(yè)面
第十二步:安裝Mysql docker pull mysql 啟動(dòng):docker run -d \ --name cool_mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ mysql
-e參數(shù)是給給定環(huán)境變量,這里我們?cè)O(shè)定MySQL的密碼是123456。
鏈接到MySQL容器:
docker exec -it cool_mysql bash
登陸MySQL:
mysql -uroot -p123456
第十三步:PHP如何鏈接到MySQL,相信你也知道了,對(duì)的還是使用--link參數(shù),我們刪除掉cool_php_fpm容器,重新構(gòu)建
docker run -d \ --name cool_php_fpm \ -v /Users/Docker/src/:/usr/share/nginx/html/ \ --link cool_mysql \ php:7.1-fpm
第十四步:鏈接之后,PHP容器和MySQL容器能夠通信了,但是還是不夠呢(堅(jiān)持一下,最后一步了),初始PHP是沒(méi)有安裝MySQL擴(kuò)展的,安裝擴(kuò)張也極其容易,先進(jìn)入到PHP容器:
docker exec -it cool_php bash
然后用docker-php-ext-install命令安裝:
docker-php-ext-install mysqli > exit
我們重啟PHP容器:
docker restart cool_php_fpm
第十五步:測(cè)試腳本
<?php servername = "cool_mysql";username = "root"; password = "123456"; // Create connectionconn = new mysqli(servername,username, password); // Check connection if (conn->connect_error) { die("Connection failed: " . $conn->connect_error); } echo "Connected successfully";
訪問(wèn) http://182.61.35.7:80 /test.php 發(fā)現(xiàn)訪問(wèn)不了該頁(yè)面 !!! 尷尬。
原因是apt-get mysqli_ PHP擴(kuò)展沒(méi)有導(dǎo)入成功!
第十六步:docker-compose
安裝官方文檔:https://docs.docker.com/compose/install/#upgrading
Docker-Compose.yml文件編輯
docker-compose.yml,Docker compose file 參考文檔 https://deepzz.com/post/docker-compose-file.html
apt-get 與yum 的區(qū)別。apt-get是Debian、Ubuntu、Linux Mint、elementary OS等Linux發(fā)行版的默認(rèn)軟件包管理器
apt-get基本用法:apt-get install xxx/ apt-get update / apt-get upgrade /remove
Dockerfile 安裝PHP: https://juejin.im/post/5a9f2e89f265da23953083ee
Docker平時(shí)遇到的問(wèn)題
docker平時(shí)遇到的問(wèn)題:
https://github.com/IBBD/IBBD.github.io/blob/master/linux/docker/docker-questions.md
Docker安裝PHP+nginx+mysql 簡(jiǎn)書教程
我使用該教程來(lái)安裝 PHP:http://www.lxweimin.com/p/0561d3cfccda
唯一的問(wèn)題出現(xiàn)在:PHP 下的dockerfile無(wú)法安裝擴(kuò)展,于是刪除所有container、刪除所有鏡像,重試一遍。
之前的問(wèn)題是:PDO exception,PHP使用pdo報(bào)錯(cuò),原因是沒(méi)有導(dǎo)入mysql驅(qū)動(dòng)。