docker中安裝lnmp開發環境

今天記錄一下,我在win10子系統wsl2中利用docker容器技術來定製自己的開發環境,也算是對以前學習的docker知識點進行一個綜合練習吧

至於怎麼安裝子系統,可以檢視我以前記錄的筆記

環境配置

環境配置

由於我這有的專案時間比較久,為了相容,我的php版本先安裝個5。6,等後面我再安裝一個比較新的版本切換

子系統是

ubuntu20。04

nginx版本

1。20。1

php

版本:

5。6。9

mysql

版本:

5。7。27

redis

版本:

6。0。6

目錄結構

├── data #掛載資料卷的目錄

│ ├── mysql

│ └── redis

├── docker #docker容器的一些配置啟動檔案

│ ├── bin #用於docker-compose的管理 目錄

│ │ └── docker-compose-dev。yml

│ ├── config #容器服務的配置檔案目錄

│ │ ├── mysql

│ │ ├── nginx

│ │ ├── php

│ │ └── redis

│ └── dockerfile #各個容器的dockerfile目錄

│ ├── mysql-5。7。27

│ ├── nginx-1。20。1

│ ├── php-5。6。9

├──ext #這個裡面會儲存一些php擴充套件原始碼

│ └── redis-6。0。6

├── log

│ ├── mysql

│ ├── nginx

│ ├── php

│ └── redis

└── www

步驟

Nginx Dockerfile

檔案

FROM nginx:1。20。1

LABEL author=“lnssm”

LABEL email=3088573902@qq。com

LABEL version=“1。0”

#時區

ENV TZ Asia/Shanghai

RUN date -R

#在容器裡啟動的服務都不能在後臺執行,注意後面的分號別丟了

CMD [“nginx”,“-g”,“daemon off;”]

測試nginx Dockerfile檔案

#在dockerfile目錄下執行如下命令,執行測試能否成功

docker build -t lnssm/nginx:1。0 。

#執行nginx服務,使用curl測試

docker run ——name mynginx -d -p 80:80 lnssm/nginx:1。0

#使用curl測試,或用瀏覽器測試

curl localhost

mysql Dockerfile

檔案

FROM mysql:5。7。27

LABEL author=“lnssm”

LABEL email=3088573902@qq。com

LABEL version=“1。0”

#設定時區

ENV TZ Asia/Shanghai

RUN date -R

CMD [“mysqld”]

測試mysql Dockerfile檔案

#在dockerfile目錄下執行如下命令,執行測試能否成功

docker build -t lnssm/mysql:1。0 。

#執行nginx服務,使用curl測試

docker run ——name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 lnssm/mysql:1。0

#使用curl測試,或用瀏覽器測試

docker exec -it mysql mysql -uroot -p #回車輸入密碼,能否進入到mysql

redis Dockerfile

檔案

FROM redis:6。0。6

LABEL author=“lnssm”

LABEL email=3088573902@qq。com

LABEL version=“1。0”

#設定時區

ENV TZ Asia/Shanghai

RUN date -R

#容器啟動時執行的命令

CMD [“redis-server”]

測試redis Dockerfile檔案

#在dockerfile目錄下執行如下命令,執行測試能否成功

docker build -t lnssm/redis:1。0 。

#執行nginx服務,使用curl測試

docker run ——name myredis -d lnssm/redis:1。0

#使用redis 客戶端連結測試

docker exec -it myredis redis-cli

PHP Dockerfile

檔案

FROM php:5。6。9-fpm

LABEL author=“lnssm”

LABEL email=3088573902@qq。com

LABEL version=“1。0”

#設定時區

ENV TZ Asia/Shanghai

RUN date -R

#安裝依賴

RUN apt-get update ——fix-missing && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev

RUN docker-php-ext-configure gd ——with-freetype-dir=/usr/include ——with-jpeg-dir=/usr/include/jpeg

COPY 。/ext/redis-4。3。0。tgz /usr/src/php/ext

#ADD 。/ext/amqp-1。10。2。tgz /usr/src/php/ext/amqp

CMD cd /usr/src/php/ext && tar -zxvf redis-4。3。0。tgz && rm -rf redis-4。3。0。tgz && mv redis-4。3。0 redis && docker-php-ext-install redis

#RUN cd /usr/src/php/ext && tar -zxvf amqp-1。10。2。tgz && rm -rf amqp-1。10。2。tgz && mv amqp-1。10。2 amqp && docker-php-ext-install amqp

#ADD ftp://mcrypt。hellug。gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2。5。7。tar。gz \

# && cd libmcrypt-2。5。7 && 。/configure –prefix=/usr/local && make && make install

RUN docker-php-ext-install gd mysqli opcache pdo pdo_mysql gd zip bcmath fileinfo hash iconv

#設定環境變數

ENV PHPREDIS_VERSION 4。3。0

#ENV PHPAMQP_VERSION 1。10。2

ENV PHPSWOOLE_VERSION 1。10。1

ENV PHPMONGODB_VERSION 1。5。3

ENV PHPUUID_VERSION 1。2。0

#RUN pecl install redis-$PHPREDIS_VERSION \

# && pecl install swoole-$PHPSWOOLE_VERSION \

# && pecl install mongodb-$PHPMONGODB_VERSION \

# && pecl install amqp-$PHPAMQP_VERSION \

# && docker-php-ext-enable redis swoole mongodb uuid

#安裝composer工具

