docker:Web迁移

系列文章目录

docker:环境安装
docker:Web迁移


文章目录

  • 系列文章目录
  • 前言
  • 一、Mariadb
    • 1.拉取镜像
    • 2.创建容器
    • 3.数据同步
    • 4.数据分离
  • 二、PHP项目
    • 1.拉取镜像
    • 2.创建容器
    • 3.容器互通
  • 三、Flask项目
    • 1.拉取镜像
    • 2.创建镜像
    • 3.自定义镜像
      • 1.安装apache
      • 2.安装python3
      • 3.意外退出
    • 4.自动运行
    • 5.镜像测试
  • 四、Docker Compose
    • 1.环境安装
    • 编写文件
  • 总结


前言

上一次博客完成了环境的安装,这次就把在服务器的所有项目,在docker中进行重构,方便以后的迁移,我把我的Web项目按端口进行了拆分,所以一共需要三个容器,分别是使用80端口的Web+wordpress和使用5001端口的Flask项目,以及提供数据的Mariadb。
开始之前先用
sudo -i
进行提权。


一、Mariadb

1.拉取镜像

docker pull mariadb:10.4

用 docker pull 从docker hub中拉取已经存在的镜像 后边是镜像名称和版本号。这里我选用了10.4.

docker images 可以查看本地所有镜像。

docker:Web迁移_第1张图片

2.创建容器

先放一下官方案例。

docker run --detach --name some-mariadb --env MARIADB_ROOT_PASSWORD=my-secret-pw  mariadb:latest

解释一下
–detach 后台运行也可以用 -d
–name 容器名称
–env 一些初始化环境,官方案例中指定了初始root密码。
mariadb:latest 本地已经拉取好的镜像
然后我们进行一些修改的添加。

docker run -d --name mariadb --env MARIADB_ROOT_PASSWORD=123456789 -p 3306:3306  mariadb:10.4

docker默认创建的mariadb是不允许外部连接的,所以我这加了-p参数
-p 内部端口:外部端口

在这里插入图片描述
现在我们拿远程连接器连接一下。
docker:Web迁移_第2张图片
两个关键参数就是你的虚拟机链接和命令行中的root密码。
新数据库就创建成功了。

3.数据同步

你可以用.sql或者其它工具将你的云端数据库同步到虚拟机的docker中,这个不演示了。

4.数据分离

刚才我们已经完成的数据库容器的创建,但有个问题,随着数据库中数据的不断增多,这个容器也会越来越大,后期打包或者迁移也会很不方便,所以我们需要将数据库中的数据剥离出来,以后我们只需要创建容器然后调用外部的数据就可以完成迁移。

将docker内的数据内容复制出来。

docker cp mariadb:/var/lib/mysql/ /root/docker/mariadb/

这里面就是数据库的数据内容,现在我们删除创建好的数据库。

docker rm -f mariadb

现在我们重新创建docker,并且挂载外部的数据。

docker run -d --name mariadb -p 3306:3306 -v /root/docker/mariadb:/var/lib/mysql mariadb:10.4

现在我们没有初始化密码,也可以从之前创建的链接打开数据库。
docker:Web迁移_第3张图片
并且数据库内容也在。

二、PHP项目

1.拉取镜像

在镜像的选取中,我选择了已经打包好apache和php的webdevops/php-apache

docker pull webdevops/php-apache:7.4

2.创建容器

webdevops/php-apache文档
通过项目文档我们发现,该镜像将apache的工作目录放到了/app,所以我们可以将自己的网站文件放在这里或者从外部挂载到这里,我的建议是,如果这只是一个静态页面,里面的东西不会增加,就直接放到容器里,如果这个网站的内容会不断增加使得容器增大,就从外部挂载,因为我的php项目会不断上传新的媒体文件,所以我选择外部挂载
创建一个存放数据的目录,并将你的网站数据传进去。
docker:Web迁移_第4张图片

docker run -d --name myweb -p80:80 -v /root/docker/webdata:/app webdevops/php-apache:7.4

现在我们直接使用ip访问。
docker:Web迁移_第5张图片
我就已经实现了静态页面的挂载。

3.容器互通

我的web页面中不仅有静态页面wordpress需要读取数据库数据,所以我们需要将两台容器进行互通,需要先创建一个网络。

docker network create web

然后查看一下

docker network ls

docker:Web迁移_第6张图片
现在将两个容器都添加到这个网络中。

docker network connect web myweb
docker network connect web mariadb

