
1. 安装
# yum install docker -y
# service start docker
# chkconf on docker

centos7 启动出错
# yum install device-mapper-event-libs -y

2. 创建镜像
# docker build -t="alphabets/zabbix:v0.0.1" zabbix
# docker build -t="alphabets/nginx:v0.0.1" nginx
# docker build -t="alphabets/fluentd:v0.0.1" fluentd
# docker build -t="alphabets/node:v0.0.1" node
# docker build -t="alphabets/light:v0.0.1" light
# docker build -t="alphabets/fastfix:v0.0.1" fastfix

3. 常用命令
#### 查看本地的镜像
# docker images

#### 启动镜像
# docker run -p 80:80 -d --name zabbix 26f8955245bb
# docker run --rm=true -p 8080:8080 -p 8889:22 --hostname=gitlab --name gitlab alphabets/gitlab:v0.0.1
# docker run -d --rm=true -p 8080:8080 -p 29418:29418 --hostname=gitbucket --name gitbucket alphabets/gitbucket:v0.0.1

# docker run -d --restart=always --add-host=db:10.165.46.250 --publish=5003:5003 --hostname=fastfix --name=fastfix alphabets/fastfix:v0.0.1
# docker run -d --restart=always --add-host=db:10.165.46.250 --publish=7000:7000 --hostname=admin --name=admin alphabets/lightadmin:v0.1.0
# docker run -d --restart=always --publish=4506:4506 --publish=4505:4505 --name=salt alphabets/salt:v0.0.1

#### 查看容器列表
# docker ps -a

#### SSH接入容器
# docker exec -t -i 057df86d3418 /bin/bash
# docker run --name zabbix -t -i 8768c02052ae /bin/bash

4.


------------------------------------------------------------------------------------------------------------------------
zabbix-agent

1. CentOS7
# iptables -A INPUT -m state --state NEW -p tcp --dport 10050 -j ACCEPT
# iptables -A INPUT -m state --state NEW -p tcp --dport 10051 -j ACCEPT


------------------------------------------------------------------------------------------------------------------------
docker run
docker info
docker images
docker logs
docker top 查看容器内的进程
docker exec
docker stop
docker rm 删除容器
docker ps -a 查看容器列表
docker rmi 删除镜像
docker cp 拷贝容器内文件

# run
-i STDIN开启
-t 为容器分配tty终端
-d daemon模式启动
--name 设定容器名称
--restart 自动重启
--rm 自动删除

--privileged 允许操作iptables？

# logs
-f 日志跟踪
-t 加时间戳


# 常用命令
-------------------
# 命令行模式进入容器
docker exec -t -i 9b30e9a6c9a3 /bin/bash

# 删除所有容器
docker rm `docker ps -a -q`

# 备份volumn内的数据
docker cp $ID:/var/jenkins_home

#
docker build -t="alphabets/nginx:v0.0.1" nginx

# 查看绑定的VOLUMN
docker inspect -f '{{ .Volumes }}' source

# 疑问
-------------------

- jenkins的数据 怎么办？通过画面设定的内容，是否可以共享

- nginx的log怎么办
  使用通用的log容器？



# tag做成
docker tag 24dd746e9b9f docker.light.cn/registry:latest


# command
-------------------
# 启动jenkins
docker run -p 8080:8080 -v /var/jenkins_home -d --name jenkins 4e288907973a

# 启动nginx 连接jenkins
docker run -p 80:80 --link jenkins:jenkins -d --name nginx 23a528ae15fc

# 启动数据容器
docker run --name data e42b62c80cb6 true



How to start pm2 server in a docker container
----
http://zgu.me/blog/2014/08/25/how-to-start-pm2-server-in-a-docker-container/



# docker 服务无法启动
- yum update device-mapper 来升级device-mapper

# 依赖的官方镜像
centos 7.1.1503
busybox latest
registry 2.0.0


#### docker 内启动服务的方法
http://www.hilotech.jp/blog/it/290
http://thinkit.co.jp/story/2015/01/29/5501

####
 1. 切换centos版本 为最新，使用yum的时候有包冲突的问题
 2. 切换fakesystemd 到 systemd，为了使用服务启动多个进程
 3. 启动时，使用--privileged， 启动脚本指定为/sbin/init
    # docker run -p 4505:4505 -p 4506:4506 --rm=true --privileged docker.alphabets.cn/salt /sbin/init



# docker build -t="docker.alphabets.cn/registry" registry
# docker build -t="docker.alphabets.cn/bind" bind


port
 docker registry - 5000
 bind - 53
 squid - 3128


#### 删除所有容器
# docker rm `docker ps --no-trunc -aq`
# docker rmi $(docker images -q)


#### 查询所有的 registry 的images
# curl -X GET http://docker.light.cn:5000/v1/search


#
curl -O http://www.alphabets.cn/lib/ca-certificates.crt


# container 导入
cat fastfix_data.tar | docker import - docker.light.cn/fastfix_data:0.0.1



#### 备份容器数据
# docker run --volumes-from fastfix_data --rm -v $(pwd):/backup docker.light.cn/busybox tar cvf /backup/data.tar /data
# docker run --volumes-from fastfix_data --rm -v $(pwd):/backup docker.light.cn/busybox tar xvf /backup/data.tar
# docker run --volumes-from fastfix_data --rm docker.light.cn/busybox ls -lh /data

#### 拷贝文件
# docker run -it --volumes-from site_data --rm -v $(pwd):/backup docker.alphabets.cn/data:0.0.1 sh

http://alvinhenrick.com/2015/01/26/docker-backup-and-restore-volume-container/


#### 查看物理文件位置
$ docker inspect -f "{{.Volumes}}" test

删除一行
sh -c "sed -i '/^b.*/d' /data/test"


#### bind的设定
http://www.mk-mode.com/octopress/2014/08/13/centos-7-0-installation-of-bind/
http://centossrv.com/bind.shtml
http://kajuhome.com/bind.shtml

####
squid代理
# yum -y install squid
# systemctl start squid

# export http_proxy=10.10.106.231:3128
# export https_proxy=10.144.161.119:3128
# export SOCKS_SERVER=1.2.3.4:8000

# docker build里使用代理
env http_proxy 10.251.137.130:3128

####
copy ca.crt to /etc/ssl/certs/ca-certificates.crt
restart docker


# export ALL_PROXY=socks5h://localhost:1080


###################
生成Self Signed证书
＃ 生成一个key，你的私钥,openssl会提示你输入一个密码，可以输入，也可以不输，
＃ 输入的话，以后每次使用这个key的时候都要输入密码，安全起见，还是应该有一个密码保护
> openssl genrsa -des3 -out selfsign.key 4096

# 使用上面生成的key，生成一个certificate signing request (CSR)
# 如果你的key有密码保护，openssl首先会询问你的密码，然后询问你一系列问题，
# 其中Common Name(CN)是最重要的，它代表你的证书要代表的目标，如果你为网站申请的证书，就要添你的域名。
> openssl req -new -key selfsign.key -out selfsign.csr

# 生成Self Signed证书 selfsign.crt就是我们生成的证书了
> openssl x509 -req -days 365 -in selfsign.csr -signkey selfsign.key -out selfsign.crt

＃ 另外一个比较简单的方法就是用下面的命令，一次生成key和证书
> openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout privateKey.key -out certificate.crt

####
生成自己的CA (Certificate Authority)
＃ 生成CA的key
> openssl genrsa -des3 -out ca.key 4096

# 生成CA的证书
> openssl req -new -x509 -days 365 -key ca.key -out ca.crt

# 生成我们的key和CSR这两步与上面Self Signed中是一样的
> openssl genrsa -des3 -out light.key 4096
> openssl req -new -key light.key -out light.csr

# 使用ca的证书和key，生成我们的证书
# 这里的set_serial指明了证书的序号，如果证书过期了(365天后)，
# 或者证书key泄漏了，需要重新发证的时候，就要加1
> openssl x509 -req -days 365 -in light.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out light.crt



####
查看证书
# 查看KEY信息
> openssl rsa -noout -text -in myserver.key

# 查看CSR信息
> openssl req -noout -text -in myserver.csr

