一, 私有docker镜像仓库的搭建
↵registry 增加认证机制
↵mkdir /opt/registry/auth↵docker run --entrypoint htpasswd registry:2 -Bbn username password > /opt/registry/auth/htpasswd↵docker run -d -p 5000:5000 --restart=always --name registry \↵ -v /opt/registry/auth:/auth \↵ -e "REGISTRY_AUTH=htpasswd" \↵ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \↵ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \↵ registry:2↵docker login localhost:5000↵
↵
使用https传输
↵docker run -d -p 5000:5000 --restart=always --name registry \↵ -v /opt/registry/auth:/auth \↵ -e "REGISTRY_AUTH=htpasswd" \↵ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \↵ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \↵ -v /opt/registry/certs:/certs \↵ -v /opt/registry/data:/var/lib/registry↵ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \↵ -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \↵ registry:2↵docker login myregistrydomain.com:5000↵
↵
二, github添加钩子的两种方法
↵1, 是在jenkins任务中勾选 触发远程构建 (例如,使用脚本) 添加token, 组成url, 到github中添加webhook url, 用户名和密码为jenkins的用户, 在用户设置里可获取.url格式如下:
↵https://jenkins_username:token@jenkins_domain/job/jenkins_job_name/build?token=jenkins_job_token↵
↵
2, 第二种是在github中添加jenkins service, 得到url , 会自动添加到webhooks, 而在jenkins任务中由于添加了github plugin, 只需要勾选 Build when a change is pushed to GitHub即可
↵另外需要在全局中添认证github, 此处可以借助github设置的token, 并有repo相关的权限, 将这个token添加到jenkins 认证里以secret text的形式.
↵三, 科学上网shadowsocks docker中运行.
↵docker run -d -p 2016:2016 --restart=always oddrationale/docker-shadowsocks -s 0.0.0.0 -p 2016 -k 密码 -m aes-256-cfb↵
↵
四, docker-compose安装
↵apt-get install python-pip python-dev↵pip install -U docker-compose↵chmod +x /usr/local/bin/docker-compose↵
↵
五, 获取docker 容器IP
↵docker inspect --format='{{.NetworkSettings.IPAddress}}' $CONTAINER_ID↵
↵
六, 在Jenkins容器内运行了Docker命令方法:
↵- ↵
- DooD(Docker-outside-of-Docker)特权模式 这里存在一个重大的安全问题:Jenkins用户对宿主具有root权限,比如Jenkins可以创建装载宿主任意目录的容器。因此,务必确保这个容器只对受信用户访问,并考虑使用VM来将Jekins与宿主其他部分隔离开。
- ↵
- Docker in Docker(DinD)DinD并不比使用特权模式的容器安全性高,不过确实能避免使用sudo。DinD最主要的劣势是你无法重用宿主缓存的镜像(不过如果需要为测试容器提供一个与宿主隔离的干净环境,这将很有用)。
- ↵
- 使用HTTPS与Docker后台程序通讯 通过HTTPS暴露socket不需要sudo并且可以使用宿主的镜像,但因为打开了端口增加了攻击面,可以说是最不安全的。
- ↵
七, jenkins 相关插件简介
↵1, Docker build step plugin
↵对应配置面板: execute Docker commond↵作用: 可以添加Docker命令到构建步骤中;
↵2, CloudBees Docker Build and Publish plugin
↵对应配置面板: Docker build and publish↵作用: 提供通过Dockerfile构建工程的能力并将制作好的镜像发布到Docker仓库中;
↵3, Docker Plugin
↵作用: 可以使用Docker主机动态分配的容器作为Jenkins的从节点;
↵4, Kubernetes Plugin
↵作用:通过由Kubernetes管理的多个Docker主机系统来动态分配的容器作为Jenkins的从节点;↵Kubernetes Plugin依赖了Docker Plugin
↵5, Docker Commons Plugin
↵作用: 为其他与Docker相关的插件提供API; 其它docker插件依赖于它.↵CloudBees Docker Build and Publish plugin和Docker build step plugin都依赖了Docker commons Plugin
↵八, jenkins 在容器中运行, 挂载卷权限问题.
↵sudo chown -R 1000:1000 /var/run/docker.sock ↵sudo chown -R 1000:1000 /var/jenkins_home↵
↵
九, Docker数据卷的备份和还原 (利用数据卷容器来备份、恢复、迁移数据卷)
↵1, 数据备份
↵$ docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar [container data volume]↵
↵
上面的命令创建了一个容器,该容器同时挂载了两个数据卷,第一个数据卷是通过容器间接挂载的,第二个容器是通过-v选项指定的,容器启动后就可以直接访问这两个容器,这样就可以实现在该容器中将一个数据卷的数据拷贝到另一个数据卷中,从而实现备份的目的。
↵2, 数据还原 如果要恢复数据到一个容器,首先创建一个带有空数据卷的容器[container name]。
↵$ docker run -itd -v /dbdata --name [container name] ubuntu /bin/bash↵$ docker run --volumes-from [container name] -v $(pwd):/backup ubuntu tar xvf /backup/backup.tar↵
↵
原理与数据备份一致,只需要将压缩命令换成解压缩命令即可: