1 |
|
https://devopsheaven.com/docker/dockerhub/2018/04/09/delete-docker-image-tag-dockerhub.html
1 | #!/usr/bin/env bash |
https://devopsheaven.com/docker/dockerhub/2018/04/09/delete-docker-image-tag-dockerhub.html
装饰器实现
1 | # 装饰器实现 |
元类实现
1 | # 元类实现 |
工厂模式属于创建型模式, 它提供了一种创建对象的最佳方式.
在工厂模式中, 我们在创建对象时不会对客户端暴露创建逻辑, 并且时通过使用一个共同的接口来指向新创建的对象.
1 | # 根据品牌名生产不同的汽车 |
当对象需要多个部分组合起来一步步创建,并且创建和表示分离的时候。可以这么理解,你要买电脑,工厂模式直接返回一个你需要型号的电脑,但是构造模式允许你自定义电脑各种配置类型,组装完成后给你。这个过程你可以传入builder从而自定义创建的方式。
假如我们要生产一台Computer, 我们需要首先定义一个Computer类, 他表示了一个Computer由那些组件组成. 然后定义一个Builer, Builer用于组装Computer. 最后定义一个Enginner, 工程师告诉Builer用那些配件参数生产Computer, 然后得到一台根据具体参数生产的Computer
1 | # 首先我们先定义一个 Computer 类 |
可以使用Python内置的copy模块实现. 拷贝分为深拷贝和浅拷贝, 这里我觉得有点像C里面的指针. 浅拷贝相当于复制了对象的指针, 还是指向同一个对象, 而深拷贝则完全复制了一个新的对象.
深拷贝的优点是对象之间完全独立互不影响, 但是这个操作会比较消耗资源.
浅拷贝的优点是仅仅复制了指向对象的指针, 因为引用的都是同一个对象, 这个操作比深拷贝消耗的资源要少得多, 但是因为指向同一个对象, 所以当对象需要进行某些操作时候要慎重考虑.
1 | import json |
未完待续…
这样定义的属性是类属性, 我们 new 两个实例测试下
1 | class MyClass(object): |
可以看到指向了相同的地址
1 | 2078100290056 |
再 __init__
方法中创建的属性是实例属性
1 | class MyClass(object): |
可以看到指向了不同的地址
1 | 1631300614792 |
类属性属于类所有, 所有实例共享一个属性
实例属性属于实例所有, 每个实例各自独享一个属性
不要对实例属性和类属性使用相同的名字,否则将产生难以发现的错误。
https://www.liaoxuefeng.com/wiki/1016959663602400/1017594591051072
表名: table_name
查询列: column_name
1 | select * from table_name |
1 | select * from table_name as t1 |
表名: table_name
查询列: column_name
1 | delete from table_name |
1 | delete from table_name |
查看日志
1 | docker logs container_name_or_id |
Docker 日志目录
1 | /var/lib/docker/containers/container_id |
1 | v2ray: |
日志被限制在5g大小.
增加项文件
1 | { |
到文件, 如果没有则新建.
1 | /etc/docker/daemon.json |
重启docker
1 | service docker restart |
1 | e66515c..389e67f master -> gitlab/master |
放弃本地修改,直接覆盖
1 | git reset --hard |
仓库地址
1 | https://registry.hub.docker.com/r/certbot/certbot |
官方参考
1 | https://certbot.eff.org/docs/install.html#running-with-docker |
pull 镜像
1 | docker pull certbot/certbot |
这个方案的坏处是需要启动内置的nginx服务器占用80和443端口.
创建两个目录
1 | /etc/letsencrypt |
运行镜像
1 | docker run -it --rm --name certbot \ |
提问用webserver部署或者用webroot
1 | How would you like to authenticate with the ACME CA? |
我们用临时服务器方便点所以选择1, 如果用2的话需要自己设置验证文件.
提示你输入邮箱
1 | Plugins selected: Authenticator standalone, Installer None |
不用看了,就是我已阅读并同意….
1 | Please read the Terms of Service at |
想不想接受他给你发邮件
1 | Would you be willing, once your first certificate is successfully issued, to |
输入你的域名, 例如: yourself.hostname.xxx, 这里不要输错了, 输错无法后退, 只能重来.
1 | Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' |
看到
1 | IMPORTANT NOTES: |
完成
证书保存在
1 | /etc/letsencrypt/live/yourself.hostname.xxx/ |
CentOS7用阿里源安装Docker
1 | # step 1: 安装必要的一些系统工具 |
根据CentOS7的安装方式安装遇到如下问题。
错误描述
1 | 上次元数据过期检查:0:00:11 前,执行于 2020年06月10日 星期三 02时05分21秒。 |
使用阿里源安装containerd.io安装不低于1.2.2-3的版本
1 | yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.13-3.2.el7.x86_64.rpm |
然后继续根据CentOS7的安装方法安装即可。
参考链接:https://blog.csdn.net/RtxTitanV/article/details/106550640
这是一个基于Flask,Tensorflow,Keras实现的12306验证码识别接口。
搭建好的接口:https://mark12306captcha.wudinaonao.com
1 | docker pull wudinaonao/flask-mark-12306-captcha |
1 | docker run -dit -p 8848:8848 wudinaonao/flask-mark-12306-captcha |
1 | version: "3.1" |
访问:http://yourhostname:8848
从12306获取一张测试的验证码
Request
Content-Type: application/json
/Mark12306Captcha/api/v1.0/get/captcha
Response
Content-Type: application/json
1 | { |
Request
Content-Type: application/json
/Mark12306Captcha/api/v1.0/mark
{"originCaptcha":"captcha base64 string"}
Response
Content-Type: application/json
1 | { |
Result 解释说明
0 | 2 | 4 | 6 |
---|---|---|---|
1 | 3 | 5 | 7 |
Request
Content-Type: application/json
/Mark12306Captcha/api/v1.0/mark/lite
{"originCaptcha":"captcha base64 string"}
Response
Content-Type: application/json
1 | { |