Docker Php+Nginx+Mysql 安裝部署

PHP容器

一决左、構(gòu)建Dockerfile撒踪、配置php鏡像
  • 也可以不使用,直接拉取官方php鏡像
FROM php:7.3-fpm
MAINTAINER Qhs

ENV TZ=Asia/Shanghai

#更改國內(nèi)鏡像
RUN mv /etc/apt/sources.list /etc/apt/sources.list.bak \
    && echo 'deb http://mirrors.aliyun.com/debian/ buster main non-free contrib' > /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian-security buster/updates main' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian/ buster-updates main non-free contrib' >> /etc/apt/sources.list \
    && echo 'deb http://mirrors.aliyun.com/debian/ buster-backports main non-free contrib' >> /etc/apt/sources.list \
    && echo "構(gòu)建依賴" \
    && set -xe \
    && buildDeps=" \
        libmemcached-dev \
        zlib1g-dev \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
        libzip-dev \
    " \
    && echo "安裝php以及編譯構(gòu)建組件所需包" \
    && DEBIAN_FRONTEND=noninteractive \
    && apt-get update \
    && apt-get install -y  --no-install-recommends ${buildDeps} \
    && docker-php-ext-install -j$(nproc) bcmath calendar exif gettext sockets dba mysqli pcntl pdo_mysql shmop sysvmsg sysvsem sysvshm zip\
    && docker-php-ext-configure gd \
        --with-freetype-dir=/usr/include/ \
        --with-jpeg-dir=/usr/include/ \ 
        --with-png-dir=/usr/include/ \
        --with-zlib-dir=/usr \
    && docker-php-ext-install gd \
    && echo "清理" \
    && rm -rf /var/lib/apt/lists/* 

# 鏡像信息
LABEL Author="Qhs"
LABEL Version="v1.0.0"
LABEL Description="Qhs"

在Dockerfile文件所在的目錄下浦箱,執(zhí)行以下命令

sudo docker build -t qphp:v1.0.0 .

注意命令最后有一個點吸耿,代表當(dāng)前目錄
如果執(zhí)行結(jié)果最后出現(xiàn)下列success提示祠锣,表示構(gòu)建成功

Successfully built xxxxxxxxxx
Successfully tagged qphp:v1.0.0

使用docker images 查看鏡像,查看是否名為qphp咽安,tag為v1.0.0的鏡像伴网。
如果build不成功時,用RUN來分割妆棒,看下到底是哪個地方的命令出現(xiàn)錯誤澡腾。

二、創(chuàng)建PHP容器
  • 備份PHP配置文件糕珊。
    在宿主機 $PWD/work 目錄下动分,建立www(php文件)、log(日志信息)红选、etc(配置文件) 目錄澜公。
#備份配置文件。備份后刪除
docker run --name qphp -d qphp:v1.0.0
docker cp qphp:/usr/local/etc $PWD/work/etc/php
docker rm -f qphp
  • 正式創(chuàng)建PHP容器
#正式創(chuàng)建php容器
docker run --name qphp -p 9000:9000  --privileged  -v $PWD/work/www:/var/www/html -v $PWD/work/etc/php:/usr/local/etc  -v $PWD/work/log/php:/var/log/php -d qphp:v1.0.0

1喇肋、指定容器名為qphp
2坟乾、將9000端口轉(zhuǎn)到宿主機9000端口
3、掛載www蝶防、etc甚侣、log 目錄到宿主機的指定目錄

通過docker-php-ext-install安裝php拓展
以安裝redis為例

1,進入容器
    $ docker exec -it qphp bash
2慧脱,下載拓展到指定目錄
    $ curl -L -o /tmp/reids.tar.gz https://codeload.github.com/phpredis/phpredis/tar.gz/5.0.2
3渺绒,解壓拓展
    $ cd /tmp
    $ tar -xzf reids.tar.gz
4, 運行docker-php-source 菱鸥,創(chuàng)建并初始化 /usr/src/php目錄
    $ docker-php-source extract 
5宗兼,將解壓到文件轉(zhuǎn)移到php目錄中
    $ mv phpredis-5.0.2 /usr/src/php/ext/phpredis
6,檢查文件是否存在
    $ ls -l /usr/src/php/ext | grep redis
7氮采,運行docker-php-ext-install 殷绍,安裝插件
    $ docker-php-ext-install phpredis
8,檢查是否已經(jīng)安裝
    $ php -m | grep redis

卸載擴展鹊漠,直接刪除/usr/local/etc/php/conf.d 對應(yīng)的配置文件即可

Nginx容器

  • 拉取nginx鏡像
$ docker pull nginx
  • 備份 nginx 的配置文件
 //將文件copy到宿主機的工作目錄中主到,再刪除此容器
$ docker run --name  qnginx -d nginx
$ docker cp qnginx:/etc/nginx $PWD/work/etc/nginx
$ docker rm -f qnginx   
  • 啟動nginx容器
docker run --name qnginx -p 80:80 --link qphp:qphp-fpm  -v $PWD/work/www:/usr/share/nginx/html -v $PWD/work/etc/nginx:/etc/nginx -v $PWD/work/log/nginx:/var/log/nginx  -d  nginx

1、指定容器名為qnginx
2躯概、將容器80端口轉(zhuǎn)到宿主機80端口
3登钥、掛載www、etc娶靡、log 目錄到宿主機的指定目錄
4牧牢、--link A:B 用來連接兩個容器,使兩個容器之間可以互相通訊,接收容器可以使用源容器的環(huán)境變量等塔鳍。其中A是源容器伯铣,B是別名,當(dāng)前nginx容器為接收容器轮纫。

  • 配置文件
#修改nginx的配置文件
location ~ \.php(/|$) {
        fastcgi_pass   qphp-fpm:9000;//此處使用上面的別名腔寡。不建議使用ip,因為ip重啟可能會變更
        fastcgi_index  index.php;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/xxxxxxxxx$fastcgi_script_name;
        fastcgi_param  SCRIPT_NAME      $fastcgi_script_name;
        
        fastcgi_param  PATH_INFO $fastcgi_path_info;
        fastcgi_param  PATH_TRANSLATED /var/www/html/xxxxxxxxx$fastcgi_path_info;
        include        fastcgi_params;
    }
#xxxxxxxxx為具體項目目錄掌唾,使用時注意修改

Mysql容器

  • 拉取Mysql鏡像
$ docker pull mysql
  • 創(chuàng)建啟動Mysql容器
docker run  --name qmysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root   -di mysql

1放前、指定容器名為qmysql
2、將容器3306端口指到宿主機3306端口

  • 檢查是否創(chuàng)建成功
    使用 docker ps 命令糯彬,如果有NAMES為qmysql的容器犀斋,表示已經(jīng)啟動。
    如果沒有看到情连,可以使用 docker log qmysql 命令來查看錯誤日志。
    根據(jù)提示信息览效,修改后却舀,docker rm qmysql 刪除剛剛的容器,重新創(chuàng)建锤灿。

  • 配置Mysql

1挽拔,進入mysql容器
  $ docker exec -it qmysql bash
2,進入mysql中
  $ mysql -uroot -proot;
3但校,查看mysql版本
  $ status;
4螃诅,授權(quán)遠(yuǎn)程連接
  $ GRANT ALL ON *.* TO  'root'@'%';
5,刷新
  $ flush privileges;
6状囱,更改加密規(guī)則
  $ ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
7术裸,修改root密碼
  $ ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
8,刷新
  $ flush privileges;
9亭枷,至此袭艺,配置msyql完成。退出mysql,退出容器
  $ exit; 

補充:如果需要搭建指定版本的mysql叨粘,拉取的時候帶上版本號猾编,docker pull mysql:5.x ,并且使用該鏡像啟動容器升敲,5.x在容器內(nèi)只需要授權(quán)遠(yuǎn)程連接答倡,不用修改加密規(guī)則就可以了。

與mysql通訊
  1. 使用link來通訊驴党。在上面創(chuàng)建容器的命令中瘪撇,加入 --link qmysql:qmysql
  2. 使用IP地址
    2.1、使用命令,docker exec qnginx env 來查看環(huán)境變量设江。此信息在源容器重啟后不會自動更新锦茁。
    2.2、使用命令叉存,docker exec -it qnginx cat /etc/hosts 獲取接收容器/ect/hosts中的配置信息码俩。此信息會自動更新。
    2.3歼捏、使用上面查詢出來的mysql的ip地址稿存,即可訪問。
    例如:mysql容器IP為172.17.0.4瞳秽,后續(xù)連接為172.17.0.4即可
  3. 訪問宿主機瓣履,再通過端口進入mysql
    3.1、 mac for docker 18.03 版本后可以用 host.docker.internal 來訪問练俐。只能用于mac袖迎,不可用于開發(fā)環(huán)境。

應(yīng)該還有其他方式腺晾,用到再說燕锥。

Docker 簡單操作
docker start qphp qnginx //容器啟動,注意順序悯蝉,如果有l(wèi)ink归形,最后啟動
docker restart qphp //容器重啟
docker stop qphp //容器停止
docker ps -a //查看所有容器
docker images //查看所有鏡像
docker rm qphp //刪除容器
docker rmi php //刪除鏡像
docker exec -it qphp bash //進入容器
docker exec qnginx env //查看容器環(huán)境變量
docker log qmysql //查看錯誤日志

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鼻由,隨后出現(xiàn)的幾起案子暇榴,更是在濱河造成了極大的恐慌,老刑警劉巖蕉世,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔼紧,死亡現(xiàn)場離奇詭異,居然都是意外死亡狠轻,警方通過查閱死者的電腦和手機歉井,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哈误,“玉大人哩至,你說我怎么就攤上這事∶圩裕” “怎么了菩貌?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長重荠。 經(jīng)常有香客問我箭阶,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任仇参,我火速辦了婚禮嘹叫,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘诈乒。我一直安慰自己罩扇,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布怕磨。 她就那樣靜靜地躺著喂饥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪肠鲫。 梳的紋絲不亂的頭發(fā)上员帮,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音导饲,去河邊找鬼捞高。 笑死,一個胖子當(dāng)著我的面吹牛渣锦,可吹牛的內(nèi)容都是我干的棠枉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼泡挺,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了命浴?” 一聲冷哼從身側(cè)響起娄猫,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎生闲,沒想到半個月后媳溺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡碍讯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年悬蔽,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捉兴。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡蝎困,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倍啥,到底是詐尸還是另有隱情禾乘,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布虽缕,位于F島的核電站始藕,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伍派,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一江耀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧诉植,春花似錦祥国、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至建车,卻和暖如春扩借,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背缤至。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工潮罪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人领斥。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓嫉到,卻偏偏與公主長得像,于是被迫代替她去往敵國和親月洛。 傳聞我的和親對象是個殘疾皇子何恶,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容