wordpress+Dockerfile+docker-compose 自动化编排个人博客系统服务

一、docker容器数据的持久化

数据是软件的生命,即使容器删了,数据也不能丢,所以我们要实现数据的持久化

当我们使用以下命令启动容器时

docker run -d -e MYSQL_ROOT_PASSWORD=root 容器ID

在mysql里创建数据库后,删除了容器后,数据库也不复存在了
为解决这个问题,docker为我们提供了三个不同的方式来实现数据的持久化
volume 、bind mount、tmpfs

使用volume挂载卷(最佳方式)

volume是存在一个或多个容器中特定文件或文件夹,这个目录能够独立于联合文件系统的形式在宿主机中存在,并为数据的共享和持久提供便利,volume能在不同的容器之间共享和重用,而且对volumez中数据操作不会影响到镜像本身

原理:将文件从容器中挂载到外面,可以理解为在外面创建一个文件的快捷方式
eg.将mysql存数据的文件/var/lib/mysql 挂载到centos中

docker默认在主机上有一个特定的区域(/var/lib/docker/volumes)存放volume挂载卷
volume是通过volume进行管理的,如创建、删除等操作

docker volume的一些命令

docker volume ls
查看所有的挂载卷,默认名字是一串无规则的数字
在这里插入图片描述

docker volume rm 挂载卷名
删除一个挂载卷
在这里插入图片描述

docker volume rm -f $(docker volume ls -q)
删除所有能查到的不在使用的挂载卷
在这里插入图片描述
使用中的挂载卷是使用不了的
在这里插入图片描述
可以使用下列命令查看挂载卷的详细信息

docker volume inspect 无法删除的挂载卷名

在这里插入图片描述
然后先删除容器,后删除挂载卷


mysql使用volume

mysql默认是有volume的,但是挂载卷名是一串无规则的数字
在这里插入图片描述
所以我们创建容器的时候使用如下命令创建自定义名称的挂载卷

docker run -d -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql镜像ID

在这里插入图片描述
在mysql里创建一个test的数据库,然后删除容器,但不删除挂载卷
再启动一个mysql时,test数据库仍然存在
在这里插入图片描述
删除创建test数据库的容器,不删除卷
在这里插入图片描述
test在新的容器里仍然存在
在这里插入图片描述

使用Mounted挂载文件和文件夹

进入到宿主机存放想要挂载文件或文件夹的目录,使用如下命令

docker run -d -v $(pwd):/usr/local/tomcat/webapps 镜像ID

此命令与下面命令是相同的

docker run -d -v /root/docker/tomcat1:/usr/local/tomcat/webapps 镜像ID

eg.
在这里插入图片描述

二、实现WordPress搭建个人博客系统

wordpress是个啥

WordPress是帮助客户打造个人网站的公司
wordpress官网
拉取wordpress镜像,wordpress里有一套完整的个人博客系统

部署

拉取wordpress镜像
在docker hub查找wordpress的拉取命令
且可以查看如何使用wordpress
在这里插入图片描述

docker pull wordpress

wordpress连接数据库
wordpress需要连接mysql作为个人博客系统的数据库,并且要创建一个wordpress数据库

docker run -d --name mysql -v mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=wordpress mysql镜像ID

MYSQL_DATABASE=wordpress 启动容器一个wordpress数据库

启动wordpress容器

docker run -d -e WORDPRESS_DB_HOST=mysql:3306 --link mysql -p 8080:80 wordpress镜像ID

在这里插入图片描述
WORDPRESS_DB_HOST=mysql:3306 指定使用的数据库是启动的mysql容器

访问wordpress
在浏览器输入192.168.160.10(虚拟机IP):8080访问并注册登录
在这里插入图片描述

三、Dockerfile实现自定义镜像

Dockerfile的作用

当我们正常启动容器并导入数据时,步骤比较繁琐,使用Dockerfile可以扩展基础镜像,将其作为我们的自定义镜像

可以理解为基类与扩展类的关系

以mysql为例:
正常启动步骤
1、docker run 启动容器
2、docker exec 进入容器
3、mysql -u root -p 登录mysql
4、source xxx.sql 导入数据文件
5、use mysql;
  GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘root’ WITH GRANT OPTION;
  flush privileges;
配置远程连接
步骤相当繁琐

但只要在Dockerfile中编辑以下操作即可完成上述工作
1、指定自定义镜像的基础镜像
2、编写需要融入到镜像中的文件
3、使用Dockerfile命令编辑操作命令
4、下一次启动的时候只要启动自定义的image即可

自定义一个mysql镜像

准备需要的文件
1、创建Dockerfile文件

