docker:搭建年轻人第一个LNMP网站平台

1.背景

?LNMP为(linux系统、nginx服务、mysql服务、php服务)组合而成,本次练习所使用的镜像均为docker官方镜像源 https://hub.docker.com ,镜像介绍如下:

镜像名称 官方镜像地址
nginx php镜像 https://hub.docker.com/r/richarvey/nginx-php-fpm/
mysql镜像 https://hub.docker.com/_/mysql/

?我这里的nginx php用的是richarve/nginx-php-fpm 这个集成在一起的镜像,你也可以把nginx、php这两个镜像独立出来(就是使用两个镜像)。还要说明一下,大家在练习的时候尽量不要复制命令,自己手动多敲敲这些命令,本文的练习环境是在centos7.4上进行的。

2.开始部署

2.1部署流程

  • 先安装docker,本文当中不着重介绍这一步;
  • 创建自定网络为lnmp;
  • 创建mysql数据库容器和数据库;
  • 创建nginx/php容器;
  • 下载wordpress博客系统来测试;

2.2查看版本信息

[[email protected] ~]# cat  /etc/redhat-release
CentOS Linux release 7.4.1708 (Core) 
[[email protected] ~]# docker version
Client:
 Version:   17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:10:14 2017
 OS/Arch:   linux/amd64

Server:
 Engine:
  Version:  17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:    Wed Dec 27 20:12:46 2017
  OS/Arch:  linux/amd64
  Experimental: false

?建议用centos 7.4的版本,docker用的是17.12.0-ce 版本(ce是docker社区版、ee是docker企业版)。

2.3创建自定义网络lnmp

[[email protected] ~]# docker  network  create  lnmp
baa8fe1582a7c38f9663668c4abbf1863e45d2c9ad6c140a93a8b1a41b78e2f6

[[email protected] ~]# docker network  ls
NETWORK ID          NAME                DRIVER              SCOPE
4e09a7db5303        bridge              bridge              local
d77497b635bb        host                host                local
baa8fe1582a7        lnmp               bridge              local
637e45b21ed3        none                null                local

说明:从上面显示可以看出,docker服务运行后,默认有bridge、host、none这3个网络,网络介绍不是本文的重点,可以看到lnmp网络已创建好了。

2.4修改镜像源

我们默认去下载镜像走的是国外的源,下载会很慢,建议配置国内的镜像源来下载:

[[email protected] ~]# vim /etc/docker/daemon.json
{
  "registry-mirrors": [ "https://registry.docker-cn.com"]
}

修改改镜像源后,还需要重启docker服务:

[[email protected] ~]# systemctl  restart docker

2.5创建mysql数据库容器

下载mysql镜像:

[[email protected] ~]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
8176e34d5d92: Pull complete
17e372a8ec90: Pull complete
47b869561d3a: Pull complete
c90ab4483f28: Pull complete
d6af16572c5c: Pull complete
6d16794d04ac: Pull complete
aaf442a8fe75: Pull complete
7c6fa8f07ec4: Pull complete
ece17b689642: Pull complete
c55b06e76eaf: Pull complete
661fabfb4fc2: Pull complete
Digest: sha256:227d5c3f54ee3a70c075b1c3013e72781564000d34fc8c7ec5ec353c5b7ef7fa
Status: Downloaded newer image for mysql:latest

