分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 软件开发

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

发布时间:2023-09-06 01:44责任编辑:顾先生关键词:暂无标签
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查看版本信息

[root@ganbing ~]# cat ?/etc/redhat-release CentOS Linux release 7.4.1708 (Core) 
[root@ganbing ~]# docker versionClient: 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/amd64Server: 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

[root@ganbing ~]# docker ?network ?create ?lnmpbaa8fe1582a7c38f9663668c4abbf1863e45d2c9ad6c140a93a8b1a41b78e2f6[root@ganbing ~]# docker network ?lsNETWORK ID ?????????NAME ???????????????DRIVER ?????????????SCOPE4e09a7db5303 ???????bridge ?????????????bridge ?????????????locald77497b635bb ???????host ???????????????host ???????????????localbaa8fe1582a7 ???????lnmp ??????????????bridge ?????????????local637e45b21ed3 ???????none ???????????????null ???????????????local

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

2.4修改镜像源

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

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

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

[root@ganbing ~]# systemctl ?restart docker

2.5创建mysql数据库容器

下载mysql镜像:

[root@ganbing ~]# docker pull mysqlUsing default tag: latestlatest: Pulling from library/mysql8176e34d5d92: 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:227d5c3f54ee3a70c075b1c3013e72781564000d34fc8c7ec5ec353c5b7ef7faStatus: Downloaded newer image for mysql:latest[root@ganbing ~]# docker imagesREPOSITORY ?????????TAG ????????????????IMAGE ID ???????????CREATED ????????????SIZEmysql ??????????????latest ?????????????5d4d51c57ea8 ???????2 days ago ?????????374MB

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

运行mysql容器:

[root@ganbing ~]# 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=utf8f187cd6feb9e2ca3ef39b51317e7ea0568f9c84d52e2538ff1a3fe9c57bea890

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

查看mysql容器是否运行:

[root@ganbing ~]# docker top ?lnmp_mysql UID ????????????????PID ????????????????PPID ???????????????C ??????????????????STIME ??????????????TTY ????????????????TIME ???????????????CMDpolkitd ????????????16488 ??????????????16473 ??????????????0 ??????????????????11:31 ??????????????pts/0 ??????????????00:00:00 ???????????mysqld --character-set-server=utf8[root@ganbing ~]# docker psCONTAINER ID ???????IMAGE ??????????????COMMAND ?????????????????CREATED ????????????STATUS ?????????????PORTS ???????????????????NAMESf187cd6feb9e ???????mysql ??????????????"docker-entrypoint.s…" ??9 minutes ago ??????Up 9 minutes ???????0.0.0.0:3306->3306/tcp ??lnmp_mysql

创建一个数据库wp:

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

[root@ganbing ~]# 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.

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

[root@ganbing ~]# 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.Databaseinformation_schemamysqlperformance_schemasyswp

查看mysql-vol卷:

[root@ganbing ~]# 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 ibtmp1drwxr-x--- 2 polkitd input ????4096 Mar ?1 11:31 mysqldrwxr-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.pemdrwxr-x--- 2 polkitd input ????8192 Mar ?1 11:31 sysdrwxr-x--- 2 polkitd input ??????20 Mar ?1 11:43 wp

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

2.6创建nginx、php容器

下载镜像:

[root@ganbing ~]# docker pull richarvey/nginx-php-fpm

运行容器:

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

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

查看容器运行是否正常:

[root@ganbing ~]# docker ps -lCONTAINER ID ???????IMAGE ????????????????????COMMAND ?????????????????CREATED ????????????STATUS ?????????????PORTS ??????????????????????????????????NAMESaaea1b4543d3 ???????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会同步到容器中:

[root@ganbing /]# echo ?"lnmp" > /app/wwwroot/index.html

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

2.7下载wordpress博客系统测试

下载至/app/wwwroot目录下:

[root@ganbing /]# cd /app/wwwroot/[root@ganbing 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.gzResolving cn.wordpress.org (cn.wordpress.org)... 198.143.164.252Connecting to cn.wordpress.org (cn.wordpress.org)|198.143.164.252|:443... connected.HTTP request sent, awaiting response... 200 OKLength: 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][root@ganbing wwwroot]# 

解压并访问测试:

[root@ganbing wwwroot]# tar -zxvf wordpress-4.7.4-zh_CN.tar.gz

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

配置wordpress博客:

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

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

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

[root@ganbing 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
  • 还有就是本文中数据持久化的概念(也就是挂载)要理解,用了两种挂载方式,一种是数据卷挂载、一种是目录挂载。数据卷挂载不需要你手动创建数据卷,目录挂载的前提源挂载目录你要存在或者你要创建好

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

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

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved