AISYUN's Blog

学习、笔记、分享

docker 内部通信原理

前面介绍了nginx与php两个容器间是如何进行通信的:

1
2
3
4
5
6
7
[root@docker ~]# docker run -d --name=php -v /www:/usr/local/nginx/html php
[root@docker ~]# docker run -d --name=nginx --link=php:php -v /www:/usr/local/nginx/html -p 81:80 nginx

[root@docker ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58280fe851f9 nginx "/usr/local/nginx/..." 15 seconds ago Up 14 seconds 0.0.0.0:81->80/tcp nginx
9ea150c35587 php "/usr/local/php/sb..." 36 seconds ago Up 35 seconds 9000/tcp php

通过容器间的选项–link指定容器名称进行不同容器间的通信(–link container_name或者将container_name取一个别名)

现在使用另外一种方式替代–link来达到容器间的通信:docker network

阅读全文 »

onlyoffice社区版Community Server是根据GNU Affero通用公共许可证发行的ONLYOFFICE的免费下载开源版本。 但该版本限制了最大连接数量为20,超出之后只能预览不能编辑。并删除了移动端编辑功能。

根据AGPL许可协议,在遵守AGPL许可协议的前提下,任何人都可以自由修改、使用、分发。

img

本版特性

  • 基于docker镜像制作,版本号: 6.31 Build: 32
  • 去除20并发连接限制。
  • 去除移动端不能编辑限制。
  • 基于onlyoffice社区版。
阅读全文 »

  • 我是用的Typora来用markdown编写文章,使用chevereto搭建了个人图床,配合Typora的自动上传功能,参考了别人的代码,来实现粘贴图片自动上传到个人图床
  • 注意:你的typora需要是最新版

PYTHON脚本

  • 创建一个python脚本,名字随意,位置自定

    1
    2
    3
    cd ~/文档/
    gedit upload.py
    12
  • 复制粘贴以下代码

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    #!/usr/bin/env python3
    # -*- encoding: utf-8 -*-
    # author: guiu
    # data: 2020.2.28

    import requests
    import json
    import mimetypes
    import argparse
    import sys

    APP_DESC = """
    一个上传图片到chevereto图床的命令行工具
    """

    print(APP_DESC)
    if len(sys.argv) == 1:
    sys.argv.append('--help')

    parser = argparse.ArgumentParser()
    parser.add_argument('-s', '--source', type=str, nargs='+', help="", required=True)
    parser.add_argument('-c', '--config', default="./config.json", help="读取配置文件", required=True)
    args = parser.parse_args()

    # 从参数中获取要上传的文件列表
    img_list = args.source
    # print(img_list)

    def read_conf(path):
    with open(path,"r",encoding="utf-8") as f:
    confstr = f.read()
    conf = json.loads(confstr)
    return conf

    def up_to_chevereto(img_list):
    # 获得本地图片路径后,上传至图床并记录返回的json字段
    for img in img_list:
    # 先判断传过来的是本地路径还是远程图片地址
    if "http" == img[:4]:
    # 非本地图片的话可以考虑下载到本地再上传,但是没这个必要
    print(img)
    continue
    else:
    try:
    res_json = upload(formatSource(img))
    parse_response_url(res_json,img)
    except:
    print(img+"\t上传失败")

    def upload(files):
    # 图床api
    # APIKey = "THERE PUT YOUR APIKEY"
    conf = read_conf(args.config)
    url = conf['url'] + "?key=" + conf['APIKEY']
    r = requests.post(url, files=files)
    return json.loads(r.text)

    def formatSource(filename):
    imageList = []
    mime_type = mimetypes.guess_type(filename)[0]
    imageList.append(
    ('source', (filename, open(filename, 'rb'), mime_type))
    )
    #print (imageList)
    return imageList

    def parse_response_url(json, img_path):
    # 从返回的json中解析字段
    if json['status_code'] != 200:
    print("{}\tweb端返回失败,可能是APIKey不对. status_code {} .".format(
    img_path, json['status_code'])
    )
    else:
    img_url = json["image"]["url"]
    print(img_url)

    up_to_chevereto(img_list)
    1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677

查看你的API KEY

  • 到你的chevereto站点->仪表盘->设置->API
阅读全文 »

当一个docker-compose文件运行的时候,同属一个文件内的所有容器之间会建立一个default的网络,这些容器之间的访问、通讯则都在这个默认的网络下进行。但是通常我们会根据构建更新的频率、业务领域等条件划分不同的docker-compose,而且这些不同的docker-compose的容器之间默认是不支持互相通讯的。那么就需要构建一些公共的网络,然后这些所有的需要相互通讯的容器都加入这个公共网络即可完成通讯。

构建公共网络

1
docker creae network sharefly[自定义名称]

需要相互通讯的容器之间定义networks属性
在这里插入图片描述
dockercompose声明网络查找和建立连接,在docker-compose.yml的文件底部添加:

1
2
3
networks:
sharefly:
external: true
阅读全文 »

​ 安装mysql的docker容器比较简单,也没有什么复杂的设置,需要挂载目录的话在安装时指定就行。我挂载了2个目录:自定义配置文件:/docker/mysql/config挂载到/etc/mysql/conf.d,数据库文件:/doker/mysql/data挂载到/var/lib/mysql。

另外需要注意的是,要增加环境变量MYSQL_ROOT_PASSWORD,这样可设定root用户的密码。

拉取并mysql镜像并运行容器:

1
2
3
4
5
6
7
8
docker pull mysql:5.7
docker run \
--name mysql \
-v /docker/mysql/config:/etc/mysql/conf.d \
-v /docker/mysql/data:/var/lib/mysql \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=my-secret \
-d mysql:5.7

国内用户在拉取docker镜像时,由于网络原因,可能速度非常感人。此时可能选择国内镜像加速器进行拉取,速度会改善不少。

阿里云有docker加速服务,登录到控制台–>容器镜像服务–>镜像中心–>镜像加速器,复制你的加速器地址。

阿里云加速器的格式一般为:[系统分配前缀].mirror.aliyuncs.com,如:https://1nj0zren.mirror.aliyuncs.com/。

另外,我常用的加速器还有网易、百度、腾讯和中科大:

网易云加速器:https://hub-mirror.c.163.com

阅读全文 »

一直用迅雷下载,发现很多最新的电影因为版权方要求,限制下载,尝试使用Aria2下载,可以突破限制。我使用的docker方式安装,并且配合AriaNG和FileRun,那叫一个完美。具体步骤职下:

一、安装好FileRun,这个不多说,方法很多,可以直接拉取FileRun的docker镜像安装,也可单独建好php、mysql、nginx的容器来运行FileRun的安装文件。我使用的是后者。

二、安装Aria2 Pro,项目地址:https://p3terx.com/archives/docker-aria2-pro.html,docker地址:https://hub.docker.com/r/p3terx/aria2-pro

安装docker启动命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker run -d \
--name aria2-pro \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=$UID \
-e PGID=$GID \
-e UMASK_SET=022 \
-e RPC_SECRET=<TOKEN> \
-e RPC_PORT=6800 \
-e LISTEN_PORT=6888 \
-p 6800:6800 \
-p 6888:6888 \
-p 6888:6888/udp \
-v /data/docker/aria2-config:/config \
-v /www.filerun.com/data/aria2-downloads:/downloads \
p3terx/aria2-pro
阅读全文 »

先设置以太网卡开启混杂模式,在putty输入代码

1
ip link set eth0 promisc on

然后docker搭建macvlan网络,macvlan作用自行百度,putty输入代码(这里要注意的是192.168.2.0/24要根据你群晖的主机子网段设定,而192.168.2.2是群晖获取的路由网关,如我的群晖ip是192.168.2.229,网关192.168.2.2,最后的macnet是建立的网络名称,可以自行修改)

1
2
3
4
docker network create -d macvlan -o parent=eth0 macnet\
--subnet=192.168.31.0/24 \
--ip-range=[IP段] \
--gateway=192.168.31.1 \

拉取镜像,创建并启动容器

阅读全文 »

利用docker容器技术,可以让我们很方便的搭建服务,完全可以用“招之即来,挥之即去”形容。比如搭建网站,需要建立3个容器:nginx、php、mysql,通过docker技术安装这个三服务都是分分钟的事,如果自行编译,需要的时间就非常多了。

和传统的LNMP环境相比,使用容器服务如何配置多个虚拟主机呢?这个也很简单,本着一个容器提供一个服务的原则,我安装了nginx、php、mysql这3个容器。下面我就说一下配置。

1、nginx容器打开了端口:-p 80:80和-p 443:443,该容器名为nginx;

2、mysql容器打开了端口:-p 3306:3306,该容器名为mysql;

3、php容器打开了端口:-p 9000:9000,该容器名为php;

阅读全文 »
0%