使用docker部署一套LNMP环境
使用docker部署一套LNMP环境
以前要在一个全新的环境部署一套LNMP环境,需要花费很多时间,大部分时间耗在了各种依赖库的处理上,人生苦短,在这种重复机械的事情上耗费太多时间简直是在慢性自杀,普通的人沉浸于此而不自知,厉害的人早已利用新的技术栈,避免自己的时间浪费在这里
docker就是一个很好的解决方案,docker相关的技术资料网络上很多,不是本文的主题,本文主要讲解如何通过docker快速部署一个LNMP环境,并且docker配置文件写好了可移植性很高,你可以在其它机器上直接运行一个命令就能部署好。切记,从重复性的工作解脱出来,交给机器,它干的会比你好。
工作目录准备:
新建一个新的目录,就命名为docker吧,里面分别建立几个软件对应的文件夹,mysql,nginx,php,redis之类的,最终目录结构如下:
/docker/
├── mysql
├── nginx
├── php
└── redis
制作自己的php镜像
mysql,nginx,redis这些服务基本上可以直接用官方的docker镜像,php不行,因为我们肯定要安装一些自己的扩展,比如mysqli,redis,swoole之类的,所以我们需要针对php定制一个自己的镜像
进入php文件夹,编写Dockerfile文件,内容如下:
FROM php:7.2.7-fpm ENV PHPREDIS_VERSION 4.0.0 RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo # timezone RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ && echo 'Asia/Shanghai' > /etc/timezone # linux lib tool RUN sed -i 's/http:\/\/archive\.ubuntu\.com\/ubuntu\//http:\/\/mirrors\.aliyun\.com\/ubuntu\//g' /etc/apt/sources.list \ && apt remove lsb-base -y \ && apt-get update \ && apt-get install -y \ curl \ wget \ git \ zip \ vim \ libcurl3-dev \ libz-dev \ libssl-dev \ libnghttp2-dev \ libpcre3-dev \ libmcrypt-dev \ libpng-dev \ && apt-get clean \ && apt-get autoremove # php base ext RUN docker-php-ext-install mysqli \ && docker-php-ext-install pdo_mysql \ && docker-php-ext-install gd \ && docker-php-ext-install mbstring \ && docker-php-ext-install bcmath # swoole ext RUN wget https://pecl.php.net/get/swoole-4.3.4.tgz -O /tmp/swoole-4.3.4.tgz \ && pecl install /tmp/swoole-4.3.4.tgz \ && rm -rf /tmp/swoole-4.3.4.tgz \ && docker-php-ext-enable swoole # redis ext RUN wget http://pecl.php.net/get/redis-${PHPREDIS_VERSION}.tgz -O /tmp/redis.tar.tgz \ && pecl install /tmp/redis.tar.tgz \ && rm -rf /tmp/redis.tar.tgz \ && docker-php-ext-enable redis RUN useradd -m www && echo "www:www" | chpasswd www && adduser www sudo EXPOSE 9000 CMD php-fpm
大家如果需要安装其他扩展,照着上面的格式添加就可以了,可以通过pecl安装,也可以源码安装,执行命令和在Linux安装是一样的,需要注意的是,尽量在一条RUN命令下完成,通过&&来顺序执行多条Linux命令。另外,安装完的扩展源文件记得要删掉,避免最终的镜像太大
build镜像,-t指定镜像名,最后一个点别忘了,表示当前目录,也就是Dockerfile所在的目录
docker build -t php7:7.2.7 .
编写docker-compose.yml文件
docker-compose.yml是docker-compose的默认配置文件,是docker-compose用来编排多个容器的配置文件
回到最开始的docker目录下,新建docker-compose.yml
内容如下:
version: "3" services: nginx: image: nginx:1.17. ports: - "80:80" - "443:443" - "8000:8000" - "8080:8080" volumes: - ./nginx:/nginx - ./nginx/nginx.conf:/etc/nginx/nginx.conf - /home/www:/home/www depends_on: - php7 privileged: true networks: mynetwork: ipv4_address: 172.19.0.100 php: image: php7:7.2.7 restart: always ports: - "7000:9000" volumes: - /home/www:/home/www - ./php/etc:/usr/local/etc/php - ./php/log:/var/log/php depends_on: - mysql restart: always command: php-fpm -c /usr/local/etc/php/php.ini -y /usr/local/etc/php/php-fpm.conf -F networks: mynetwork: ipv4_address: 172.19.0.101 redis: image: redis:4.0 ports: - "6379:6379" volumes: - ./redis:/redis - ./redis/data:/data networks: mynetwork: mysql: image: mysql:5.7 restart: always ports: - "3306:3306" volumes: - ./mysql/my.cnf:/etc/mysql/my.cnf - ./mysql/data:/var/lib/mysql - ./mysql:/mysql environment: MYSQL_ALLOW_EMPTY_PASSWORD: "yes" networks: mynetwork: networks: mynetwork: ipam: config: - subnet: 172.19.0.0/16
以上就是docker-compose.yml的内容,编写好后,运行
docker-compose up -d
至此,一套LNMP服务就搭起来了。
分析下上面的配置文件
对于nginx,暴露了几个常见的web端口,并且把配置文件,www目录和宿主机的目录绑定,此外还配置了固定的网络和IP地址
对于php,用的是自己制作的镜像,同样的把配置文件,www目录和宿主机目录绑定
下面的mysql和redis也类似
参考资料:
docker官方文档: https://docs.docker.com/
docker技术文章: https://www.geek-share.com/cate/docker.html
- 基于Docker的RabbitMQ集群搭建作业
- Ubuntu下安装Docker,并配置国内镜像
- 基于docker的canal-server部署作业
- docker命令整理
- Docker实践总结
- hyperledger fabric 1.0.5 分布式部署 (二)
- Postgresql 部署安装文档
- CentOS Docker环境搭建教程
- 基于百度云 BOS 搭建私有 Docker Registry
- centos6.5上安装docker
- 在kubernetes上实现tomcat日志的持久化
- Docker集群管理之Docker Machine
- 微服务部署:蓝绿部署、滚动部署、灰度发布、金丝雀发布
- LinuxStory 资讯速递 20151121 Ubuntu Touch OTA-8 官方更新来袭!
- docker