今天記錄一下,我在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