【云原生Docker篇】使用 Docker-compose 搭建lnmp(下)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 前言服务编排:应用编排:单机环境下:shell/python脚本多机/集群环境下:ansible、saltstack、pubbet

3.3 配置mysql

#进入mysql子目录
 [root@yuji ~]# cd /opt/compose_lnmp/mysql/
 #将mysql包上传到此目录
 [root@yuji mysql]# ls
 mysql-boost-5.7.20.tar.gz
 #编写mysql的Dockerfile文件
 [root@yuji mysql]# vim Dockerfile
 FROM centos:7
 MAINTAINER this is mysql image <zhi>
 RUN yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake make
 RUN useradd -M -s /sbin/nologin  mysql
 ADD mysql-boost-5.7.20.tar.gz /usr/local/src/
 WORKDIR /usr/local/src/mysql-5.7.20/
 RUN cmake \
 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
 -DSYSCONFDIR=/etc \
 -DSYSTEMD_PID_DIR=/usr/local/mysql \
 -DDEFAULT_CHARSET=utf8  \
 -DDEFAULT_COLLATION=utf8_general_ci \
 -DWITH_INNOBASE_STORAGE_ENGINE=1 \
 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
 -DMYSQL_DATADIR=/usr/local/mysql/data \
 -DWITH_BOOST=boost \
 -DWITH_SYSTEMD=1 && make -j8 && make install
 RUN chown -R mysql:mysql /usr/local/mysql/
 ADD my.cnf /etc/
 RUN chown mysql:mysql /etc/my.cnf
 ENV PATH /usr/local/mysql/bin:/usr/local/mysql/lib:$PATH
 WORKDIR /usr/local/mysql/
 RUN bin/mysqld \
 --initialize-insecure \
 --user=mysql \
 --basedir=/usr/local/mysql \
 --datadir=/usr/local/mysql/data
 RUN cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
 EXPOSE 3306
 CMD /usr/local/mysql/bin/mysqld
复制代码


myslq主配置文件my.cnf

#配置myslq主配置文件my.cnf(用来复制到容器)
 [root@yuji mysql]# vim my.cnf 
 [client]
 port = 3306
 socket = /usr/local/mysql/mysql.sock
 [mysql]
 port = 3306
 socket = /usr/local/mysql/mysql.sock
 [mysqld]
 user = mysql
 basedir = /usr/local/mysql
 datadir = /usr/local/mysql/data
 port = 3306
 character_set_server=utf8
 pid-file = /usr/local/mysql/mysqld.pid
 socket = /usr/local/mysql/mysql.sock
 server-id = 1
 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
复制代码


3.4 配置php

[root@yuji compose_lnmp]# cd /opt/compose_lnmp/php/
 #将php包上传
 [root@yuji php]# ls
 php-7.1.10.tar.bz2
 #编写php的Dockerfile
 [root@yuji php]# vim Dockerfile
 FROM centos:7
 MAINTAINER this is php image <yuji>
 RUN yum -y install gd \
 libjpeg libjpeg-devel \
 libpng libpng-devel \
 freetype freetype-devel \
 libxml2 libxml2-devel \
 zlib zlib-devel \
 curl curl-devel \
 openssl openssl-devel \
 gcc gcc-c++ make pcre-devel
 RUN useradd -M -s /sbin/nologin nginx
 ADD php-7.1.10.tar.bz2 /usr/local/src/
 WORKDIR /usr/local/src/php-7.1.10
 RUN ./configure \
 --prefix=/usr/local/php \
 --with-mysql-sock=/usr/local/mysql/mysql.sock \
 --with-mysqli \
 --with-zlib \
 --with-curl \
 --with-gd \
 --with-jpeg-dir \
 --with-png-dir \
 --with-freetype-dir \
 --with-openssl \
 --enable-fpm \
 --enable-mbstring \
 --enable-xml \
 --enable-session \
 --enable-ftp \
 --enable-pdo \
 --enable-tokenizer \
 --enable-zip && make && make install
 ENV PATH /usr/local/php/bin:/usr/local/php/sbin:$PATH
 RUN \cp /usr/local/src/php-7.1.10/php.ini-development /usr/local/php/lib/php.ini \
 && sed -i 's#mysqli.default_socket =#mysqli.default_socket = /usr/local/mysql/mysql.sock#' /usr/local/php/lib/php.ini \
 && sed -i '939 s#;date.timezone =#date.timezone = Asia/Shanghai#' /usr/local/php/lib/php.ini
 RUN \cp /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf \
 && sed -i '17 s/^;//' /usr/local/php/etc/php-fpm.conf
 RUN \cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf \
 && sed -i 's#user = nobody#user = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \
 && sed -i 's#group = nobody#group = nginx#' /usr/local/php/etc/php-fpm.d/www.conf \  && sed -i 's#listen = 127.0.0.1:9000#listen = 172.18.0.30:9000#' /usr/local/php/etc/php-fpm.d/www.conf
 #也可以提前准备好php.ini、php-fpm.conf、www.conf这三个文件,放入php目录下,之后使用ADD指令复制到镜像中
 EXPOSE 9000
 ENTRYPOINT [ "/usr/local/php/sbin/php-fpm", "-F" ]
