标签 docker 下的文章

[ docker]PHP8开启zip支持

前言

最近在整理推特的推文批量删除的功能,就是支持删除所有推文的功能,其中有用到压缩解压的类,综合考虑,打算使用linux中的libzip-dev依赖,为此搜索了好多地方,网上的介绍不尽相同,我这里将我真实能用的配置方式发出来,以供后续如果要继续操作的时候,可以用的上。

安装

因为我是在php4docker中使用的,所以我首先就是要查对应的extension怎么装,查看官方文档Installation
很简单,有个老哥已经说了要怎么操作了

首先是安装zlib1g-dev,libzip-dev,zip,其中zlib1g需要指定稍低一点的版本,我这里指定了1:1.2.8.dfsg-5,否则则会无法通过依赖。

之后是安装docker-php-ext,看下面代码
docker-php-ext-install mysqli pdo pdo_mysql zip

配置

这样镜像就整理好了,接下来修改php配置文件,如果不修改的话,还是会提示zipArchive找不到
php.ini增加extension = zip.so,之后重启php即可。

docker-compose中重新编译运行

直接使用build命令:docker-compose build;

测试

    private function unzip($filepath){
        if (empty($filepath)) {
            return false;
        }
        $zip = new ZipArchive();
        if ($zip->open($filepath) === true) {
            $zip->extractTo("/tmp/".$this->widget('Widget_User')->uid,"twitter.js");
            $zip->close();
            return true;
        }
        else{
            return false;
        }
    }

参考:

  1. install
  2. Docker image build with PHP zip extension shows “bundled libzip is deprecated” warning

[docker]使用docker-compose编排容器

前言

完整上线一个php+nginx+mysql+redis架构的网站中,我全程用docker搭建了基于php+nginx+mysql+redis的站点。
我目前遇到了一些问题:

  1. 重启很繁琐
  2. 修改配置,需要先docker stop,然后docker rm,再docker run,麻烦!
  3. 迁移到新站点麻烦。需要重复docker run,如果忘记了某一个命令,还要再查,麻烦!
    为此,我打算,将容器使用docker-compose进行编排,达到一次命令,运行所有内容。


- 阅读剩余部分 -

[Docker]MySql 定时备份

前言

今天调整了机器的参数,要做一个备份,想到还没有做自动备份,要是数据丢了,就啥都没了。所以研究了下,使用mysqldump来定时备份mysql的数据。

分析

我这块数据库是在容器中运行的,在宿主机上无法直接运行mysqldump命令进行备份(宿主机不关心数据库实例类型,且不会安装这些东西),而如果要备份就需要使用docker exec 进入容器中进行备份,这显然提供了一条思路给我们。
我现在需要挂载一个路径给容器内的mysql实例,好让容器能够将备份后的文件直接的存放下来。然后需要编写一个crontab自动任务脚本。

容器挂载目录

