分类: 杂项

Docker的三种网络代理配置

众所周知的原因,Docker最近需要使用代理。
Docker的代理配置,略显复杂,因为有三种场景。 但基本原理都是一致的,都是利用Linux的http_proxy等环境变量。

Dockerd 代理

在执行docker pull时,是由守护进程dockerd来执行。 因此,代理需要配在dockerd的环境中。 而这个环境,则是受systemd所管控,因此实际是systemd的配置。
修改docker 的docker.service文件
Service节点下新增代理环境变量配置
我的文件位置是:/lib/systemd/system/docker.service

[Service]
Environment="HTTP_PROXY=http://127.0.0.1:1080"
Environment="HTTPS_PROXY=http://127.0.0.1:1080"

dockerd代理的修改比较特殊,它实际上是改systemd的配置,因此需要重载systemd并重启dockerd才能生效。

systemctl daemon-reload
systemctl restart docker.service

Container 代理

在容器运行阶段,如果需要代理上网,则需要配置~/.docker/config.json。 以下配置,只在Docker 17.07及以上版本生效。

{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://proxy.example.com:8080",
     "httpsProxy": "http://proxy.example.com:8080",
     "noProxy": "localhost,127.0.0.1,.example.com"
   }
 }
}

这个是用户级的配置,除了proxies,docker login等相关信息也会在其中。 而且还可以配置信息展示的格式、插件参数等。
此外,容器的网络代理,也可以直接在其运行时通过-e注入http_proxy等环境变量。 这两种方法分别适合不同场景。 config.json非常方便,默认在所有配置修改后启动的容器生效,适合个人开发环境。 在CI/CD的自动构建环境、或者实际上线运行的环境中,这种方法就不太合适,用-e注入这种显式配置会更好,减轻对构建、部署环境的依赖。 当然,在这些环境中,最好用良好的设计避免配置代理上网。

docker build代理

虽然docker build的本质,也是启动一个容器,但是环境会略有不同,用户级配置无效。 在构建时,需要注入http_proxy等参数。

docker build . \
    --build-arg "HTTP_PROXY=http://proxy.example.com:8080/" \
    --build-arg "HTTPS_PROXY=http://proxy.example.com:8080/" \
    --build-arg "NO_PROXY=localhost,127.0.0.1,.example.com" \
    -t your/image:tag

注意:无论是docker run还是docker build,默认是网络隔绝的。 如果代理使用的是 localhost:3128 这类,则会无效。 这类仅限本地的代理,必须加上--network host才能正常使用。 而一般则需要配置代理的外部IP,而且代理本身要开启gateway模式。

代理配置完成后,reboot重启当然可以生效,但不重启也行。

docker build代理是在执行前设置的,所以修改后,下次执行立即生效。
Container代理的修改也是立即生效的,但是只针对以后启动的Container,对已经启动的Container无效。

N1安装File Browser 轻量网盘工具

折腾了好久的N1,尝试过各种面板,都不太理想,最后还是开始用各种独立软件来搭建自己的服务。
我的N1都是硬改过的内存128/64Gb 可以做一个小的云盘来使用,当然也可以挂一个硬盘来用。

官方有脚本安装,但个人喜欢自定义安装,同时本就是 Go 语言编写的程序,直接下载编译好的可执行文件运行即可。因此下面介绍在 Linux 上直接运行的方式。

安装

首先去 release 页面,根据你的系统和处理器架构选择下载最新的版本,比如这里下载 linux-arm64-filebrowser.tar.gz 版本:

wget https://github.com/filebrowser/filebrowser/releases/download/v2.30.0/linux-arm64-filebrowser.tar.gz

解压到你指定的目录,比如这里的 /home/filebrowser:

tar -xvf linux-arm64-filebrowser.tar.gz  -C /home/filebrowser

进入到你的目录为 filebrowser 添加可执行权限:

chmod +x filebrowser

接下来就直接运行了:

./filebrowser -p 2222

配置参数运行

在上面的直接运行命令中你可以加上一些自定义参数,在官方文档中可以看到完整的命令使用,下面是部分常用的的参数:

-a, –address string:监听的地址(默认为 127.0.0.1)
-p, –port string:监听端口(默认为 8080)
-b, –baseurl string:网站路径
-t, –cert string:SSL 证书
-k, –key string:SSL 证书密钥
-l, –log string:日志默认为标准输出,如果要记录到文件的话可以直接指定文件,例如 /home/filebrowser/filebrowser.log
-c, –config string:配置文件路径
-d, –database string:数据库路径(默认值 “./filebrowser.db”)
-r, –root string:数据存放路径

这里我为了方便,选择自己写一个配置文件,vim filebrowser.json:

