Docker создает среду lnmp

Docker
Docker создает среду lnmp

Если у вас есть, пожалуйстадобавить маленькую звездочку, если выигрыша нет, то можнобыть против нет помощи отчетСанлиан

1. Пользовательский образ Dockerfile

# 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

2. докер-сочинение

Для получения дополнительной информации, пожалуйста, проверьте https://docker_practice.gitee.io/compose/

  • Служба: Контейнер для приложения, который фактически может состоять из нескольких экземпляров контейнера, на которых запущен один и тот же образ.

  • Проект: полная бизнес-единица, состоящая из набора связанных контейнеров приложений, определенных в файле docker-compose.yml.

В-третьих, среда lnmp для оркестровки docker-compose.

1. MySQL

Здесь мы используем версию mysql5.5, у которой нет другого назначения, по сравнению с версией 5.7 и выше она занимает наименьший объем памяти и жесткого диска.

мы подготовилиmy.cnfВ качестве дополнительной настройки здесь я изменил часовой пояс базы данных

[mysqld]

default-time-zone = '+8:00'

FROM mysql:5.5

COPY my.cnf /etc/mysql/conf.d

EXPOSE 3306

2. Редис

Используем подготовленный конфигурационный файлredis.confПереопределить файл конфигурации запуска контейнера по умолчанию, измененныйip绑定и密码

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

3. монго

mongodb у нас нет специального лечения

FROM mongo:latest

EXPOSE 27017

4. нгинкс

Мы подготовили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

5. PHP

Сложнее всего здесь сделать PHP, потому что нам нужно добавить дополнительные расширения PHP, хотя докер PHP официально предоставляетdocker-php-ext-configure, docker-php-ext-install, docker-php-ext-enable, или некоторые расширения должны пройти手动编译илиpeclУстановить

Из-за медленной загрузки официального сайта pecl мы заранее скачали несколько необходимых расширений.

php-fpm использует систему debian linux, загрузка тоже очень медленная Мы оставляем за собой образ облака Alibaba.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

6. Полная версия

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

4. Ссылка

Категории