neocai 发表于 2019-2-22 08:55:05

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,本文当中不着重介绍这一步;
docker安装可参考 https://blog.运维网.com/ganbing/2050621
[*]创建自定网络为lnmp;
[*]创建mysql数据库容器和数据库;
[*]创建nginx/php容器;
[*]下载wordpress博客系统来测试;

2.2查看版本信息

# cat/etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
# 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

# dockernetworkcreatelnmp
baa8fe1582a7c38f9663668c4abbf1863e45d2c9ad6c140a93a8b1a41b78e2f6
# docker networkls
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修改镜像源
  我们默认去下载镜像走的是国外的源,下载会很慢,建议配置国内的镜像源来下载:

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

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

# systemctlrestart docker
2.5创建mysql数据库容器

下载mysql镜像:

# 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
# docker images
REPOSITORY          TAG               IMAGE ID            CREATED             SIZE
mysql               latest            5d4d51c57ea8      2 days ago          374MB

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

运行mysql容器:

# 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容器是否运行:

# docker toplnmp_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
# 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,创建好了有一条警告信息,不用管它:

# docker exec lnmp_mysql sh-c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"create database wp"'
mysql: Using a password on the command line interface can be insecure.
  然后我们查看一下数据库是否创建:

# docker exec lnmp_mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD" -e"show databases"'
mysql: Using a password on the command line interface can be insecure.
Database
information_schema
mysql
performance_schema
sys
wp
查看mysql-vol卷:

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

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

2.6创建nginx、php容器

下载镜像:

# docker pull richarvey/nginx-php-fpm
运行容器:
  先创建一个/app/wwwroot目录,把这个目录挂载到容器中的/var/www/html:

# mkdir /app/wwwroot -p
然后运行容器,以下运行的参数不做解释了,和上文中运行mysql时的参数差不多:
# 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
  查看容器运行是否正常:

# 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会同步到容器中:

# echo"lnmp" > /app/wwwroot/index.html

  然后,访问这台容器宿主机Ip:
https://s1.运维网.com/images/blog/201803/01/a48c34e3d33ac60524bee37dca027c4b.png

2.7下载wordpress博客系统测试

下载至/app/wwwroot目录下:

# cd /app/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)
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
#

解压并访问测试:

# tar -zxvf wordpress-4.7.4-zh_CN.tar.gz
  解压完了之后用浏览器访问:
http://容器宿主机IP/wordpress
https://s1.运维网.com/images/blog/201803/01/9180a4981410f02bdc44d83d13baa5e2.png

配置wordpress博客:
https://s1.运维网.com/images/blog/201803/01/894067ad4caaa0ccbbc5637584a224e4.png
  数据库名称用docker ps可以查看:
https://s1.运维网.com/images/blog/201803/01/a77e85387c1e91f96030bcd47aa33b36.png
  然后,写入配置文件进行安装:
https://s1.运维网.com/images/blog/201803/01/a2ce65311e525cd6e241c5e6cf0dbe77.png
从上图可以看到,需要手工创建wp-config.php文件并将以上信息贴入这个新建的文件中

# vim /app/wwwroot/wordpress/wp-config.php
页: [1]
查看完整版本: docker:LNMP来搭建年轻人第一个博客系统