Docker(三)docker-compose

/

2018-11-9

目标:做到能用一行命令快速部署一个博客系统,可以在浏览器中访问

项目地址:https://github.com/Yipartner/blog-docker

第一步:建立dnmp环境

目录结构

  1. |-- docker-compose.yml
  2. |-- my.cnf
  3. |-- mysql
  4. |-- nginx
  5. | |-- nginx.conf
  6. | `-- sites
  7. | `-- test
  8. |-- php
  9. `-- www

docker-compose.yml

  1. version: '3'
  2. services:
  3. nginx:
  4. image: nginx
  5. ports:
  6. - "8090:80"
  7. links:
  8. - php-fpm
  9. volumes:
  10. - ./www:/var/www/html
  11. - ./nginx/sites:/etc/nginx/sites-enabled
  12. - ./nginx/nginx.conf:/etc/nginx/nginx.conf
  13. command: ["nginx",'-g','daemon off;']
  14. php-fpm:
  15. image: 'bitnami/php-fpm:7.2'
  16. volumes:
  17. - ./www:/var/www/html
  18. - ./php/:/bitnami/php/conf/
  19. links:
  20. - mysql
  21. - redis
  22. mysql:
  23. image: mysql
  24. restart: always
  25. environment:
  26. MYSQL_ROOT_PASSWORD: "${DB_PASSWORD}"
  27. volumes:
  28. - ./mysql:/var/lib/mysql
  29. - ./my.cnf:/etc/mysql/my.cnf
  30. redis:
  31. image: redis
  • nginx 正常配置
  • php-fpm 镜像选择了bitnami/php-fpm,此镜像自带composer
  • mysql 注意看下面的my.cnf

my.cnf

  1. [mysqld]
  2. pid-file = /var/run/mysqld/mysqld.pid
  3. socket = /var/run/mysqld/mysqld.sock
  4. datadir = /var/lib/mysql
  5. secure-file-priv= NULL
  6. symbolic-links=0
  7. #注意看下面这行
  8. default-authentication-plugin = mysql_native_password
  9. !includedir /etc/mysql/conf.d/
  • 这里相较于原文件加了一条default-authentication-plugin = mysql_native_password,这是因为mysql8.0更换了用户验证插件,而PHP7.2及以下版本还未支持,因此我们在此强调一下:用户验证插件采用旧版本

第二步 博客配置

.env

  1. DB_USERNAME=root
  2. DB_PASSWORD=root
  3. PUB_DATABASE=pub
  4. BLOG_NAME=YourName
  5. BLOG_HOME_NAME=YourBlogName
  6. BLOG_ADMIN_EMAIL=YourAdminEmailAdress@email.com
  7. BLOG_ADMIN_PASSWORD=YourAdminPassword
  8. HOME_PICTURE=YourHomePagePictureUrl
  • 在docker-compose.yml同级目录下,可以在docker-compose.yml中引用此文件中的环境变量,如mysql容器中的数据库密码
  • 这里主要写了一些博客要用到的环境变量,可以配置一些博客初始样式

第三步 脚本书写

install.bash

脚本很low,没有异常处理,不过很容易看懂

  • 在添加此脚本之前基本的准备已经完成,但还没有组织起来,laravel项目需要执行composer install以及php artisan等操作,所以我们采用最简单有效的方式——bash脚本
  1. #/bin/bash
  2. #引入.env文件以使用环境变量
  3. . .env
  4. #创建mysql,php容器数据卷
  5. mkdir ./mysql
  6. mkdir ./php
  7. #启动容器
  8. docker-compose up -d
  9. #laravel项目操作
  10. cp ./www/pub2.0/.env.example ./www/pub2.0/.env
  11. #容器内执行 一些环境配置操作
  12. docker exec blogdocker_php-fpm_1 composer update -d /var/www/html/pub2.0
  13. docker exec blogdocker_mysql_1 mysqladmin -u"$DB_USERNAME" -p"$DB_PASSWORD" create "$PUB_DATABASE";
  14. docker exec blogdocker_php-fpm_1 php /var/www/html/pub2.0/artisan k:g
  15. docker exec blogdocker_php-fpm_1 php /var/www/html/pub2.0/artisan migrate
  16. echo "DB_USERNAME=$DB_USERNAME" >> ./www/pub2.0/.env
  17. echo "DB_PASSWORD=$DB_PASSWORD" >> ./www/pub2.0/.env
  18. echo "PUB_DATABASE=$PUB_DATABASE" >> ./www/pub2.0/.env
  19. echo "BLOG_HOME_NAME=$BLOG_HOME_NAME" >> ./www/pub2.0/.env
  20. echo "BLOG_ADMIN_EMAIL=$BLOG_ADMIN_EMAIL" >> ./www/pub2.0/.env
  21. echo "BLOG_ADMIN_PASSWORD=$BLOG_ADMIN_PASSWORD" >> ./www/pub2.0/.env
  22. echo "BLOG_NAME=$BLOG_NAME" >> ./www/pub2.0/.env
  23. echo "HOME_PICTURE=$HOME_PICTURE" >> ./www/pub2.0/.env
  24. echo "SUCCESS INSTALL 0(^_^)0"

第四步执行脚本

  • 因为有一步composer update,所以会非常慢,请耐心等待
  • 执行完毕访问响应端口(文件默认的为本地8090端口)

Reproduced please indicate the author and the source, and error a link to this page.
text link: //sealbaby.cn/docker-3

Say something...

Website
Username
Email