# 查看证书信息
> openssl x509 -noout -text -in ca.crt

# 验证证书
# 会提示self signed
> openssl verify selfsign.crt

# 因为myserver.crt 是幅ca.crt发布的，所以会验证成功
> openssl verify -CAfile ca.crt myserver.crt

####
去掉key的密码保护
有时候每次都要输入密码太繁琐了,可以把Key的保护密码去掉

> openssl rsa -in light.key -out light.key.insecure

####
不同格式证书的转换
# PKCS转换为PEM
> openssl pkcs12 -in myserver.pfx -out myserver.pem -nodes

# PEM转换为DER
> openssl x509 -outform der -in myserver.pem -out myserver.[der|crt]

# PEM提取KEY
> openssl RSA -in myserver.pem -out myserver.key

# DER转换为PEM
> openssl x509 -inform der -in myserver.[cer|crt] -out myserver.pem

# PEM转换为PKCS
> openssl pkcs12 -export -out myserver.pfx -inkey myserver.key -in myserver.pem -certfile ca.crt

####
测试证书
Openssl提供了简单的client和server工具，可以用来模拟SSL连接，做测试使用。

# 连接到远程服务器
> openssl s_client -connect www.google.com.hk:443

# 模拟的HTTPS服务，可以返回Openssl相关信息
# -accept 用来指定监听的端口号
# -cert -key 用来指定提供服务的key和证书
> openssl s_server -accept 443 -cert myserver.crt -key myserver.key -www

# 可以将key和证书写到同一个文件中
> cat myserver.crt myserver.key > myserver.pem
# 使用的时候只提供一个参数就可以了
> openssl s_server -accept 443 -cert myserver.pem -www

# 可以将服务器的证书保存下来
> openssl s_client -connect www.google.com.hk:443 </dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > remoteserver.pem
# 转换成DER文件，就可以在Windows下直接查看了
> openssl x509 -outform der -in remoteserver.pem -out remoteserver.cer

####
计算MD5和SHA1
# MD5 digest
> openssl dgst -md5 filename

# SHA1 digest
> openssl dgst -sha1 filename


#### name server
TTL 客户端保存缓存的时间
SOA Serial  zone文件版本
NS DNS服务器名
MX 10  邮件服务器名
@ 符号代表完整的FQDN
*
A IP地址
CNAME 别名

#### zone file template
$TTL    3600
@       IN      SOA     light.cn.  admin.light.cn.(
                                      2015050101; Serial
                                      28800     ; Refresh
                                      14400     ; Retry
                                      3600000   ; Expire
                                      86400 )   ; Minimum
         IN NS    light.cn.
@        IN A     10.251.137.130
*        IN A     10.251.137.130
docker   IN A     10.251.137.130
salt     IN A     10.164.24.247


#### 确认DNS
# dig
# nslookup

让缓存失效
# nscd -i hosts

# bind工具， dig， nslookup等
yum -y install bind-utils



#### bind无法解析自己的域名问题：
会有如下错误
 reply from unexpected source expected

bind的自域名需要在/etc/hosts里登录，如下dig
 docker IN A 10.163.170.150
 salt IN A 10.163.170.150
 zabbix IN A 10.163.170.150
 controller IN A 10.163.170.150
 mysql IN A 10.163.170.150

10.163.170.150 salt



#### linux 版本确认
~$ head /etc/*release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.1 LTS"


Code:
$ uname -a
Linux anacreon 3.4.2-linode44 #1 SMP Tue Jun 12 15:04:46 EDT 2012 i686 i686 i386 GNU/Linux]


#### 文件夹大小确认
du -h -s *
ll -h


#### SQUID 缓存情况
# 缓存详细
squidclient -h 127.0.0.1 -p 3128 mgr:info >> hit.log

# 从日志查询hit数
cat /var/log/squid/access.log | grep HIT | wc -l
cat /var/log/squid/access.log | grep MISS | wc -l


#### 生成密码文件
# docker run --entrypoint htpasswd docker.alphabets.cn/registry:2.5.1 -Bbn admin alphabets > htpasswd
# docker inspect registry
# cp -R htpasswd ssl docker_folder