复制代码


3.5 编写docker-compose.yml

#先拉取镜像centos:7
 [root@yuji compose_lnmp]# docker pull centos:7
 [root@yuji compose_lnmp]# vim /opt/compose_lnmp/docker-compose.yml
 #使用版本2(3版本不支持指令volumes_from)
 version: '2'
 #使用services定义服务
 services:
   #配置nginx服务
   nginx:
     #设置容器名
     container_name: nginx
     #设置主机名为nginx
     hostname: nginx
     #使用dockerfile创建镜像。Dockerfile文件在当前目录的nginx目录下,文件名为Dockerfile
     build:
       #指定Dockerfile文件所在位置
       context: ./nginx
       dockerfile: Dockerfile
     #映射端口
     ports:
       - 1315:80
       - 1316:443
     #加入到lnmp网络中,使用ip172.18.0.0.10
     networks:
       lnmp:
         ipv4_address: 172.18.0.10
     #将当前目录下的wwwroot目录挂载到容器的/usr/local/nginx/html目录
     volumes:
       - ./wwwroot/:/usr/local/nginx/html
   #配置服务mysql
   mysql:
     container_name: mysql
     hostname: mysql
     build:
       context: ./mysql
       dockerfile: Dockerfile
     ports:
       - 3306:3306
     networks:
       lnmp:
         ipv4_address: 172.18.0.20
     #设置/usr/local/mysql目录为数据卷
     volumes:
       - /usr/local/mysql
   #配置服务php    
   php:
     hostname: php
     build:
       context: ./php
       dockerfile: Dockerfile
     container_name: php
     ports:
       - 9000:9000
     networks:
       lnmp:
         ipv4_address: 172.18.0.30
     #从nginx容器和mysql容器获取数据卷    
     volumes_from:
       - nginx
       - mysql
     #php容器需要在nginx和mysql之后启动  
     depends_on:
       - nginx
       - mysql
     #php和容器nginx,容器mysql连接   
     links:
       - nginx
       - mysql
 #设置网络为自定义网络
 #配置网络模式和网络名      
 networks:
   #设置网络名lnmp
   lnmp:
     #网络模式为bridge桥接模式
     driver: bridge
     ipam:
       config:
         #使用的网段为172.18.0.0/16
         - subnet: 172.18.0.0/16
复制代码


运行docker-compose:

#在工作目录使用此命令。
 #-f: --file-name, 指定模板文件。默认为docker-compose.yml
 #-p: --project-name NAME ,指定项目名称,默认使用目录名
 #-d: 在后台运行
 [root@yuji compose_lnmp]# docker-compose -f docker-compose.yml up -d
 #在工作目录,使用 docker-compose ps 可以看到启动的容器状态
 [root@yuji compose_lnmp]# docker-compose ps
复制代码


进入mysql容器,进行用户授权:

#进入mysql容器,进行用户授权。
 [root@yuji mysql]# docker exec -it mysql /bin/bash
 [root@mysql mysql]# mysql
 mysql> create database wordpress;
 mysql> grant all privileges on wordpress.* to 'wordpress'@'%' identified by 'abc123';
 mysql> grant all privileges on *.* to 'root'@'%' identified by 'abc123';
 mysql> flush privileges;
复制代码


3.6 浏览器访问测试

http://192.168.41.46:1315/wordpress/index.php   #在yaml文件中nginx端口映射为1315
 http://192.168.41.46:1315/    #直接访问,可以看见创建的测试网页
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1天前
|
Kubernetes Cloud Native 持续交付
云原生之旅:Docker容器化与Kubernetes集群管理
【9月更文挑战第33天】在数字化转型的浪潮中,云原生技术如同一艘航船,带领企业乘风破浪。本篇文章将作为你的航海指南,从Docker容器化的基础讲起,直至Kubernetes集群的高级管理,我们将一起探索云原生的奥秘。你将学习到如何封装应用、实现环境隔离,以及如何在Kubernetes集群中部署、监控和扩展你的服务。让我们启航,驶向灵活、可伸缩的云原生未来。
|
4天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
14天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
8天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
28 4
|
18天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
29天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
2月前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【8月更文挑战第31天】 在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本文将引导读者理解云原生的基本概念,通过Docker和Kubernetes的实际应用示例,展示如何在云平台上部署和管理容器化应用。我们将一起探索服务编排、持续集成和微服务架构的实践之路,旨在为初学者揭开云原生技术的神秘面纱,并激发对这一前沿领域的深入探索。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【8月更文挑战第31天】 在云原生的世界里,容器技术是基石。本文将带你了解如何通过Kubernetes和Docker这两个强大的工具,搭建起你的云原生应用架构。我们将一起探索它们如何相互配合,提升开发与运维的效率。准备好了吗?让我们启航,探索云原生的奥秘!
|
关系型数据库 MySQL 应用服务中间件
Docker 搭建 LNMP + Wordpress的大纲
Docker 搭建 LNMP + Wordpress的大纲
193 0
下一篇
无影云桌面