因为容器使用的时候,采用最少修改原则,就是尽量不要动容器的自动生成配置,所以我这里先停止容器,并且移除。
容器先执行停止操作docker stop mysql
容器移除`docker rm mysql'。
添加挂载目录-v /bak/mysqlbak/:/tmp/mysqlbak
例如下面的脚本

sudo docker run  \
 --network=djc8net --name mysql \
 -v /database/data/:/var/lib/mysql   \
 -v /database/mysql/conf:/etc/mysql/conf.d \
 -v  /bak/mysqlbak/:/tmp/mysqlbak \
 -e MYSQL_ROOT_PASSWORD=test \
 -d mysql:8.0.22

操作完成后,容器内就可以看到包含了/tmp/mysqlbak目录,这个目录就是我们做备份要存放的路径。

备份脚本

使用mysqldump可以灵活的将数据备份为sql脚本,方便分发。
首先创建一个sh文件:touch /tool/autojob/bak_mysql.sh
内容如下:

#!/bin/bash
export NOW="$(date +"%Y-%m-%d")"
export DATA_DIR=/tmp/mysqlbak
docker exec -it mysql /bin/bash -c "mysqldump -uroot -ptest --set-gtid-purged=OFF --all-databases > $DATA_DIR/$NOW.sql"

我这里备份的是所有的数据库。

授予权限:chmod +x /tool/autojob/bak_mysql.sh
调试运行:./tool/autojob/./bak_mysql.sh
没有问题的话查看下/bak/mysqlbak就会看到以当前日期为名字的sql脚本了。

自动运行备份脚本

执行:crontab -e.
在最底下添加一行:20 01 * * * /tool/autojob/bak_mysql.sh
保存,并且执行:crontab -l。列表中就会出现这一行了。
备份时间为每天的早上01点20分。

docker-compose 升级版本

前言

最近一直在研究怎么搭建云笔记平台,本着实事求是,客观公正的态度,开始做起了实验,然而leanote已经多年没有更新,wiz的自搭服务器,感觉很吃配置,转头搜索到了Standard Notes,打算装着试试,结果因为docker-compose版本不太够,再容器部署的时候,报错了。
所以这是一篇升级docker-compose的文章。


- 阅读剩余部分 -

谈谈 docker 的安全性

作为开发人员我很少关注服务器环境的安全性问题,我一般会比较关注我自身代码的安全问题。
现在整站上了docker容器后,其实也会比较关注服务器的安全性,我个人觉得应该是比较安全的,毕竟是在容器中运行,就算我某个服务挂了,也威胁不到我宿主机的安全。


- 阅读剩余部分 -

[Docker]完整上线一个php+nginx+mysql+redis架构的网站

前言

本文章是我最近将我的站点搭建到docker容器中后,整理出来的,来源于:
docker整站迁移到docker容器中1
docker整站迁移到docker容器中2
docker整站迁移到docker容器中3

使用docker,会让你更加方便的搭建服务环境,不需要管那么细枝末节的问题。

我在腾讯云的轻量云(香港)的机器上进行的本次脚本,如果实践过程有任何错误,请在底下留言,谢谢!

服务器环境信息:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1
On-line CPU(s) list:   0
Thread(s) per core:    1
Core(s) per socket:    1
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 79
Model name:            Intel(R) Xeon(R) CPU E5-26xx v4
Stepping:              1
CPU MHz:               2394.446
BogoMIPS:              4788.89
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              4096K
NUMA node0 CPU(s):     0
Flags:                 fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch pti bmi1 avx2 bmi2 rdseed adx xsaveopt
[root@VM-0-11-centos sql]# free -m
              total        used        free      shared  buff/cache   available
Mem:            983         650          91           2         241         188
Swap:             0           0           0
[root@VM-0-11-centos sql]# fdisk -l |grep Disk
Disk /dev/vda: 26.8 GB, 26843545600 bytes, 52428800 sectors
Disk label type: dos
Disk identifier: 0x0009ac89



- 阅读剩余部分 -

[docker]nginx利用certbot4docker 自动续期证书

使用certbot可以简单的申请证书,并且能够通过简单的任务配置,达到自动续期的目的。我现在的站点就是用的let's Encrypt的证书,每3个月需要续期一次,比较繁琐。所以,就想到用certbot来做续期,但是又不想在机器中装太多依赖,一来比较冗余,毕竟3个月才跑一次,二来也是担心工具装的太多,以后迁移系统比较麻烦。

- 阅读剩余部分 -

[docker]整站迁移到docker容器中3

在我docker整站迁移到docker容器中2这篇文章中,我分析了要做的内容,接下去的日志我将会慢慢更新提及的几个关键服务软件的搭建方式,以及我将会记录下对应遇到的坑。

目前我本地试验php-fpm+nginx 是成功了,本来想发一个脚本出来,简单记录下这两个如何搭建,但是感觉没有太大的必要,最后面我还是需要重新搭一次,作罢!

- 阅读剩余部分 -

[docker]整站迁移到docker容器中1

最近学习docker,觉得docker实在是个好东西,值得一用。
就打算将本站迁移到docker容器中,这样一来安全性应该也有所保障(环境隔离),二来也适合日后的迁移(我理解是只要将dockerfile在其他系统执行,然后将持久化数据拷贝出来即可。)

为了达到迁移的目的,我打算进行以下几个步骤:

  1. 前期分析
  2. 模拟演练
  3. 实际操作

前期分析阶段,我打算花一周的时间进行资料查找,
模拟演练阶段,依照前期分析的计划而定,目前还没有一个具体的时间。
实际操作阶段,一周时间进行操作,届时站点可能会断断续续的无法访问。

这是一篇很耗时的文章,我打算在明年2月份就改造结束。