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 可以查看本地所有镜像。

在这里插入图片描述

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 内部端口:外部端口

在这里插入图片描述
现在我们拿远程连接器连接一下。
在这里插入图片描述
两个关键参数就是你的虚拟机链接和命令行中的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

现在我们没有初始化密码,也可以从之前创建的链接打开数据库。
在这里插入图片描述
并且数据库内容也在。

二、PHP项目

1.拉取镜像

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

docker pull webdevops/php-apache:7.4

2.创建容器

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

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

现在我们直接使用ip访问。
在这里插入图片描述
我就已经实现了静态页面的挂载。

3.容器互通

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

docker network create web

然后查看一下

docker network ls

在这里插入图片描述
现在将两个容器都添加到这个网络中。

docker network connect web myweb
docker network connect web mariadb

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

三、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测试一下。
在这里插入图片描述

2.安装python3

apt install python3 python3-pip

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

3.意外退出

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

docker commit mydebian mydebian:1.0
docker images

在这里插入图片描述

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

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

4.自动运行

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

docker commit mydebian mydebian

在这里插入图片描述
现在我们使用dockerfile进行自定义命令的配置。

vim Dockerfile
FROM mydebian:latest

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

5.镜像测试

这是我们最终生成的镜像。
在这里插入图片描述

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

在这里插入图片描述

四、Docker Compose

现在我们删除多余的镜像和全部容器。
在这里插入图片描述
在这里插入图片描述
现在我们只需要一下三条命令就可以快速部署整个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容器化技术就到这里,以后有需要补充的再说。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/338884.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt Quick 项目(第一集Qt Quick UI 项目项目创建)】

# Qt Quick 项目 到底什么是Qt Qml、什么是Qt Quick、QtQuick应用程序与Qt Widget程序有何区别,为了让读者在学习QML之前有一个整体认识,这里先介绍几个Quick项目。 01 Qt Quick UI 项目

SCTP, TCP, UDP, IP, ICMP都在哪一层?(TCP/IP网络通信协议学习)

TCP/IP网络通信协议最早是由罗伯特卡恩(Robert E. Kahn)和文顿瑟夫(Vinton G. Cerf)于1972年提出的,它是一个实际的协议栈。 OSI七层网络通信协议最早是由国际标准化组织(ISO)于1977年提出的&am…

在CentOS 7 中配置NFS服务器

目录 1、克隆两个虚拟机 2、安装 NFS 服务 3、NFS 服务使用 1、克隆两个虚拟机 nfs-servernfs-client(修改ip地址)[rootxnode1 ~]# cd /etc/sysconfig/network-scripts/[rootxnode1 network-scripts]# vi ifcfg-eno16777736 #修改内容如下 BOOTPROT…

2024腾讯云服务器租用价格多少钱一年?1个月和1小时收费明细表

腾讯云服务器租用优惠价格表:轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年,540元三年、2核4G5M带宽218元一年,2核4G5M带宽756元三年、轻量4核8G12M服务器646元15个月,云服务器CVM S5实例2核2G配置280.8元一年、GPU服…

第三篇【传奇开心果系列】Vant开发移动应用:财务管理应用

传奇开心果博文系列 系列博文目录Vant开发移动应用系列博文 博文目录一、项目目标二、编程思路三、初步实现示例代码四、扩展思路五、使用Firebase等后端服务来实现用户认证和数据存储示例代码六、用Vant组件库实现收入和支出分类管理的示例代码七、用Vant组件库实现收入和支出…

【Bugku-web】计算器

1.打开训练场景 2.按"F12"查看页面源代码,根据箭头指向可以看到这个空白框内的长度为1,也就是输完一个字就不能往后输了,根据这样就直接更改数据1改3, 3.改后:多写几个字不碍事,然后计算正确值是…

第04章_IDEA的安装与使用(下)(IDEA断点调试,IDEA常用插件)

文章目录 第04章_IDEA的安装与使用(下)8. 快捷键的使用8.1 常用快捷键8.2 查看快捷键1、已知快捷键操作名,未知快捷键2、已知快捷键,不知道对应的操作名 8.3 自定义快捷键8.4 使用其它平台快捷键 9. IDEA断点调试(Debug)9.1 为什么…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例4-7 datalist

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>datalist</title> </head><body> <input id"address" list"addressList"> <datalist id"addressList"…

Typora + PicGo + GitHub搭建图床