[[email protected] ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               latest              5d4d51c57ea8        2 days ago          374MB

说明:可以看到mysql镜像下载了最新latest版本,总大小为374MB。

运行mysql容器:

[[email protected] ~]# docker run -itd --name lnmp_mysql --net lnmp -p 3306:3306 --mount src=mysql-vol,dst=/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql --character-set-server=utf8
f187cd6feb9e2ca3ef39b51317e7ea0568f9c84d52e2538ff1a3fe9c57bea890

参数说明:
-itd:在容器中打开一个伪终端进行交互操作,并在后台运行;
--name:为容器分配一个名字lnmp_mysql;
--net:为容器指定一个网络环境为lnmp网络;
-p:容器暴露端口映射,把宿主机的3306端口映射到容器的3306端口;
--mout:把数据卷mysql-vol挂载到容器的/var/lib/mysql目录,挂载也相当于数据持久化;
-e:设置一个变量MYSQL_ROOT_PASSWORD;
mysql:指定刚才下载的mysql镜像来启动容器;

查看mysql容器是否运行:

[[email protected] ~]# docker top  lnmp_mysql
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
polkitd             16488               16473               0                   11:31               pts/0               00:00:00            mysqld --character-set-server=utf8
[[email protected] ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
f187cd6feb9e        mysql               "docker-entrypoint.s…"   9 minutes ago       Up 9 minutes        0.0.0.0:3306->3306/tcp   lnmp_mysql

创建一个数据库wp:

数据库可以任意命名,我这里用exec来创建一个数据库为wp,创建好了有一条警告信息,不用管它:

[[email protected] ~]# docker exec lnmp_mysql sh  -c ‘exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"‘
mysql: [Warning] Using a password on the command line interface can be insecure.

然后我们查看一下数据库是否创建:

[[email protected] ~]# docker exec lnmp_mysql sh -c ‘exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"show databases"‘
mysql: [Warning] Using a password on the command line interface can be insecure.
Database
information_schema
mysql
performance_schema
sys
wp

查看mysql-vol卷:

[[email protected] ~]# ll /var/lib/docker/volumes/mysql-vol/_data/
total 188484
-rw-r----- 1 polkitd input       56 Mar  1 11:31 auto.cnf
-rw------- 1 polkitd input     1675 Mar  1 11:31 ca-key.pem
-rw-r--r-- 1 polkitd input     1107 Mar  1 11:31 ca.pem
-rw-r--r-- 1 polkitd input     1107 Mar  1 11:31 client-cert.pem
-rw------- 1 polkitd input     1675 Mar  1 11:31 client-key.pem
-rw-r----- 1 polkitd input     1335 Mar  1 11:31 ib_buffer_pool
-rw-r----- 1 polkitd input 79691776 Mar  1 11:31 ibdata1
-rw-r----- 1 polkitd input 50331648 Mar  1 11:31 ib_logfile0
-rw-r----- 1 polkitd input 50331648 Mar  1 11:31 ib_logfile1
-rw-r----- 1 polkitd input 12582912 Mar  1 11:31 ibtmp1
drwxr-x--- 2 polkitd input     4096 Mar  1 11:31 mysql
drwxr-x--- 2 polkitd input     8192 Mar  1 11:31 performance_schema
-rw------- 1 polkitd input     1675 Mar  1 11:31 private_key.pem
-rw-r--r-- 1 polkitd input      451 Mar  1 11:31 public_key.pem
-rw-r--r-- 1 polkitd input     1107 Mar  1 11:31 server-cert.pem
-rw------- 1 polkitd input     1675 Mar  1 11:31 server-key.pem
drwxr-x--- 2 polkitd input     8192 Mar  1 11:31 sys
drwxr-x--- 2 polkitd input       20 Mar  1 11:43 wp

从上面显示可以看到wp库也同步到了mysql-vol数据卷中来了。

2.6创建nginx、php容器

下载镜像:

[[email protected] ~]# docker pull richarvey/nginx-php-fpm

运行容器:

先创建一个/app/wwwroot目录,把这个目录挂载到容器中的/var/www/html:

[[email protected] ~]# mkdir /app/wwwroot -p

然后运行容器,以下运行的参数不做解释了,和上文中运行mysql时的参数差不多:
[[email protected] ~]# docker run -itd --name lnmp_web --net lnmp -p 80:80 --mount type=bind,src=/app/wwwroot,dst=/var/www/html richarvey/nginx-php-fpm
aaea1b4543d34522a9e0d06353f6c65fe858a445c963743ec223bc6a364d0167

查看容器运行是否正常:

[[email protected] ~]# docker ps -l
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                                   NAMES
aaea1b4543d3        richarvey/nginx-php-fpm   "docker-php-entrypoi…"   2 hours ago         Up 2 hours          443/tcp, 0.0.0.0:80->80/tcp, 9000/tcp   lnmp_web

弄个页面测试一下容器:

先在/app/wwwroot/目录下生成一个index.html页面,这个目录已经挂载到了容器的/var/www/html,所以生成的index.html会同步到容器中:

[[email protected] /]# echo  "lnmp" > /app/wwwroot/index.html

然后,访问这台容器宿主机Ip:

2.7下载wordpress博客系统测试

下载至/app/wwwroot目录下:

[[email protected] /]# cd /app/wwwroot/
[[email protected] wwwroot]# wget https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
--2018-03-01 13:52:05--  https://cn.wordpress.org/wordpress-4.7.4-zh_CN.tar.gz
Resolving cn.wordpress.org (cn.wordpress.org)... 198.143.164.252
Connecting to cn.wordpress.org (cn.wordpress.org)|198.143.164.252|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8507412 (8.1M) [application/octet-stream]
Saving to: ‘wordpress-4.7.4-zh_CN.tar.gz’

100%[=========================================================>] 8,507,412   1.08MB/s   in 8.9s   

2018-03-01 13:52:14 (933 KB/s) - ‘wordpress-4.7.4-zh_CN.tar.gz’ saved [8507412/8507412]

[[email protected] wwwroot]#

解压并访问测试:

[[email protected] wwwroot]# tar -zxvf wordpress-4.7.4-zh_CN.tar.gz

解压完了之后用浏览器访问:
http://容器宿主机IP/wordpress

配置wordpress博客:

数据库名称用docker ps可以查看:

然后,写入配置文件进行安装:

从上图可以看到,需要手工创建wp-config.php文件并将以上信息贴入这个新建的文件中

[[email protected] wordpress]# vim /app/wwwroot/wordpress/wp-config.php
<?php
/**
 * WordPress基础配置文件。
 *
 * 这个文件被安装程序用于自动生成wp-config.php配置文件,
 * 您可以不使用网站,您需要手动复制这个文件,
 * 并重命名为“wp-config.php”,然后填入相关信息。
 *
 * 本文件包含以下配置选项:
 *
 * * MySQL设置
 * * 密钥
 * * 数据库表名前缀
 * * ABSPATH
 *
 * @link https://codex.wordpress.org/zh-cn:%E7%BC%96%E8%BE%91_wp-config.php
 *
 * @package WordPress
......
省略部分内容

安装wordpress:

登录wordpress:

到此,年轻人的第一个lnmp容器练习就成功搭建完毕了。

3.总结

  • 要熟悉容器、镜像的概念
  • 要熟悉docker常用的基础命令docker run、docker ps、docker rm、docker image、docker top、docker network等,由其是docker run中的很多参数要理解
  • 要学会活用--help进行帮助,比如docker run --help
  • 还有就是本文中数据持久化的概念(也就是挂载)要理解,用了两种挂载方式,一种是数据卷挂载、一种是目录挂载。数据卷挂载不需要你手动创建数据卷,目录挂载的前提源挂载目录你要存在或者你要创建好

原文地址:http://blog.51cto.com/ganbing/2074257

时间: 2024-11-03 14:20:16

docker:搭建年轻人第一个LNMP网站平台的相关文章

LNMP网站平台搭建

一.搭建LNMP平台 案例需求:在ip地址 192.168.1.10的服务器上搭建LNMP平台 系统环境准备: 配置固定Ip地址.关闭 iptables     selinux 配置yum源 安装开发库软件包组   和  开发工具软件包组 编译工具   gcc  gcc-c++   make service   httpd stop;chkconfig  --level  35 httpd  off LNMP简介 LNMP  是网站运行平台 L    Linux操作系统   (RHEL5   )

构建LNMP网站平台

  构建LNMP平台需要Linux服务器.MySQL数据库.PHP解析环境,区别主要在Nginx与PHP协作配置上.下面从搭建一个完整的LNMP系统进行演示:

基于docker搭建wordpress博客网站平台

WordPress是使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站.也可以把 WordPress当作一个内容管理系统(CMS)来使用. WordPress是一款个人博客系统,并逐步演化成一款内容管理系统软件,它是使用PHP语言和MySQL数据库开发的.用户可以在支持 PHP 和 MySQL数据库的服务器上使用自己的博客. WordPress有许多第三方开发的免费模板,安装方式简单易用.不过要做一个自己的模板,则需要你有一定的专业知识.比如你至少要

搭建一个网站平台

LAMP:搭建一个网站平台 Linux apache mysql php 基础环境搭建需要有一个干净的系统,配好本地yum 源,网络通顺可以使用远程连接,易操作. 主机名修改:#cat /etc/hosts(本地域名解析) #cat /etc/hostname #vi /etc/hostname修改主机名 #hostname 主机名 #login重新进行登录 关闭防火墙(selinux)关闭 #vi /etc/hosts 进入:加上ip地址 主机名 保存退出:wq #cat /etc/hosts

从头开始搭建一个dubbo+zookeeper平台 【转】

本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用.   注册中心的选择   dubbo支持多种类型的注册中心: 这里我们选择zookeeper,其实类型的优点缺点可详细查看文档. 1:zookeeper的安装,还是采用docker这一招鲜的run命令来安装zookeeper docker run -dit --name zookeeper --hostname zookeeper-host -v /data:/data -p 2181

从头开始搭建一个dubbo+zookeeper平台

本篇主要是来分享从头开始搭建一个dubbo+zookeeper平台的过程,其中会简要介绍下dubbo服务的作用. 首先,看下一般网站架构随着业务的发展,逻辑越来越复杂,数据量越来越大,交互越来越多之后的常规方案演进历程. 其次,当服务越来越多之后,我们需要做哪些服务治理? 最后,是dubbo的架构图   注册中心的选择   dubbo支持多种类型的注册中心: Multicast注册中心 Zookeeper注册中心 Redis注册中心 Simple注册中心 这里我们选择zookeeper,其实类型

【译文】用Spring Cloud和Docker搭建微服务平台

by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-microservices.html This blog series will introduce you to some of the foundational concepts of building a microservice-based platform using Spring Cloud

个人站长如何搭建一个能够赚钱的网站

很多个人站长在建设个人网站时往往会出现不能赚钱的尴尬境地,怎么才能建设一个赚钱效应好的网站呢? 一.自己的上风竞争力,我以为作为一个个人站长,没有雄厚的资金和强大的人力资源,那么你定位制作的网站.论坛或是博客一定要能反应和体现自己的上风竞争力,比如你是个足不出户的人却要制作一个旅游论坛,你东南西北都分不清怎么更新那些原创文章呢?再比如你不懂教育,你反而开设一个教育论坛,又怎么能解答那些专业的教育题目呢?又怎么能拉拢住那些技术比你好的斑竹呢?看清楚自己的上风竞争力,自己或是自己周边.朋友有质优价廉

lnmp+FastCGI平台搭建脚本

本脚本主要介绍lnmp+FastCGI平台的搭建脚本,需要准备的安装包如下: cmake-2.8.10.2.tar.gz libevent-2.0.21-stable.tar.gz libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz nginx-1.2.0.tar.gz php-5.4.9.tar.gzlibiconv-1.13.tar.gz mysql-5.5.13.tar.gz 由于脚本需要,将上述安装包统一打包为lnmp+memcached.zip,使用