<!-- TOC -->php
docker搭建lnmp環境html
<!-- /TOC -->linux
有收穫的話請加顆小星星,沒有收穫的話能夠 反對 沒有幫助 舉報三連nginx
# FROM 指定基礎鏡像 FROM 鏡像 FROM php:7.2-fpm # RUN 執行 RUN <命令> or RUN ["可執行文件", "參數1", "參數2"] RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html RUN ["php", "-S", "0.0.0.0:8080"] # COPY 複製文件 COPY <源路徑>... <目標路徑> COPY swoole-4.2.10.tgz /home COPY nginx.conf /etc/nginx/nginx.conf # ADD 複製文件或目錄,若是是.tgz,會被解壓縮 ADD <源路徑>... <目標路徑> ADD nginx.conf /etc/nginx/nginx.conf # CMD 容器啓動 CMD echo $HOME => CMD [ "/bin/sh", "-c", "echo $HOME" ] CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] # ENTRYPOINT 入口點 ENTRYPOINT ["docker-entrypoint.sh"] 存在 ENTRYPOINT 後,CMD 的內容將會做爲參數傳給 ENTRYPOINT # ENV 環境變量 ENV <key> <value> ENV MYSQL_ROOT_PASSWORD root # ARG與ENV差很少 ARG 所設置的構建環境的環境變量,在未來容器運行時是不會存在這些環境變量的 ENV MYSQL_ROOT_PASSWORD root # VOLUME 匿名卷 VOLUME ["<路徑1>", "<路徑2>"...] VOLUME ["/data"] # EXPOSE 暴露端口 EXPOSE <端口1> [<端口2>...] EXPOSE 80 443 # WOEKDIR 指定工做目錄,進入容器後的落地目錄 WORKDIR <工做目錄路徑> WORKDIR /var/www # USER 指定當前用戶 USER <用戶名> USER root
詳細請查看 https://docker_practice.gitee...git
這裏咱們使用了mysql5.5版本,沒其它用意,相比5.7以上版本,佔內存和硬盤最小的一個版本github
咱們準備了一個my.cnf
做爲額外配置,這裏我修改了數據庫的時區redis
[mysqld] default-time-zone = '+8:00'
FROM mysql:5.5 COPY my.cnf /etc/mysql/conf.d EXPOSE 3306
咱們使用準備的配置文件redis.conf
覆蓋容器默認啓動的配置文件,修改了ip綁定
和密碼
sql
bind 0.0.0.0 requirepass root
FROM redis:latest COPY redis.conf /usr/local/etc/redis/redis.conf CMD [ "redis-server", "/usr/local/etc/redis/redis.conf" ] EXPOSE 6379
mongodb咱們沒有特殊處理mongodb
FROM mongo:latest EXPOSE 27017
咱們準備了一份nginx.conf
和虛擬目錄conf.d
,爲了之後能夠動態的配置網站的代理和負載均衡
還有一個日誌目錄,放在外層logs
目錄裏面,記錄nginx的訪問日誌
特別注意的是fastcgi_pass php:9000;
而不是fastcgi_pass 127.0.0.1:9000;
,目前本身也沒明白
FROM nginx:alpine COPY nginx.conf /etc/nginx/nginx.conf EXPOSE 80
php算是這裏面最難搞定的,由於咱們須要額外的添加php擴展,雖然php的docker官方提供了docker-php-ext-configure
, docker-php-ext-install
, docker-php-ext-enable
,仍是有些擴展須要經過手動編譯
或者pecl
安裝
因爲pecl官網下載慢,咱們事先下載好了幾個須要的擴展
php-fpm用的是debian的linux系統,下載也很慢,咱們備用了阿里雲的鏡像sources.list
咱們還準備了php的默認配置php.ini
和opcache.ini
好比swoole擴展安裝,記得安裝包用完後清理,還有得用COPY
命令,ADD
會解壓縮
# swoole COPY swoole-4.2.10.tgz /home RUN pecl install /home/swoole-4.2.10.tgz && \ docker-php-ext-enable swoole && \ rm /home/swoole-4.2.10.tgz
version: '3' networks: frontend: driver: bridge backend: driver: bridge volumes: mysql: driver: local mongo: driver: local redis: driver: local services: php: build: ./php volumes: - ${WORKER_DIR}:/var/www ports: - 9100:9000 depends_on: - mysql - redis - mongo networks: - backend nginx: build: ./nginx volumes: - ${WORKER_DIR}:/var/www - ./logs/nginx:/var/log/nginx - ./nginx/conf.d:/etc/nginx/conf.d ports: - 8000:80 depends_on: - php networks: - frontend - backend mysql: build: ./mysql environment: - MYSQL_ROOT_PASSWORD=root volumes: - ${DATA_PATH}/mysql:/var/lib/mysql ports: - 3310:3306 networks: - backend mongo: build: ./mongo environment: - MONGO_INITDB_ROOT_USERNAME=root - MONGO_INITDB_ROOT_PASSWORD=root ports: - 27010:27017 volumes: - ${DATA_PATH}/mongo:/data/db networks: - backend redis: build: ./redis volumes: - ${DATA_PATH}/redis:/data ports: - 6310:6379 networks: - backend