Если у вас есть, пожалуйстадобавить маленькую звездочку, если выигрыша нет, то можнобыть против нет помощи отчетСанлиан
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