docker docker-compose

Compose是用于定义和运行多容器Docker应用程序的工具。通过Compose,您可以使用YML文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从YML文件配置中创建并启动所有服务。 YML入门教程 Compose 使用的三个步骤: 使用Dockerfile定义应用程序的环境。 使用docker-compose.yml定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。 最后,执行docker-compose up命令来启动并运行整个应用程序。 一个例子 1 2 3 4 5 6 7 8 9 # yaml 配置version:'3'services:web:build:.ports:- "5000:5000"redis:image:"redis:alpine" 该 Compose 文件定义了两个服务:web和redis。 web:该 web 服务使用从 Dockerfile 当前目录中构建的镜像。然后,它将容器和主机绑定到暴露的端口 5000。此示例服务使用 Flask Web 服务器的默认端口 5000 。 redis:该 redis 服务使用 Docker Hub 的公共 Redis 映像。 安装 官方安装文档 1 2 3 4 5 6 7 8 sudo curl -L "https://github.com/docker/compose/releases/download/1.25.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose docker-compose --version 运行 1 2 docker-compose up docker-compose up -d yml配置指令参考 version 指定本yml依从的compose哪个版本制定的。...

created: 2018-06-12  |  updated: 2018-06-12  |  阿秀

docker docker配置与常用命令

https://docs.docker.com/ http://www.dockerinfo.net/document https://www.runoob.com/docker/docker-tutorial.html docker镜像加速 在/etc/docker/daemon.json中写入如下内容(如果文件不存在请新建该文件): 1 2 3 { "registry-mirrors":["https://registry.docker-cn.com"] } 重启服务 1 2 sudo systemctl daemon-reload sudo systemctl restart docker 检查是否成功 1 2 3 4 docker info >>>Registry Mirrors: https://registry.docker-cn.com/ 命令 使用docker images查看本地主机上的镜像 使用docker search image_name在docker hub上查找镜像 使用docker pull image_name拉取镜像 1 docker pull python3.8 更新镜像 更新镜像并打标签 1 docker commit -m="leave your message" -a="author" container_id_or_container_name image_name:version 1 docker run ubuntu:16....

created: 2018-06-11  |  updated: 2018-06-11  |  阿秀

docker 如何编写Dockerfile

来源菜鸟教程 FROM 1 FROM nginx 定制的镜像都是基于FROM的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。 RUN RUN用于执行后面跟着的命令行命令。有以下俩种格式: shell格式: 1 2 RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。 exec格式: 1 2 3 RUN ["可执行文件", "参数1", "参数2"] # 例如: # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline Dockerfile的指令每执行一次都会在docker上新建一层。所以过多无意义的层,会造成镜像膨胀过大。例如: 1 2 3 4 FROM centos RUN yum install wget RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" RUN tar -xvf redis....

created: 2018-06-09  |  updated: 2018-06-09  |  阿秀

Python 基于生成器的协程

从生成器到协程 python的协程是从yield和yield from发展而来的,因为yield一开始是用来实现生成器的,为了使得协程不是某种生成器,在python 3.5开始提出使用新关键字async和await来实现了原生协程。 基于生成器的协程 使用yield实现的协程是基于生成器的,将在3.10弃用。建议没接触过python协程的直接接触async声明的原生协程 一个简单的协程例子 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 def cor(init): index = init while True: recv = yield f'now at index {index}' print(f'recv: {recv}') index += 1 c = cor(init=0) c.send(None) r1 = c.send('1') print(r1) r2 = c.send('2') print(r2) send()是实现协程的一个核心点 协程的参数用于协程开始之前进行相关初始化操作。 协程中表达式recv = yield result, 其中result是协程的返回值(没有result时表示没有返回值),而recv是用来接收外部传入到协程中的数据 一个注意的点是,程序的运行顺序是先接收数据,再返回值,即index+=1后再返回给r1 使用装饰器预激活协程 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 from functools import wraps def decorator(coroutine): @wraps(coroutine) def func(*args, **kwargs): primed_cor = coroutine(*args, **kwargs) primed_cor....

created: 2018-03-10  |  updated: 2018-03-10  |  阿秀

Python 位置参数,关键字参数, 默认参数, 可变长位置参数,可变长关键字参数

假设这里有一简单的函数 1 2 def printf(first, second, third): print(first, second) 位置参数 位置参数指的是调用函数时,参数顺序相一致 1 2 printf(1, 2, 3) print(4, 5, 6) 关键字参数 关键字参数指使用键值对key=value这样的方式调用程序 1 printf(first=1, second=2, third=3) 需要注意的是,当你使用关键字参数这种传递方式后,该函数后续参数将不能使用位置参数这一形式进行传递,如: 1 2 printf(first=1, 2, 3) # 错误 printf(1, second=2, third=3) # 正确 即保证位置参数必须放在关键字参数前。类似的,若函数中含默认参数,则后续参数也必须为含默认参数的参数 1 2 3 4 5 def func(first, second=2, third): # 错误 pass def func(first, second=2, third=3): # 正确 pass 除此之外,关键字参数的顺序可以打乱(位置参数顺序不可以改变):...

created: 2017-10-10  |  updated: 2017-10-10  |  阿秀

MySQL操作手册

常用命令 登陆 1 mysql -u root -p 查看有什么数据库 1 show databases; 创建数据库 1 mysql> create database db_name; 删除数据库 1 drop database database_name; 选中数据库 1 use database_name; 查看数据库里的表 1 show tables; 修改mysql8的密码 1 2 3 shell>mysql -u root -p mysql>use mysql; mysql>ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_database_password'; MySQL基础 mysql数据类型 https://www....

created: 2017-08-10  |  updated: 2017-11-25  |  阿秀

js快速入门

数据类型 5种简单数据类型: 数字, 字符串, 布尔值, null, undefined 1种复杂数据类型: object typeof 用来检测变量的类型, 返回结果如下: boolean, string, number, object, function, undefined null是一个特殊的object对象 字符串是不可变类型 Number js所有数字都用浮点数值表示, 浮点数值必须包含一个小数点 布尔类型 当if语句里没有表达式,只是某个值时,会自动执行Boolean()操作, 非空字符串, 非零数值, 任意object都转换为true, 0和NaN, null为false for in 1 for(x in container) 对象 objectName.propertyName objectName.methodName() string length, toUpperCase(), toLowerCase(), replace(), split(), concat(), indexOf(), lastIndexOf(), substring(), substr(), trim() Date() Array() map(), forEach(), reverse(), sort() Math 格式为:Math.PI E, LN2, LN10, LOG2E, LOG10E, PI max(), min, abs(), round(), ceil(), floor(), random()...

created: 2016-11-23  |  updated: 2016-11-25  |  阿秀

CSS快速入门

简介 CSS, 层叠样式表, 网页与内容分离的一种样式设计语言 写法格式 外链样式, 通过载入的方式加载, 后缀为.css 1 2 3 <head> <link rel="stylesheet" href="" /> </head> 页内样式, 直接在本页面写css 1 2 3 <head> <style></style> </head> 行内样式, 在html标签内部, 以属性的方式, 只会对文本标签起作用 选择器 标签选择器 1 h1{color:red} class选择器 1 2 3 4 5 6 7 <head> .myClassName{color:red;} .another{font-size:50px;} </head> <body> <h1 class="myClassName another">title</h1> </body> id选择器 1 2 3 4 5 6 7 8 <head> #idSelect{color:red;} </head> <body> <!...

created: 2016-11-10  |  updated: 2016-11-25  |  阿秀