touch Dockerfile

2、将easybuy.sql数据文件与Dockerfile文件放在同一个目录下,如果数据文件在主机,使用WinSCP工具
3、创建远程连接权限文件(后缀为.sql)并与Dockerfile放到同一目录下
远程连接权限文件内容

use mysql;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
flush privileges;

4、编写启动文件(shell脚本)setup.sh,同与Dockerfile在一个目录下

touch setup.sh
vim setup.sh
#setup.sh文件内容如下
#表示使用bash解释器解释shell脚本
#!/bin/bash

#告诉解释器,如果有一条命令出错就退出,防止错误像滚雪球一样越来越大
set -e

#查看mysql容器启动状态,方便调试
echo `service mysql status`

#启动mysql
echo '1、启动mysql'
sevice mysql start

#睡眠3秒
sleep 3

#再次查看mysql状态,确认是否启动
echo `service mysql status`

#导入数据,因为设置了免密登录mysql就直接登录了
echo '2、开始导入数据'
mysql</mysql/easybuy.sql
echo '导入数据成功'
sleep 3
echo `service mysql status`

#配置允许远程连接权限
echo '3.配置开放远程连接权限'
mysql</mysql/privileges.sql
echo '远程连接权限开放成功'
sleep 3

echo `service mysql status`
echo 'Success! mysql容器启动完毕'

#防止容器启动后自动退出
tail -f /dev/null

编辑Dockerfile文件
Dockerfile文件中的内容
Dockerfile是有自己的语法的
比较重要的两条:
1、FROM 作为第一句,确定基础镜像
2、#开头的语句作为注释
Dockerfile文件中的内容

#1、设置base image
FROM mysql:5.7

#2、设置免密码登录
ENV MYSQL_ALLOW_EMPTY_PASSWORD=yes

#3、将easybuy.sql数据文件拷贝到镜像中
COPY easybuy.sql /mysql/easybuy.sql

#4、将配置远程连接权限的文件拷贝到镜像中
COPY privileges.sql /mysql/privileges.sql

#5、将setup.sh启动文件拷贝到镜像中
COPY setup.sh /mysql/setup.sh

#6、设置容器启动时执行的命令
CMD ["sh","/mysql/setup.sh"]

将配置好的东西构建为新的image

docker build . -t dean/mysql-easybuy:1.0

在这里插入图片描述
也可以通过-f /root/docker/mysql/Dockerfile指定Dockerfile文件的位置
命名也可不按照命名规则执行

启动自定义的镜像

docker run -d -e MYSQL_ROOT_PASSWORD=root 镜像ID

执行这条命令时会自动执行setup.sh文件

docker logs 容器ID

使用此条命令查看启动容器的日志,可以看到我们在setup.sh文件里写的输出信息
在这里插入图片描述
使用Dockerfile的文件实质的执行过程:
1、Dockerfile在基础镜像上加入需要的文件封装为新的镜像
2、docker run 运行容器时,实质在执行setup.sh文件,setup文件里在做导入数据库,设置远程连接权限这些工作

四、 docker-compose自动化编排个人博客系统服务

docker-compose是个啥

docker-compose是docker中的一个工具
多容器的服务体系非常的麻烦,需要我们一个一个的取启动、停止管理容器
docker-compose可以起到一个容器管家的作用,多个容器组成一个整体,能够实现同时启动,同时停止
我们只要写一个docker-compose.yml文件即可,docker-compose.yml 的核心内容services(声明所有的容器),volumes(声明挂载卷),network(声明网络)

docker-compose使用

下载docker-compose
先查看docker-compose是否安装

docker-compose --version

若此条命令显示权限不够,使用如下命令对docker-compose加执行权限

chmod +x /usr/local/bin/docker-compose

如未安装执行下列的命令安装

curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

创建docker-compose.yml文件
在wordpress文件夹里创建docker-compose.yml文件

touch docker-compose.yml

docker-compose.yml文件内容

version: "3" 
#docker-compose版本为3 该版本比较稳定

services:  #声明所有的容器
  wordpress:   #第一个容器
    image: wordpress
    ports:
      - "8080:80"
    links:
      - mysql
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_PASSWORD: root

  mysql:  #第二个容器
    image: mysql:5.7
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: wordpress
    volumes:
      - wordpress-data:/var/lib/mysql
      
volumes: 声明挂载卷
  wordpress-data:

在这里插入图片描述
启动docker-compose

docker-compose up -d

使用该命令的前提是,当前目录必须有一个docker-compose.yml文件
在这里插入图片描述
在虚拟机的浏览器里访问8080端口
在这里插入图片描述
可以看到部署成功了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值