【云原生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
相关文章
|
13天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker和Kubernetes入门
【10月更文挑战第37天】在数字化转型的浪潮中,云原生技术成为企业提升敏捷性和效率的关键。本篇文章将引导读者了解如何利用Docker进行容器化打包及部署,以及Kubernetes集群管理的基础操作,帮助初学者快速入门云原生的世界。通过实际案例分析,我们将深入探讨这些技术在现代IT架构中的应用与影响。
55 2
|
11天前
|
运维 Cloud Native 虚拟化
一文吃透云原生 Docker 容器,建议收藏!
本文深入解析云原生Docker容器技术,涵盖容器与Docker的概念、优势、架构设计及应用场景等,建议收藏。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
一文吃透云原生 Docker 容器,建议收藏!
|
19天前
|
应用服务中间件 PHP nginx
Docker-compose 编排lnmp(dockerfile) 完成Wordpress
通过使用Docker Compose,我们可以轻松编排LNMP环境并部署WordPress。本文详细介绍了各组件的Dockerfile和配置文件编写,并通过docker-compose.yml文件实现了整个环境的自动化部署。这种方法不仅简化了部署过程,还提高了环境的可移植性和一致性。希望本文能帮助你更好地理解和使用Docker Compose来管理和部署复杂的应用程序。
51 3
|
28天前
|
Kubernetes Cloud Native 开发者
云原生技术入门:Kubernetes和Docker的协作之旅
【10月更文挑战第22天】在数字化转型的浪潮中,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,引领读者步入云原生的世界,着重介绍Kubernetes和Docker如何携手打造弹性、可扩展的云环境。我们将从基础概念入手,逐步深入到它们在实际场景中的应用,以及如何简化部署和管理过程。文章不仅为初学者提供入门指南,还为有一定基础的开发者提供实践参考,共同探索云原生技术的无限可能。
42 3
|
1月前
|
Kubernetes Cloud Native 开发者
探秘云原生计算:Kubernetes与Docker的协同进化
在这个快节奏的数字时代,云原生技术以其灵活性和可扩展性成为了开发者们的新宠。本文将带你深入了解Kubernetes和Docker如何共同塑造现代云计算的架构,以及它们如何帮助企业构建更加敏捷和高效的IT基础设施。
|
1月前
|
安全 Cloud Native Shell
云上攻防:云原生篇&Docker容器逃逸
本文介绍了Docker的基本概念及其对渗透测试的影响,重点讲解了容器逃逸的方法。Docker是一种轻量级的容器技术,与虚拟机相比,具有更高的便携性和资源利用率。然而,这也带来了安全风险,特别是容器逃逸问题。文章详细描述了三种常见的容器逃逸方法:不安全的配置、相关程序漏洞和内核漏洞,并提供了具体的检测和利用方法。此外,还介绍了几种特定的漏洞(如CVE-2019-5736和CVE-2020-15257)及其复现步骤,帮助读者更好地理解和应对这些安全威胁。
云上攻防:云原生篇&Docker容器逃逸
|
1月前
|
Kubernetes Cloud Native Docker
云原生入门:Kubernetes和Docker的协同之旅
【10月更文挑战第4天】在这篇文章中,我们将通过一次虚拟的旅行来探索云原生技术的核心——Kubernetes和Docker。就像乘坐一艘由Docker驱动的小船启航,随着波浪(代码示例)起伏,最终抵达由Kubernetes指挥的宏伟舰队。这不仅是一段技术上的旅程,也是理解现代云架构如何支撑数字世界的冒险。让我们扬帆起航,一探究竟!
|
1月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
43 4
|
1月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
76 3
|
关系型数据库 MySQL 应用服务中间件
Docker 搭建 LNMP + Wordpress的大纲
Docker 搭建 LNMP + Wordpress的大纲
197 0
下一篇
无影云桌面