Typora PicGo GitHub搭建图床 1. Typora下载破解 这一步自行百度 2. PicGo下载 PicGo is Here | PicGo 自行下载安即可 3. GitHub仓库设置 gitHub注册略过&#xff0c;如果不能访问请科学上网 创建仓库 生成访问token 点击右上角头像 -> setting -> 点击左边最…

C语言从入门到入坟

前言 1.初识程序 有穷性 在有限的操作步骤内完成。有穷性是算法的重要特性&#xff0c;任何一个问题的解决不论其采取什么样的算法&#xff0c;其终归是要把问题解决好。如果一种算法的执行时间是无限的&#xff0c;或在期望的时间内没有完成&#xff0c;那么这种算法就是无用…

万界星空科技MES系统的生产管理流程

对于生产型工厂来说&#xff0c;车间生产流程无疑是最重要的管理环节&#xff0c;繁琐的生产细节让企业很难找到合理的生产管理方法&#xff0c;导致人工效率低、错误多、成本高。如果想要解决这些问题&#xff0c;工厂就必须要有一套自己的生产管理系统&#xff0c;这样才能提…

为什么单片机不能直接驱动继电器和电磁阀?

为什么单片机不能直接驱动继电器和电磁阀&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「单片机的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&…

HarmonyOS鸿蒙应用开发(三、轻量级配置存储dataPreferences)

在应用开发中存储一些配置是很常见的需求。在android中有SharedPreferences&#xff0c;一个轻量级的存储类&#xff0c;用来保存应用的一些常用配置。在HarmonyOS鸿蒙应用开发中&#xff0c;实现类似功能的也叫首选项&#xff0c;dataPreferences。 相关概念 ohos.data.prefe…

利用AI制作桌游卡牌的个人实践

一、引言&#xff1a; ChatGPT ChatGPT是由OpenAI开发的一款基于GPT&#xff08;生成式预训练变换器&#xff09;架构的人工智能语言模型。GPT-4&#xff0c;是ChatGPT中使用的最新版本&#xff0c;具有以下特点&#xff1a; 1. **语言理解与生成能力**&#xff1a;ChatGPT擅…

Window安装Python和开发Pycharm

准备&#xff1a; 1&#xff1a;安装Python环境 https://www.python.org/downloads/windows/ 2: 下载Pycharm https://www.jetbrains.com/pycharm/download/other.html

记录 | vscode launch.json和task.json的用途用法

Tasks.json 按编译逻辑来说&#xff0c;先讲tasks.json 先贴图&#xff1a; "label"&#xff1a; 对应launch.json中的 "preLaunchTask"&#xff1b;&#xff08;一定要一致&#xff0c;决定了launch.json之前先运行哪个配置&#xff0c;tasks是一个arra…

Oracle Linux 6.10 安装图解

风险告知 本人及本篇博文不为任何人及任何行为的任何风险承担责任&#xff0c;图解仅供参考&#xff0c;请悉知&#xff01;本次安装图解是在一个全新的演示环境下进行的&#xff0c;演示环境中没有任何有价值的数据&#xff0c;但这并不代表摆在你面前的环境也是如此。生产环境…

分布式环境下流控技术汇总

本篇主要是对分布式环境流控技术、原理、使用场景做个简要的汇总&#xff0c;包括&#xff1a;固定时间窗口算法&#xff0c;滑动时间窗口算法&#xff0c;漏桶算法&#xff0c;令牌桶算法&#xff0c;分布式消息中间件&#xff0c;流控与熔断利器Sentinel。 1. 前言 在流量控…

k8s1.27.2版本二进制高可用集群部署

文章目录 环境软件版本服务器系统初始化设置关于etcd签名证书etcd集群部署负载均衡器组件安装设置关于k8s自签证书自签CAkube-apiserver 自签证书kube-controller-manager自签证书kube-scheduler自签证书kube-proxy 自签证书admin 自签证书 控制平面节点组件部署**部署kube-api…

linux C语言socket函数recv

recv 函数是在 Linux C 语言网络编程中用于从已连接的套接字接收数据的函数。它通常与 TCP 连接一起使用&#xff0c;但也可以用于 UDP&#xff08;尽管对于 UDP&#xff0c;更常使用 recvfrom&#xff0c;因为它还可以接收发送方的地址信息&#xff09;。 函数原型 recv 函数…
最新文章