{
  "port": 2222,
  "baseURL": "",
  "address": "127.0.0.1",
  "log": "stdout",
  "database": "/home/filebrowser/database.db",
  "root": "/data/filebrowser"
}

之后直接在程序目录执行:

./filebrowser -c filebrowser.json

然后在浏览器中打开你的网站登录即可,默认管理员用户和密码都为 admin,建议登录后先重新设置密码。

使用 SSL

File Browser 本身支持直接在运行时使用 t 和 k 参数或者在配置文件中使用 cert 和 key 参数设置 SSL 证书和密钥。但我这里选择使用 Nginx 前端反代:

server {
    listen ...;
    server_name ...;
    ssl_certificate ...; 
    ssl_certificate_key ...;
    ...
    location / {
        proxy_pass  http://127.0.0.1:2222;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

如果你想使用二级目录,例如 yourdomain.com/file 的形式,需要修改前面配置文件中 "baseURL": "/file",以及 Nginx 配置文件中 location /file。

后台持续化运行

可以简单使用直接 nohup:

nohup filebrowser -c filebrowser.json &

但我更推荐通过 systemd 控制:

vim /etc/systemd/system/filebrowser.service

输入以下内容:

[Unit]
Description=File Browser
After=network.target

[Service]
ExecStart=/home/filebrowser/filebrowser -c /home/filebrowser/filebrowser.json

[Install]
WantedBy=multi-user.target

记得修改 ExecStart 后面为你自己的文件路径,之后执行:

systemctl daemon-reload

systemctl 常用操作

运行:systemctl start filebrowser.service
停止运行:systemctl stop filebrowser.service
开机启动:systemctl enable filebrowser.service
取消开机启动:systemctl disable filebrowser.service

Armbian安装SMB做文件共享

安装SMB

进入armbian-config,到安装软件页面,Samba空格选中,再回车安装。

配置SMB

修改配置文件/etc/samba/smb.conf,直接覆盖原内容,实现匿名直接连接。

[global]
    workgroup = WORKGROUP
    server string = Samba Server Version %v
    passdb backend = tdbsam
    cups options = raw
    security = user                    #认证模式为User
    map to guest = bad user            #这个很关键,实现匿名无须交互输入用户名和密码就靠它了
    guest account = guest              #匿名用户映射为guest用户

[myshare]                    #共享后看到的文件夹名
    comment = My share
    path = /home/public      #共享路径
    browseable = Yes         #可以被浏览,就是在网络邻居中能看到共享名
    read only = No           #可读写
    guest ok = Yes           #允许匿名访问,这个也需要设置,否则匿名无法访问
    valid users = samba liuag guest    #有效的用户和组
    invalid users = liuben   #无效用户和组   
    read list = samba    #只读用户和组(如果read only = No,只读用户需要在此设置)
    write list = liuag   #可读写用户和组(如果read only = Yes,可读写用户需要在此设置)
    allow hosts = 192.168.100.236    #允许访问主机列表,支持通配符
    deny hosts = 192.168.100.0/24    #禁止访问主机列表,支持通配符

简洁版

[global]
       workgroup = WORKGROUP
       security = user
       map to guest = Bad User
[media]
       comment = resources
       path = /home/public
       public = yes
       writable = yes
       guest ok = yes
       browseable = yes

修改目录权限
chmod -R 777 /home/public
开机启动SMB
systemctl enable samba
重启SMB
systemctl restart samba

Mac启动台 Launchpad 图标数量 大小调整

调整Launchpad 启动台的每一行、和每一列图标的数量,达到调整Launchpad图标大小的目的。
具体办法:

打开终端,复制并执行以下4行命令:

defaults write com.apple.dock springboard-columns -int 9
defaults write com.apple.dock springboard-rows -int 6
defaults write com.apple.dock ResetLaunchPad -bool TRUE
killall Dock

以上每行的含义:
1、调整每一列显示图标数量,9表示每一列显示9个,数字部分可根据个人喜好进行设置。
2、调整多少行显示图标数量,这里我用的是6,数字部分你也可以改成8或其他
3、重置Launchpad
4、重启Dock

恢复默认设置的方法,在终端Terminal中执行以下4行命令(全部复制):

defaults write com.apple.dock springboard-rows Default
defaults write com.apple.dock springboard-columns Default
defaults write com.apple.dock ResetLaunchPad -bool TRUE
killall Dock

curl与wget高级用法

curl(文件传输工具)

常用参数如下:

-c,–cookie-jar:将cookie写入到文件
-b,–cookie:从文件中读取cookie
-C,–continue-at:断点续传
-d,–data:http post方式传送数据
-D,–dump-header:把header信息写入到文件
-F,–from:模拟http表达提交数据
-s,–slient:减少输出信息
-o,–output:将信息输出到文件
-O,–remote-name:按照服务器上的文件名,存在本地
–l,–head:仅返回头部信息
-u,–user[user:pass]:设置http认证用户和密码
-T,–upload-file:上传文件
-e,–referer:指定引用地址
-x,–proxy:指定代理服务器地址和端口
-w,–write-out:输出指定格式内容
–retry:重试次数
–connect-timeout:指定尝试连接的最大时间/s

使用示例:

例1:抓取页面到指定文件,如果有乱码可以使用iconv转码

curl -o baidu.html www.baidu.com
curl –s –o baidu.html www.baidu.com |iconv -f utf-8 #减少输出信息

例2:模拟浏览器头(user-agent)

 curl -A “Mozilla/4.0 (compatible;MSIE 6.0; <a href="http://www.ttlsa.com/windows/" title="windows"target="_blank">Windows</a> NT 5.0)” www.baidu.com

例3:处理重定向页面

curl –L http://192.168.1.100/301.<a href="http://www.ttlsa.com/php/" title="php"target="_blank">php</a> #默认curl是不处理重定向

例4:模拟用户登陆,保存cookie信息到cookies.txt文件,再使用cookie登陆

curl -c ./cookies.txt -F NAME=user -F PWD=***URL #NAME和PWD是表单属性不同,每个网站基本都不同
curl -b ./cookies.txt –o URL

例5:获取HTTP响应头headers

curl -I http://www.baidu.com
curl -D ./header.txt http://www.baidu.com #将headers保存到文件中

例6:访问HTTP认证页面

curl –u user:pass URL

例7:通过ftp上传和下载文件

curl -T filename ftp://user:pass@ip/docs #上传
curl -O ftp://user:pass@ip/filename #下载

wget(文件下载工具)

常用参数如下:

2.1 启动参数

-V,–version:显示版本号
-h,–help:查看帮助
-b,–background:启动后转入后台执行
2.2 日志记录和输入文件参数
-o,–output-file=file:把记录写到file文件中
-a,–append-output=file:把记录追加到file文件中
-i,–input-file=file:从file读取url来下载
2.3 下载参数

-bind-address=address:指定本地使用地址
-t,-tries=number:设置最大尝试连接次数
-c,-continue:接着下载没有下载完的文件
-O,-output-document=file:将下载内容写入到file文件中
-spider:不下载文件
-T,-timeout=sec:设置响应超时时间
-w,-wait=sec:两次尝试之间间隔时间
–limit-rate=rate:限制下载速率
-progress=type:设置进度条
2.4 目录参数

-P,-directory-prefix=prefix:将文件保存到指定目录
2.5 HTTP参数
-http-user=user:设置http用户名
-http-passwd=pass:设置http密码
-U,–user-agent=agent:伪装代理
-no-http-keep-alive:关闭http活动链接,变成永久链接
-cookies=off:不使用cookies
-load-cookies=file:在开始会话前从file文件加载cookies
-save-cookies=file:在会话结束将cookies保存到file文件
2.6 FTP参数

-passive-ftp:默认值,使用被动模式
-active-ftp:使用主动模式
2.7 递归下载排除参数

-A,–accept=list:分号分割被下载扩展名的列表
-R,–reject=list:分号分割不被下载扩展名的列表
-D,–domains=list:分号分割被下载域的列表
–exclude-domains=list:分号分割不被下载域的列表

使用示例:

例1:下载单个文件到当前目录下,也可以-P指定下载目录

 wget http://nginx.org/download/nginx-1.8.0.tar.gz

例2:对于网络不稳定的用户可以使用-c和–tries参数,保证下载完成

wget –tries=20 -c http://nginx.org/download/nginx-1.8.0.tar.gz

例3:下载大的文件时,我们可以放到后台去下载,这时会生成wget-log文件来保存下载进度

wget -b http://nginx.org/download/nginx-1.8.0.tar.gz

例4:可以利用—spider参数判断网址是否有效

wget –spider http://nginx.org/download/nginx-1.8.0.tar.gz

例5:自动从多个链接下载文件

cat url_list.txt #先创建一个URL文件
http://nginx.org/download/nginx-1.8.0.tar.gz
http://nginx.org/download/nginx-1.6.3.tar.gz
wget -i url_list.txt

例6:限制下载速度

wget –limit-rate=1m http://nginx.org/download/nginx-1.8.0.tar.gz

例7:登陆ftp下载文件

wget –ftp-user=user –ftp-password=pass ftp://ip/filenam
1 2 3 4