RUN php -r “copy(‘https://getcomposer。org/installer’, ‘composer-setup。php’);” \

&& php composer-setup。php \

&& php -r “unlink(‘composer-setup。php’);” \

&& mv composer。phar /usr/local/bin/composer \

&& composer config -g repo。packagist composer https://mirrors。aliyun。com/composer/

# clear

RUN rm -rf /var/cache/apt/* \

&& rm -rf /var/lib/apt/lists/*

RUN mkdir /var/lib/sessions \

&& chmod o=rwx -R /var/lib/sessions

#容器啟動時執行指令

CMD [“php-fpm”]

Docker-compose-dev。yml

配置

version: ‘3。3’

services:

nginx:

build: /mnt/d/wsl_www/docker/dockerfile/nginx-1。20。1

container_name: nginx

ports:

- “80:80”

restart: always

tty: true

volumes:

- /mnt/d/wsl_www/www:/var/www/html

- /mnt/d/wsl_www/log/nginx:/var/log/nginx

- /mnt/d/wsl_www/docker/config/nginx:/etc/nginx

- /mnt/d/wsl_www/docker/config/nginx/letsencrypt:/etc/letsencrypt

networks:

- lnmp-networks

php5。6:

build: /mnt/d/wsl_www/docker/dockerfile/php-5。6。9

tty: true

restart: always

container_name: php5。6

volumes:

- /mnt/d/wsl_www/www:/var/www/html

- /mnt/d/wsl_www/log/php:/var/log/php

- /mnt/d/wsl_www/docker/config/php:/usr/local/etc/php/

- /mnt/d/wsl_www/docker/config/php:/usr/local/etc/

depends_on:

- nginx

networks:

- lnmp-networks

redis:

build: /mnt/d/wsl_www/docker/dockerfile/redis-6。0。6

container_name: redis

tty: true

restart: always

ports:

- “6379:6379”

volumes:

- /mnt/d/wsl_www/docker/config/redis:/usr/local/etc/redis

- /mnt/d/wsl_www/data/redis:/data

- /mnt/d/wsl_www/log/redis:/var/log/redis

networks:

- lnmp-networks

mysql:

build: /mnt/d/wsl_www/docker/dockerfile/mysql-5。7。27

container_name: mysql

tty: true

restart: always

ports:

- “3306:3306”

volumes:

- /mnt/d/wsl_www/data/mysql:/var/lib/mysql

- /mnt/d/wsl_www/docker/config/mysql:/etc/mysql

- /mnt/d/wsl_www/log/mysql:/var/log/mysql

environment:

MYSQL_ROOT_PASSWORD: 123456

networks:

- lnmp-networks

networks:

lnmp-networks:

遇到的坑

1 。 訪問php檔案顯示: 404 file not found

#解決辦法,修改root路徑與專案路徑一致,預設是在/usr/share/nginx/html/ ,

location ~ \。php$ {

root /var/www/html; #這裡修改一下

include fastcgi_params;

fastcgi_index index。php;

fastcgi_pass php5。6:9000; #容器:埠號

#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

}

2 。

連線docker裡的資料庫,得使用資料庫的容器名稱!

安裝php擴充套件amqp遇的坑,記錄一下步驟

#這裡我沒有放在php的 Dockerfile檔案裡,有需要的可以直接加上就可以了!!!

說明

#我這裡把php擴充套件原始碼包和依賴包都放在php5。6。9的目錄下的ext目錄下!!!!

環境說明

子系統是

ubuntu20。04

nginx版本

1。20。1

php

版本:

5。6。9

mysql

版本:

5。7。27

redis

版本:

6。0。6

amqp-1。10。2(當時最新版本)

rabbitmq-c-0。8。0(別的版本沒有裝成功)

步驟

1 。

原始碼包和依賴包得到到php容器中

#命令

docker cp amqp-1。10。2。tgz php5。6。9:/home

docker cp rabbitmq-c-0。8。0。tar。gz php5。6。9:/home

2 。

先安裝依賴

解壓

#解壓命令

tar -zxvf rabbitmq-c-0。8。0。tar。gz && cd rabbitmq-c-0。8。0 && rm -rf rabbitmq-c-0。8。0。tar。gz

編譯並安裝

#指定安裝目錄並編譯安裝

。/configure ——prefix=/usr/local/rabbitmq-c-0。8。0 && make && make install

3 。

再安裝php擴充套件amqp

解壓amqp-1。10。2。tgz

#解壓

tar -zxvf amqp-1。10。2。tgz && cd amqp-1。10。2

設定php配置目錄,編譯安裝

#使用phpize生成配置指令碼

/usr/local/bin/phpize

#編譯

。/configure ——with-php-config=/usr/local/bin/php-config ——with-amqp ——with-librabbitmq-dir = /usr/local/rabbitmq-c-0。8。0 && make && make install

可能出現的問題

#問題是amqp_ssl_socket。h not found

#解決辦法:需要向依賴包裡把這個檔案得到到這amqp-1。10。2目錄中

cp cp /home/rabbitmq-c-0。8。0/librabbitmq/amqp_ssl_socket。h /home/amqp-1。10。2/

#再重新make && make install

4 。 修改php。ini配置檔案

#我這裡是沒有docker-php-ext-enable這個指令碼的,

#php。ini配置檔案新增,可以使用php -i |grep php。ini 檢視配置檔案路徑

extension=amqp。so

5 。

重啟php 服務

#檢視php 載入的模組

php -m