mysql 是 Docker 和 MySQL 官方提供的一个镜像。
拉取镜像
docker pull mysql
启动镜像
docker run --name first-mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
这样就创建了一个名为 first-mysql
的 mysql 5.7 实例。
docker exec -it first-mysql bash
日志
docker logs first-mysql
当启动 mysql 容器时,可以传入环境变量来改变容器的配置:
MYSQL_ROOT_PASSWORD
:必须。用于设置MySQLroot用户的密码MYSQL_DATABASE
:可选。用于指定镜像启动容器时要创建的数据库。如果提供了用户/密码,则会将该用户做为此数据库的超级用户。MYSQL_USER
,MYSQL_PASSWORD
:可选。用于创建一个新用户并设置密码。MYSQL_ALLOW_EMPTY_PASSWORD
:可选。设置为yes时,则可以使用空密码登录MYSQL_RANDOM_ROOT_PASSWORD
:可选。设置为yes时会为root用户设置一个随机密码(使用pwgen),所生成的随机密码会被输出到stdoutMYSQL_ONETIME_PASSWORD
:可选。为root用户指定一个一次性密码,该密码会在用户首次登录时强制修改mysql 镜像创建容器时,数据库存储会以下面两种方式存储:
使用外部数据卷时,假设宿主机有 /my/data/ 目录,可以使用 -v
选项来讲宿主机挂载到容器:
docker run --name mysql -v /my/data/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password -d mysql:5.7
数据备份
docker exec first-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql
官方的镜像中导出的是默认 3306 端口,其他容器可以使用 --link
参数来连接mysql容器
docker run --name other-app --link first-mysql:mysql -d other-application-use-mysql
任何服务器监控是一项很重要的事情,以前一直使用 nodequery ,虽然设置方便简洁,但是数据不够详细也是他很大问题,所以经过一番寻找又发现了这个 netdata。下面是 netdata 一系列的特性
官方提供了一些列的 demo : https://my-netdata.io/
按照下面的教程安装:
https://github.com/firehol/netdata/wiki/Installation
现在官方也提供了 Docker 的方式安装,更加方便。
upstream backend {
server 127.0.0.1:19999;
keepalive 64;
}
server {
listen 80;
listen [::]:80;
index index.html index.htm index.nginx-debian.html;
server_name status.einverne.info;
auth_basic "Protected";
auth_basic_user_file passwords;
location / {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://backend;
proxy_http_version 1.1;
proxy_pass_request_headers on;
proxy_set_header Connection "keep-alive";
proxy_store off;
}
}
主要配置如上,可以加上一个密码保护,具体 Nginx 的配置 可以参考链接。
htpasswd -c -d /etc/nginx/passwords yourusername
这行命令中的 passwords
就是之前 Nginx 配置中的 auth_basic_user_file
后的参数,通过该选项设置用户名密码。
netdata 是不提供卸载脚本的,如果要在系统中删除,可以使用如下
killall netdata
apt-get remove zlib1g-dev gcc make git autoconf autogen automake pkg-config
rm -Rf /usr/sbin/netdata
rm -Rf /etc/netdata
rm -Rf /usr/share/netdata
rm -Rf /usr/libexec/netdata
rm -Rf /var/cache/netdata
rm -Rf /var/log/netdata
rm -Rf /opt/netdata
userdel netdata
Docker Compose 是一个定义和启动多容器的工具,可以使用 Compose 来管理多个 Docker 容器。Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Docker Compose 使用 YAML 文件定义应用,之后可以使用一行简单的命令来创建或者启动所有的服务。
Dockerfile 模板文件,可以让用户很方便的定义一个单独的应用容器,但往往实际应用可能包含不止一个容器,常见的 Web 容器通常还包括一个数据库容器。Compose 允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
Compose 中有两个重要的概念:
docker-compose.yml
文件中定义使用 Compose 可以简单的归纳为三步
docker-compose up
来启动整个服务常见的 docker-compose.yml
文件如下:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/code
- logvolume01:/var/log
links:
- redis
redis:
image: redis
volumes:
logvolume01: {}
Compose 依赖于 Docker Engine,所以确保安装 Compose 之前 Docker 已经在本地安装成功。安装 Compose 非常简单,将编译好的二进制文件下载到本地即可,查看compose 的github release 页面 获取最新版本:
sudo curl -L https://github.com/docker/compose/releases/download/1.19.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
具体例子可参考官网或者 https://github.com/einverne/dockerfile/ 项目下有 compose-start
文件夹,其中包含示例代码:
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
在该文件夹下使用 docker-compose up
启动服务。使用 docker-compose down
关闭。如果想要在后台执行添加 -d
选项 docker-compose up -d
。
Compose 命令的对象是项目本身,也可以为项目中的服务或者容器,默认为项目。 服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。
命令选项:
-f, --file FILE 指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。
-p, --project-name NAME 指定项目名称,默认将使用所在目录名称作为项目名。
docker-compose up # 自动完成构建镜像,创建服务,启动服务,并关联服务等操作
docker-compose down
docker-compose start # 启动存在的服务
docker-compose stop # 停止
docker-compose restart # 重启项目中服务
docker-compose exec # 进入指定容器
docker-compose help
docker-compose image # 列出 Compose 文件中包含的镜像
docker-compose kill [SERVICE...]
docker-compose pause [SERVICE...]
docker-compose unpause [SERVICE...]
docker-compose ps # 列出项目中所有容器
大部分时候都可以直接通过该命令来启动一个项目,默认情况,docker-compose up
启动的容器都在前台,控制台将会同时打印所有容器的输出信息。
当通过 Ctrl-C 停止命令时,所有容器将会停止。如果使用 docker-compose up -d
,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
docker-compose up -d # 后台执行
此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose # 移除停止的容器
docker-compose -v # 此选项会移除 volumns 中定义的卷,千万小心
举例
> docker-compose down -v
Removing wordpress ... done
Removing wordpress_db ... done
Removing network wordpress_wordpress-network
Removing volume wordpress_db_data
重构项目中容器
docker-compose build [options] [SERVICE...]
删除所有停止状态的服务容器。
docker-compose rm [options] [SERVICES ..]
验证 Compose 文件格式是否正确
docker-compose config
默认的模板文件名称为 docker-compose.yml,格式为 YAML 格式。大部分的指令和 docker run
的含义是一样的。
指定镜像名或者镜像ID,如果本地不存在,Compose 会拉取该镜像
image: ubuntu
数据卷挂载设置,可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)
volumes:
- /var/lib/mysql
暴露端口信息,使用宿主端口:容器端口 (HOST:CONTAINER) 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)
更多详细可参考: https://yeasy.gitbooks.io/docker_practice/content/compose/compose_file.html
很早以前写过一篇文章,为了寻找Evernote 的代替品,两年过去了,我也认认真真地用了两年的的为知笔记。说实话现在再来说为知笔记确实有些晚,很早很早以前就有很多人推荐为知笔记。
但是经过两年使用,加上最新 2.5.8 的版本更新,让我不得不出来说一说 WizNote,早在之前的文章中提到过,因为 WizNote 提供 Linux 版本的客户端,所以让我一直能够用下去。我一直坚信的一点就是做产品,一定是做到一个服务,让用户选择一个服务,能够不考虑其使用成本,也就是不管我是在 Windows ,Mac 还是 Linux,或者是 Android 或者 iOS 我都能够快速获取服务提供的内容,这才是一个真正好的产品。当然所有的笔记类产品中只有 WizNote 做到了。当然这里其实还要提一嘴网易云音乐,太良心了这两家公司。WizNote 不说其他的功能在一定程度上超越 Evernote,但就跨平台,多设备同步这一点就比 Evernote 好过不止一点。更不用说支持markdown,支持语法高亮,支持pdf,html导出等等非常良心的功能。
最新 WinNote 更新一个 Linux 的 AppImage 版本,虽然这个版本绿色,下载直接可以使用,但是带来一个问题就是,无法建立快捷方式,我的快速启动突然失效,让我有些失望。AppImage 格式是一种新的Linux程序封装方法。AppImages 是便携的——它们无需安装即可运行在大多数Linux发行版上。所有的依赖包均包含于一个AppImage文件。但是这个 AppImage 文件必须每一次都让我去目录下手动执行,这个让我非常不爽,于是找到了下面的解决方法,手动创建一个快捷方式,使用该快捷方式启动 WizNote。
如果使用 GNOME,可以安装包 sudo apt-get install --no-install-recommends gnome-panel
,然后使用如下命令:
gnome-desktop-item-edit ~/.local/share/applications --create-new
该命令会弹出一个对话框,输入一些必要的参数,保存即可,该命令会在 ./local/share/application/
目录下新建一个 WizNote.desktop
的文件
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application # type
Icon=wiznote # location of icon file
Terminal=false # whether this app requires to be run in a terminal.
Name[en_US]=WizNote
GenericName=WizNote # longer name of the app
Exec=/home/einverne/app/WizNote-2.5.8-x86_64.AppImage # command used to launch an app
Name=WizNote
Categories=WizNote; # categories in which this app should be listed.
GenericName[en_US.UTF-8]=WizNote
另外一个令我不爽的就是,在这个版本发布之后一段时间后我在 Linux 上的 PPA 安装的版本突然之间无法登录并无论多少次重新登录都说我密码错误,无法登录。即使说因为新版本,或者是因为同步机制升级,导致老版本的同步失效,也应该给予一个正确的提示,而不是说密码错误,我的密码并没有输入错误或者记错,因为网页版,Android/iOS 端都是正常登录的,而仅仅给个密码错误的提示会误导用户。虽然安装了新版本的 WizNote 这依然浪费了很多的时间,还有让我吐槽浪费更多的时间。
这有回到了文章开头我的观点,作为一个服务(产品),应该提供的是用户随时随地可获取的服务,所有的更新升级对用户应该都是透明的,用户不应该关心版本升级可能带来的任何问题,有很多时候我非常反感一个产品突然拿掉一些功能,虽然可能在一定程度上可能已经脱离公司发展轨迹,但其实对一些用户还是有着深刻的影响的。所以很多时候在考虑深度使用一个产品(服务)的时候,我一般都会考虑在这个产品的数据有没有备份或者导出的途径,如果没有任何可以导出或者备份的功能,一般情况下也就淘汰了这个服务。
说了这么多,其实 WizNote 还是目前我深度使用的一个服务,我真心的希望他会越来越好,也能够继续维护这么多版本的开发。最后真心地祝愿。
一年前使用 kindle 的时候有 kindle10000 ,还有无数的 kindle push 网站,去年突然全部一下子都关闭了,这一年多来,陆陆续续又发现了一些很不错的站点。现在整理整理分享一下。我电脑中还有大概五六十 G 的当年 kindle 人倒闭时全站资源的打包只是一直都还么有时间建立索引,整理出来,有时间还是要整理一下的。
https://manybooks.net/
一个电子书搜索引擎,聚合了一些常见的网站。
https://worldmiao.com/
http://mebook.cc/
以网盘下载为主
可以用来推送电子书到 Kindle 邮箱
2019 年 11 月更新,小书屋也不在了。愿站长一切安好!
强烈推荐的站点,几乎 kindle10000 之后就是他了。
http://www.kindlepush.com
书籍比较全,每天可推送两本,下载一本
2018-08-01 更新 kindlepush 网站也关站了,基本上也应该是盗版的原因吧,现在的资源站基本上只要做大了也就面临着闭站的风险了。
基于 IPFS 的电子书索引
https://book.tstrs.me/
很早之前因为一些 Kindle 相关的文章而关注了,后来也陆陆续续的有一些好书分享。
https://bookfere.com/
http://vol.moe/
http://www.kindlecomic.net/
记得以前不叫这个名字的,可推送漫画,漫画比较全,有连载。
看站点应该只是个人在维护的。
https://bookset.me/
2019 年 9 月 1 日更新,看来是也不存在了。
有品格的数字古籍图书馆
https://new.shuge.org/
寻找古籍的最佳选择。
一个电子书在线转换工具,也提供热门书的下载和推送。
http://cn.epubee.com/
一个类似论坛的分享网站
https://www.cnepub.com/
https://www.soepub.com/
这也是个人站长维护的电子书分享站点
http://51kindle.me/
www.kindle178.com
这是一个杂志的合集,需要付费
http://www.gqzzw.com/
http://readfree.me/
书籍比较全,相同书籍有不同版本,可推送到 kindle,可下载,可共享图书
2019 年 7 月更新
终于 readfree 也挺不住了,也不知道是抓版权呢,还是在禁止出版物。
非常像 readfree
http://www.iread.cf/
http://book.zi5.me/
可推送,可下载,注册用户可以共享电子书,网站由 WordPress 所写。
https://www.jiumodiary.com/
主要是微博网盘和百度网盘共享书籍,质量层次不齐
少量的电子书,基本都在百度网盘
http://www.olecn.com/category/book/
mLook 精校电子书,注册需要邀请码
http://plugin.mlook.mobi/
周读,资源都是放在百度盘上的
http://ireadweek.com/
这是一个面向英文阅读者的 PDF 分享网站,托管了很多高清的 PDF 资源。
https://www.pdfdrive.com/
Library Genesis 是科学论文和书籍搜索引擎,是一款非常好用的学术(盗版)书网站,以英文语言作品为主,辅以法、德、日、西、葡、意、俄、阿、土等语言作品。1
英语电子书及有声书
个人维护的,基本和计算机相关,大部分都是英文图书
https://salttiger.com/
以区块链为依托,每天 10 本免费下载,目前藏书量已经十几万。
https://ebook.lorefree.com/
也是一个个人维护的站点
http://www.booklist.mobi/
英文 PDF
https://epdf.tips/
https://manybooks.net/
http://www.haodoo.net/
http://www.iamtxt.com
www.wode5.com
https://skebooks.com
http://kgbook.com/
英文书为主,非常大的库
https://b-ok.cc/s/
全站免费,全站度盘。书籍质量较高,有封面,目录,不过令人担忧的是度盘,随时可能失效
https://epubw.com/
https://enjing.com
全国图书馆参考咨询联盟
http://www.ucdrs.superlib.net/
读秀
http://www.duxiu.com
需邀请码
http://www.woyushu.com
这是我自己建的站,我一直有在整理我硬盘上的电子书,但是无奈并没有那么多的 VPS 来存放这些书,抓了十几万条豆瓣的条目,有些已经从豆瓣完全消失了,希望这里有个地方存留一些记忆。
https://book.einverne.info
最后,在能力范围内请支持正版。个人已买 Kindle Unlimited,部分书籍能够买到也尽量会购买。部分不会发行的电子书用来在 Kindle 上读。
https://www.douban.com/note/651658406/
http://gen.lib.rus.ec http://libgen.io http://libgen.pw ↩
Linux 下有一个非常危险的命令—-rm,虽然本意上rm命令是用来删除文件或者文件夹的,但是这个命令删除的文件很难找回来,一旦不小心手贱敲快了,就有可能导致不可挽回的结果。所以我搜了一圈,发现其实 Ubuntu 下有一个包 trash-cli
。给Linux加了一层垃圾箱。
sudo apt install trash-cli
这个命令包,包括 trash
, trash-list
, trash-restor
, trash-empty
等等几个命令,具体可以参看 man。
在 ~/.zshrc
中添加 alias
alias rm=trash
这样,以后使用 rm 时,默认将文件移动到垃圾箱中,再不会发生不小心删除文件之后无法找回的问题。
认识我的人都是知道我一直使用 RSS 订阅信息,但是互联网越来越闭塞的现在,每一家公司都在自建后花园,把所有的信息封闭在内部,几乎现在没有任何内容型平台提供 RSS 输出了,所以也才有了这篇文章。以前我使用的微博转 RSS 的服务大都已经挂掉,唯一一家微博档案最近也似乎有些危险。不过幸好查到下面两个项目,让微博定义 RSS 不在困难。
我使用了第二个项目,安装过程可以参考下文,都是使用 nodejs 实现,如果手动安装需要手动配置一下环境。
安装 Docker 的文章可以查看之前的文章
git clone https://github.com/zgq354/weibo-rss.git
cd weibo-rss
docker build -t <tag> .
docker run -p 3000:3000 -d --name weibo-rss --restart=always <tag>
默认程序会监听服务器的 3000 端口,可以通过 Nginx 的 proxy_pass 指令配置请求转发。
查找的动作在平时使用的频率也还是很高的,所以知道并用好 find
这个命令也很重要。find
命令顾名思义,就是搜索特定文件夹内的文件。当然后来用了 fzf 日常使用比 find 要高很多,不过如果要写脚本 find 命令的使用也是不得不了解的。
find 命令提供了非常多的选项,功能很强大。
最基本的使用
find [path] [expression]
在 path 目录下查找 expression 的文件。
find -name "query" # 搜索文件名,大小写敏感
find -iname "query" # 大小写不敏感
find -not -name "query" # 查找不包含关键字的文件
find \! -name "query" # 不包含
find -type [fdlcb] "query"
type
后能够使用的类型有
f
常规文件d
目录l
连接c
字符设备文件 character devicesb
块设备文件 block devices比如要查找系统中所有以 .conf
结尾的文件
find / -type f -name "*.conf"
find /path/to/folder -size 50M
查找 50M 的文件,size
后能够使用的单位有:
b
512byte blocksc
byte 字节w
two bytek
kB 千字节M
MBG
GBsize
后面的参数可以使用 +
或者 -
或者不加来标识,超过,少于,或者正好。
find / -size +700M # 表示查找大于 700M 的文件
find / -size -50c # 表示查找小于 50 byte 的文件
find . -size 50M # 表示在当前目录查找正好 50M 的文件
Linux 会存储下面的时间:
在按照时间查找时,可以使用 -atime
, -mtime
或者 -ctime
,和之前 size
参数一样可以使用 +
或者 -
来标识超多多长时间或者少于多长时间。
find / -mtime 1 # 寻找修改时间超过一天的文件
find / -atime -1 # 寻找在一天时间内被访问的文件
find / -ctime +3 # 寻找 meta 信息被修改的时间超过 3 天的文件
寻找修改时间超过 1 小时的 mp3 文件
find /path/to/folder -maxdepath 1 -mmin +60 -type f -name "*.mp3"
其中的-mmin n
参数表示的就是文件内容在前 n 分钟没有修改。
find /path/to/folder -maxdepath 1 -mmin +60 -type f -name "*.mp3" -exec rm -f {} \;
通过上面的语句就能够一次性删除超过 60 分钟未修改的 mp3 了。
使用 -user
和 -group
参数来通过拥有者搜寻
find / -user einverne
find / -group shadow
同样按着权限查找文件
find / -perm 644
find / -perm -644 # 查找权限至少是 644 的文件
使用 -maxdepth
来限制查找的深度,默认情况下 find 会一层层搜索,如果只想让 find 命令查找当前目录或者子目录,可以使用
find -maxdepth 2 -name "query"
同理 还有一个选项 -mindepth
find -mindepth 2 -maxdepth 3 -name "query"
在搜索出结果之后,可以使用如下的方式对搜索的结果执行一个命令
find [param] -exec command {} \;
比如批量修改权限
find . -type f -perm 644 -exec chmod 664 {} \;
find . -type d -perm 755 -exec chmod 700 {} \; # 批量修改文件夹权限
综合上面按时间查找文件和对搜索结果批处理,可以获知
find /path/to/folder/* -mtime +1 -exec rm {} \;
-mtime +1
表示的查找时间超过 1 天的内容-exec
后面表示对搜索的结果进行处理find path/to/folder -type d -empty -print
find path/to/folder -type d -empty -delete
locate
命令需要额外安装
sudo apt install mlocate
locate
命令维护了一份文件和目录的数据库,所以检索速度会快一些,数据库通常一天更新一次,可以手动更新数据库
sudo updatedb
locate -S # 查看当前数据库数据
locate
使用的方式和 find
大致差不多。
之前因为学习 Docker 也总结了一批经常使用的 Docker 命令 然后回头过来看唯独漏掉了 Docker 监控的一块,一方面也是当时看的文档并没有覆盖到这个领域,另一方面也是最近看到 Google cAdvisor 才开始注意到 Docker 监控的命令。
直接运行,查看所有当前运行的 Docker 状态及资源消耗
docker stats
该命令执行后会返回下列数据
查看容器中启动的进程
docker top [CONTAINER] [ps options]
使用如下命令查看容器日志
docker logs [OPTIONS] CONTAINER
使用参数 -f
来追踪打印未来的日志
docker logs -f CONTAINER
Linux 下查看网络流量的命令有很多,之前 也介绍过使用 nethogs
来按照进程查看网络流量。但其实 Linux 下有很多命令同样可以达到效果。
使用 apt install bmon
安装,使用非常简单直接运行即可。
bmon
的介绍说是一个网络监控和调试工具,能够提供一个可视化的界面。
其他还有 nload, slrum, speedometer, netload
常用的有 iftop,iptraf
iftop 使用 pcap 库来捕获进出网络适配器的数据包,然后汇报总数据包大小和数量。iftop 报告每一个连接所使用的带宽,但是没有办法报告进程名和编号。使用 iftop
时如果系统包含多个网络接口可能需要指定监控的接口 sudo iftop -i eth0
,类似 top 命令,iftop
可以在运行时改变显示:
h
帮助n
是否解析域名s
是否显示源地址d
是否显示目标地址S
是否显示端口号iptraf 是一款交互式的网络监控工具,它可以显示每个连接和主机之间的传输数据。按连接/端口查看流量。
ifstat: 按设备查看流量
ethtool: 诊断工具
ss: 连接查看工具