分类 容器学习 下的文章

[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]在docker中使用php composer

前言

我之前搭建了一个twitter转发推文的工具,稳定正常运行了半年,这几天却报错:

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to

最初以为是ca证书的问题,然后开始折腾重新续期,重新申请,结果发现并不是,以为是TwitterOauth在这个库版本太低了,然后升级了一波,结果。。报!错!了!

Fatal error: Uncaught Error: Class 'Composer\CaBundle\CaBundle' not found in 
/www/twitter/\twitteroauth\src\TwitterOAuth.php:572 Stack trace: 
#0 /www/twitter/\twitteroauth\src\TwitterOAuth.php(620): Abraham\TwitterOAuth\TwitterOAuth->curlOptions() 
#1 /www/twitter/\twitteroauth\src\TwitterOAuth.php(557): Abraham\TwitterOAuth\TwitterOAuth->request('https://api.twi...', 'GET', 'Authorization: ...', Array, false) 
#2 /www/twitter/\twitteroauth\src\TwitterOAuth.php(490): Abraham\TwitterOAuth\TwitterOAuth->oAuthRequest('https://api.twi...', 'GET', Array, false) 
#3 /www/twitter/\twitteroauth\src\TwitterOAuth.php(467): Abraham\TwitterOAuth\TwitterOAuth->makeRequests('https://api.twi...', 'GET', Array, false) 
#4 /www/twitter/\twitteroauth\src\TwitterOAuth.php(232): Abraham\TwitterOAuth\TwitterOAuth->http('GET', 'h in /www/twitter/\twitteroauth\src\TwitterOAuth.php on line 572

好吧,原来是因为我没有编译,但是我生产环境,又是docker容器中,是不太想去安装git,composer这些玩意儿的。
这时候我灵机一动,是不是composer也有docker的镜像呢?
马上去是hub.docker中搜索,果然有,而且是官方维护的。那接下来就简单了。

安装

# docker pull composer:2.0.8

我以路径/www/twitter/twitteroauth为例子,直接运行:

docker run --rm --interactive --tty \
  --volume /www/twitter/twitteroauth/:/app \
  composer:2.0.8 install

稍等一会,就可以看到有vendor目录生成了。成功。

因为在docker中用php composer,php版本依赖没有保障,所以不推荐生产环境这么玩。
如果想持久化缓存,则可以将缓存映射到宿主机,比如这样:

docker run --rm --interactive --tty \
  --volume /www/twitter/twitteroauth/:/app \
  --volume /www/twitter/phpcomposer/:/tmp \
  composer:2.0.8 install

参考:
1.I used the TwitterOAuth library and got this error

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 是成功了,本来想发一个脚本出来,简单记录下这两个如何搭建,但是感觉没有太大的必要,最后面我还是需要重新搭一次,作罢!

- 阅读剩余部分 -