作者: 耗子007
最近被python的条件坑了一波,在此小计一下。
python的IF的条件判断和C是一致的,0表示False,非0表示True。这本没什么问题,坑爹的是,很多函数的成功返回0,而失败返回-1,这就很容易被坑了。
先看看0和-1的情况:
1 |
|
字符串的find函数,在查找失败的时候返回-1,成功时返回匹配的起始下标。当匹配的起始下标是0和查找失败的时候,在if判断时候需要注意了。
1 |
|
作者: 耗子007
最近被python的条件坑了一波,在此小计一下。
python的IF的条件判断和C是一致的,0表示False,非0表示True。这本没什么问题,坑爹的是,很多函数的成功返回0,而失败返回-1,这就很容易被坑了。
先看看0和-1的情况:
1 |
|
字符串的find函数,在查找失败的时候返回-1,成功时返回匹配的起始下标。当匹配的起始下标是0和查找失败的时候,在if判断时候需要注意了。
1 |
|
作者: 耗子007
Docker官方hub上面已提供容器化的Registry,可以通过docker run直接启动一个本地的Registry的服务。
1 | docker run -d -p 5000:5000 \ |
上传镜像的方法:
1 | docker pull ubuntu |
可以通过数据卷的方式,把上传的docker镜像保存到指定的host目录:
1 | docker run -d -p 5000:5000 --restart=always --name registry \ |
跨机器访问非安全的Registry,需要对机器的Docker daemon的启动参数进行设置,设置方法取决于docker daemon的启动方式。
以Ubuntu为例:
首先,需要对openssl的配置做一些修改:
注:在上面的配置文件的[ v3_ca ]标签下面加上subjectAltName=IP:192.168.1.181 <192.168.1.181为当期机器的IP>
参考文章:http://dockone.io/article/684
可以通过openssl生成自己的证书和密钥,用来验证。生成证书的方法:
1 | mkdir -p /certs && openssl req \ |
关于openssl生成密钥的办法还有下面的:
1 | $ echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 > extfile.cnf |
参考文档:https://docs.docker.com/engine/security/https/
生成账号密码:
1 | mkdir auth |
用生成的证书和密钥启动Registry的服务:
1 | docker run -d -p 5000:5000 --restart=always --name registry \ |
把Registry机器上生成的证书文件domain.crt拷贝到指定目录(取决于系统类型):
然后重新启动Docker daemon的服务。
最后,可以push镜像了。
1 | docker pull ubuntu |
作者: 耗子007
Driver | Description |
---|---|
none | Disables any logging for the container. docker logs won’t be available with this driver. |
json-file | Default logging driver for Docker. Writes JSON messages to file. |
syslog | Syslog logging driver for Docker. Writes log messages to syslog. |
journald | Journald logging driver for Docker. Writes log messages to journald. |
gelf | Graylog Extended Log Format logging driver for Docker. Writes log messages to a GELF endpoint like Graylog or Logstash. |
fluentd | Fluentd logging driver for Docker. Writes log messages to fluentd (forward input). |
awslogs | Amazon CloudWatch Logs logging driver for Docker. Writes log messages to Amazon CloudWatch Logs. |
splunk | Splunk logging driver for Docker. Writes log messages to splunk using HTTP Event Collector. |
etwlogs | ETW logging driver for Docker on Windows. Writes log messages as ETW events. |
gcplogs | Google Cloud Logging driver for Docker. Writes log messages to Google Cloud Logging. |
在daemon启动的时候可以配置日志驱动,命令如下:
1 | docker daemon --log-driver=json-file --log-opt=map[] |
默认的驱动是json-file,可配置选项通过log-opt设置。
log-opt可选项如下:
1 | --log-opt max-size=[0-9+][k|m|g] |
例如:
–log-opt max-size=2m限定日志文件的大小为2MB
–log-opt max-file=7限定日志文件最多7个
当日志文件超过2MB是,会写到第二个日志文件,如果日志文件超过7个时,会覆盖之前的日志文件。
容器日志是容器在运行过程中产生的日志,默认会保存到/var/lib/docker/containers/CID/CID-json.log文件中。
可以用下面命令读取易读的日志:
1 | $ docker logs CID |
日志处理流程图如下:
syslog驱动时,默认容器的日志都是输出到/var/log/messages文件中的,当需要把容器日志单独保存时,可以通过一些小办法实现。
步骤如下:
1 | local5.* /var/log/mydocker.log |
当daemon挂掉时,容器的日志会缓存到上图的fifo中,fifo的默认大小是1M,可以通过如下命令获取:
1 | $ cat /proc/sys/fs/pipe-max-size |
作者: 耗子007
1 | $ git clone https://github.com/visualfc/liteide.git |
1 | wget https://storage.googleapis.com/golang/go1.7.4.linux-amd64.tar.gz |
作者: 耗子007
kiwi用Perl编写的,用于制作linux镜像的命令行工具。支持制作多种格式的镜像:
kiwi的工作流分为两个流程:
准备流程:kiwi –prepare
制作流程:kiwi –create
kiwi制作镜像的流程是自动的,制作需要的必要信息主要来自config.xml的配置文件。此外,kiwi可以通过config.sh和images.sh实现可选的自定义功能。
kiwi制作镜像分为两步。第一步,prepare操作,使用config.xml配置文件生成“unpacked image tree”。第二步,create操作,基于第一步生成的
“unpacked image”和config.xml配置文件提供的信息创建一个“packed image”(就是镜像)。
注:
(1) Unpacked Image
Encapsulated system reachable via chroot
(2) Packed Image
Encapsulated system reachable via kernel file system/extension drivers such as loopback mounts, etc.
只有prepare操作成功,才能进行下一步的create操作。
prepare操作,kiwi会创建一个unpacked image(也就是root tree)。这个root tree是通过–root参数或者config.xml的defaultroot元素指定的。
该目录会在create操作中用于安装软件。软件管理工具是通过config.xml的packagemanager元素指定的,
kiwi目前支持的软件管理工具有:smart、zypper(默认选项)、yum和apt。
Prepare操作主要包括以下步骤:
Prepare操作的成功时Create操作的前提。保证unpacked root tree是完整的和一致的。create操作会创建一个packed image。利用unpacked root tree能够
创建多种类型image,例如,OEM image或者虚拟机的images。
Create操作主要执行以下步骤:
作者: 耗子007
通过把hexo安装到docker容器中,然后在容器中启动hexo的服务。
基于node的docker镜像制作我们的hexo镜像,主要做了如下几件事:
Dockerfile如下所示:
FROM node
MAINTAINER Haozi007
ENV http_proxy http://name:password@proxy:8080
ENV https_proxy http://name:password@proxy:8080
# Create hexo work dir
WORKDIR /blog
RUN npm install -g hexo-cli
RUN hexo init /blog
EXPOSE 4000
CMD hexo generate && hexo server
制作docker镜像
docker build -t haozi/hexo .
可以通过docker的-v方法,把我们的markdown文档指定到容器中hexo的工作目录的source/_posts目录中,
这样当容器启动时,会自动生成对应的静态页面。
启动容器的命令如下:
docker run --name hexo -itd -p 8088:4000 \
-v /home/rtos/learning/workNotes/blogs:/blog/source/_posts \
haozi/hexo
注:
可以把我们的所有markdown文档传到github或者其它内源保存。
每次更新文档的时候,有两种方法可以更新我们的hexo静态网站。
前者需要重启容器,导致网站服务中断,后者比较麻烦,但是网站服务不好中断。