现在我们只要从新设置web中的数据库配置,就可以从新读取数据了。
wordpress只要把根目录下的wp-config.php删除下次启动就会自己从新配置了。
在这里插入图片描述
因为我的wordpress中的一些调用指向的是我的域名,可以在断开网络的情况下,修改本地hosts,把虚拟机ip指向我购买的域名,这样就可以完全模拟生产环境。
docker:Web迁移_第7张图片
然后访问wordpress项目,他就会让我从新进行数据库配置。
docker:Web迁移_第8张图片
我们需要从新配置数据库信息。
docker:Web迁移_第9张图片
注意在同一个docker网络下直接使用镜像名称作为host就可以。
docker:Web迁移_第10张图片
之后就完成了网站的迁移。

三、Flask项目

我之前使用的是apache-Flask但是在docker hub中没找到适合的,最后决定自己从头配置一个。

1.拉取镜像

在初始的镜像选取中还是选择了Debian12

docker pull debian:12.4

2.创建镜像

创建直接先把myweb关掉,不然两个容器都监听外边的80端口会冲突。

docker stop myweb
docker run -it --name mydebian --network web  -p 80:80 -p5001:5001 debian:12.4 bash

因为我们要安装apache 所以开放80端口,我的Flask项目使用5001,所以开放5001端口,并且直接将其加入创建的web网络中。

3.自定义镜像

1.安装apache

apt update
apt install apache2
service apache2 start

然后用ip测试一下。
docker:Web迁移_第11张图片

2.安装python3

apt install python3 python3-pip

在这里插入图片描述
剩下的就是自己安装自己的配置文件了,不说了,这不是docker的内容。

3.意外退出

如果你再操作中不小心退出了容器,因为你的容器没有设置后台运行的程序,所以启动后就会自动关闭,我们可以提交当前容器为镜像,然后用新镜像再次启动新容器,这样可以保留之前的操作。

docker commit mydebian mydebian:1.0
docker images

docker:Web迁移_第12张图片

docker rm mydebian
docker run -it --name mydebian --network web  -p 80:80 -p5001:5001 mydebian:1.0 bash

新容器依旧还有Python3
在这里插入图片描述

4.自动运行

经过一段时间的配置,我们完成了Flask项目的迁移。
docker:Web迁移_第13张图片
因为我的这个项目需要的数据不会变化,镜像也不会逐渐增大,所以没有进行外部的文件挂载,现对这个镜像进行一个打包。

docker commit mydebian mydebian

docker:Web迁移_第14张图片
现在我们使用dockerfile进行自定义命令的配置。

vim Dockerfile
FROM mydebian:latest

RUN ["apachectl","-D","FOREGROUND"]
docker build -t flask .

5.镜像测试

这是我们最终生成的镜像。
docker:Web迁移_第15张图片

docker run -d --name flask --network web  -p5001:5001  flask

docker:Web迁移_第16张图片

四、Docker Compose

现在我们删除多余的镜像和全部容器。
docker:Web迁移_第17张图片
在这里插入图片描述
现在我们只需要一下三条命令就可以快速部署整个Web项目。

docker run -d --name mariadb --network web -p 3306:3306 -v /root/docker/mariadb:/var/lib/mysql mariadb:10.4
docker run -d --name flask --network web  -p5001:5001  flask
docker run -d --name myweb --network web -p80:80 -v /root/docker/webdata:/app webdevops/php-apache:7.4

但是这仍然有些不方便。
我们可是使用Docker Compose,它可以让我们快速部署一组的容器。

1.环境安装

官方文档

curl -SL https://github.com/docker/compose/releases/download/v2.24.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose version

在这里插入图片描述

编写文件

docker命名转Compose有固定的格式,所以有一些现成的工具可以帮助我们快速转换。
composerize
通过转换得到内容。
将其写入docker-compose.yml文件

vim docker-compose.yml
version: "3"
services:
    mariadb:
        container_name: mariadb
        networks:
            - web
        ports:
            - 3306:3306
        volumes:
            - /root/docker/mariadb:/var/lib/mysql
        image: mariadb:10.4
    flask:
        container_name: flask
        networks:
            - web
        ports:
            - 5001:5001
        image: flask
    php-apache:
        container_name: myweb
        networks:
            - web
        ports:
            - 80:80
        volumes:
            - /root/docker/webdata:/app
        image: webdevops/php-apache:7.4
networks:
    web:
        external: true
        name: web

然后在当前目录下运行。

docker-compose up -d

在这里插入图片描述
现在三个容器就一次性部署完成了。
至此我的所有网站项目全部迁移到docker之中。


总结

docker容器化技术就到这里,以后有需要补充的再说。

你可能感兴趣的:(docker,docker,前端,容器)