内容简介:<!-- TOC --><!-- /TOC -->有收获的话请
<!-- TOC -->
-
- 一、Dockerfile定制镜像
-
三、docker-compose编排lnmp环境
<!-- /TOC -->
有收获的话请 加颗小星星 ,没有收获的话可以 反对 没有帮助 举报 三连
一、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
二、docker-compose
详细请查看 https://docker_practice.gitee...
- 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
三、docker-compose编排lnmp环境
1、mysql
这里我们使用了 mysql 5.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
我们使用准备的配置文件 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、mongo
mongodb我们没有特殊处理
FROM mongo:latest EXPOSE 27017
4、nginx
我们准备了一份 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 官方提供了 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
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
四、参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Hyperledger Fabric环境搭建及环境测试(Mac环境)
- CV 环境很重要,各种环境搭建大全
- Openstack Queens 环境搭建(一)环境准备
- Python 环境搭建
- 1 - 搭建开发环境
- 搭建 Android 内核环境
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
零基础学Minecraft编程
Martin O''Hanlon、David Whale / 中文Minecraft Wiki翻译团队 / 人民邮电出版社 / 2015-9-7 / 79
在你体验Minecraft冒险的同时,学习宝贵的编程技能! 如果你很喜欢玩Minecraft,却被游戏中的建造耗费大量时间而困扰,并且你想要对游戏添加一些改动,那么本书就是为你而设计的。在游戏中,你可以学习许多Python编程技能,在PC、Mac或树莓派上与游戏进行互动。这些冒险不仅局限在虚拟世界——你也将会学习如何将Minecraft与电子元件连接起来,这样你的Minecraft世界就能够......一起来看看 《零基础学Minecraft编程》 这本书的介绍吧!