Docker 学习笔记(二) Docker实战之Registry以及持续集成

学习资料

Git

https://git.oschina.net/dockerf/second fork一下

视频

http://study.163.com/course/courseLearn.htm?courseId=1273002#/learn/video?lessonId=1515025&courseId=1273002


Docker Registry


什么是Docker Registry?

Docker Registry 是存放docker镜像的仓库

什么是Docker Hub?

Docker Hub是docker官方的Registryhttps://hub.docker.com/,由于总所周知的网络原因,国内使用官方的registry pull 镜像速度慢的像蜗牛····

私有Registry搭建

[root@rancher-server]~# dao pull registry

# ----------------------------------------------------------------------------
# DaoCloud ToolBox for Docker
#
# DaoCloud, Inc. (c) 2016
#
# Fastest way to pull image from Docker Hub
# ----------------------------------------------------------------------------

Pulling repository library/registry 

7c4baf947271: Download complete                                                                                   
a3ed95caeb02: Download complete                                                                                   
f1d1dbdd4f97: Download complete                                                                                   
4e3899dc28fa: Download complete                                                                                   
e14b922ad4f5: Download complete                                                                                   
f2bbca3948d0: Download complete                                                                                   
1d4dc7bffbb8: Download complete                                                                                   
Pull library/registry:latest complete, you can find it with 'docker images'
#Registry服务默认会将上传的镜像保存在容器的/tmp/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了
[root@rancher-server]# docker run -d -p 5000:5000  --restart=always   -v /opt/registry:/tmp/registry  --name registry registry
7643b9b79730ce411bf80be5f7ebb776ec15823be5d40475e3c3ebcc0d6f2b5f
[root@rancher-server]/# docker logs -f 7643b9b79730ce411bf80be5f7ebb776ec15823be5d40475e3c3ebcc0d6f2b5f
[root@rancher-server]/# docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                              NAMES
7643b9b79730        registry               "docker-registry"        8 minutes ago       Up 7 minutes        0.0.0.0:5000->5000/tcp             registry
5ca3bb6cfc42        rancher/agent:v1.0.1   "/run.sh run"            14 hours ago        Up 19 minutes                                          rancher-agent
0f38b7bab4fb        rancher/server         "/usr/bin/s6-svscan /"   14 hours ago        Up 19 minutes       3306/tcp, 0.0.0.0:8888->8080/tcp   rancher-server

上传镜像到Registry

[root@rancher-server]/# vim /usr/lib/systemd/system/docker.service 
#添加--insecure-registry registry-host:5000
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/docker daemon --insecure-registry 192.168.2.22:5000 -H fd:// $OPTIONS $DOCKER_STORAGE_OPTIONS
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

#加载新的配置文件
[root@rancher-server]/# systemctl  daemon-reload  
#重启Docker服务
[root@rancher-server]/# systemctl  restart docker.service
#Tag镜像  registry_url/image_name:image_tag  这里我们tag一个jenkins镜像
[root@rancher-server]/# docker tag jenkins 192.168.2.22:5000/jenkins 
#Push镜像到私有Registry
[root@rancher-server]/# docker push 192.168.2.22:5000/jenkins
The push refers to a repository [192.168.2.22:5000/jenkins]
7105667cc19d: Image successfully pushed 
5f70bf18a086: Image successfully pushed 
8931f5a4c543: Image successfully pushed 
3d2200f39554: Image successfully pushed 
edc3eb62ecee: Image successfully pushed 
4cbfdafef1a6: Image successfully pushed 
7efd3ba34fe9: Image successfully pushed 
451fe6ec6290: Image successfully pushed 
910c11554e05: Image successfully pushed 
18a708dd9f86: Image successfully pushed 
c58360ce048c: Image successfully pushed 
0030e912789f: Image successfully pushed 
0ece0aa9121d: Image successfully pushed 
ef63204109e7: Image successfully pushed 
694ead1cbb4d: Image successfully pushed 
591569fa6c34: Image successfully pushed 
998608e2fcd4: Image successfully pushed 
c12ecfd4861d: Image successfully pushed 
Pushing tag for rev [62f5c69b8249] on {http://192.168.2.22:5000/v1/repositories/jenkins/tags/latest}

从私有Registry pull镜像到本地

#删除刚刚Push上去的镜像
[root@rancher-server]/# docker rmi 192.168.2.22:5000/jenkins
Untagged: 192.168.2.22:5000/jenkins:latest
再Pull下来
[root@rancher-server]/# docker pull 192.168.2.22:5000/jenkins
Using default tag: latest
Pulling repository 192.168.2.22:5000/jenkins
62f5c69b8249: Pulling dependent layers 
62f5c69b8249: Pulling image (latest) from 192.168.2.22:5000/jenkins 
c12ecfd4861d: Pulling metadata 
9bed728889e3: Pulling metadata 
284d895cc891: Pulling metadata 
255386472d2e: Pulling metadata 
636d6481a70c: Pulling metadata 
5bdfbeac8908: Pulling metadata 
e156e4746bc6: Pulling metadata 
79539a64183f: Pulling metadata 
43f767d950ba: Pulling metadata 
bb46233dab51: Pulling metadata 
acd71b58286e: Pulling metadata 
fae0335e5f13: Pulling metadata 
988b4f10914a: Pulling metadata 
dbde4f7c26b4: Pulling metadata 
a714af38eb97: Pulling metadata 
a1ffa5c5ac92: Pulling metadata 
43fd34bcdf1c: Pulling metadata 
bf942e9a6196: Pulling metadata 
ace3a12d121b: Pulling metadata 
62f5c69b8249: Already exists 
ba64f08c87cf: Already exists 
d521a4fa3dea: Already exists 
0382e085fcf1: Already exists 
909f5d01a2b5: Already exists 
9752b4caf6ed: Already exists 
4dde5ea7e731: Already exists 
5e37802efb0f: Already exists 
098d97977023: Already exists 
ffc5d1f38cc7: Already exists 
83ec3700b3b9: Already exists 
0e227729a063: Already exists 
acca8465e42e: Already exists 
a6e4e05a09e5: Already exists 
99d9866b6e00: Already exists 
1a6d35263e5b: Already exists 
2453e14f3604: Already exists 
657500b7f74a: Already exists 
dca53caaf190: Already exists 
431ede532da7: Already exists 
Status: Image is up to date for 192.168.2.22:5000/jenkins:latest
192.168.2.22:5000/jenkins: this image was pulled from a legacy registry.  Important: This registry version will not be supported in future versions of docker.
[root@rancher-server]/# docker images | grep  192.168.2.22:5000/jenkins
192.168.2.22:5000/jenkins               latest              2742172fed4c        11 days ago         708.9 MB

Push到私有Registry 报错

[root@rancher-agent]~# docker push 192.168.2.22:5000/rancher/agent
The push refers to a repository [192.168.2.22:5000/rancher/agent]
unable to ping registry endpoint https://192.168.2.22:5000/v0/
v2 ping attempt failed with error: Get https://192.168.2.22:5000/v2/: EOF
 v1 ping attempt failed with error: Get https://192.168.2.22:5000/v1/_ping: EOF

修改docker启动命令,重启docker

[root@rancher-server]/# vim /usr/lib/systemd/system/docker.service 
#添加--insecure-registry registry-host:5000

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network.target docker.socket
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/docker daemon --insecure-registry 192.168.2.22:5000 -H fd:// $OPTIONS $DOCKER_STORAGE_OPTIONS
MountFlags=slave
LimitNOFILE=1048576
LimitNPROC=1048576
LimitCORE=infinity
TimeoutStartSec=0

[Install]
WantedBy=multi-user.target

#加载新的配置文件
[root@rancher-server]/# systemctl  daemon-reload  
#重启Docker服务
[root@rancher-server]/# systemctl  restart docker.service

重启完成之后再次Push

Docker持续集成

使用Docker持续集成有什么好处?

  1. 很好的解决环境一致性问题

  2. 加快部署和持续集成

  3. Docker资源消耗少

Docker-compose

Docker Compose提供一个简单的基于YAML配置语言,用于描述和组装多容器的分布式应用。 使用docker定义和运行复杂的应用,使用compose,可以在一个文件里,定义多容器的应用。只需要三步即可完成一个应用的创建。

#Install
[root@rancher-server]~curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose  
[root@rancher-server]~chmod +x /usr/local/bin/docker-compose 
#clone你之前fork的git仓库
[root@rancher-server]~# git clone https://git.oschina.net/vincent927/second.git
[root@rancher-server]~# cd second
[root@rancher-server]~/second# cat docker-compose.yml 
mysql:
   image: csphere/mysql:5.5
   ports: 
     - "3306:3306"
   volumes:
     - /var/lib/docker/vfs/dir/dataxc:/var/lib/mysql
   hostname: mydb.server.com

tomcat:
   image: csphere/tomcat:7.0.55
   ports:
      - "8080:8080"
   links:
      - mysql:db
   environment:
      - TOMCAT_USER=admin
      - TOMCAT_PASS=admin
   hostname: tomcat.server.com
#这里为了方面我们把image改一下
mysql:
   image: mysql
   ports: 
     - "3306:3306"
   volumes:
     - /var/lib/docker/vfs/dir/dataxc:/var/lib/mysql
   hostname: mydb.server.com

tomcat:
   image: tomcat
   ports:
      - "8080:8080"
   links:
      - mysql:db
   environment:
      - TOMCAT_USER=admin
      - TOMCAT_PASS=admin
   hostname: tomcat.server.com
#启动
[root@rancher-server]~/second# docker-compose up  -d
Recreating second_mysql_1...
Recreating second_tomcat_1...
#查看状态
[root@rancher-server]~/second# docker-compose ps    
     Name                   Command             State           Ports          
------------------------------------------------------------------------------
second_mysql_1    docker-entrypoint.sh mysqld   Up      0.0.0.0:3306->3306/tcp 
second_tomcat_1   catalina.sh run               Up      0.0.0.0:8080->8080/tcp 
#查看日志
[root@rancher-server]~/second# docker-compose logs
Attaching to second_tomcat_1, second_mysql_1
tomcat_1 | 17-Apr-2016 08:04:58.992 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.0.33
tomcat_1 | 17-Apr-2016 08:04:58.994 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Mar 18 2016 20:31:49 UTC
tomcat_1 | 17-Apr-2016 08:04:58.994 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number:         8.0.33.0
tomcat_1 | 17-Apr-2016 08:04:58.994 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
tomcat_1 | 17-Apr-2016 08:04:58.994 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            3.10.0-327.10.1.el7.x86_64
tomcat_1 | 17-Apr-2016 08:04:58.994 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
tomcat_1 | 17-Apr-2016 08:04:58.995 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /usr/lib/jvm/java-7-openjdk-amd64/jre
tomcat_1 | 17-Apr-2016 08:04:58.995 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           1.7.0_95-b00
tomcat_1 | 17-Apr-2016 08:04:58.995 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Oracle Corporation
tomcat_1 | 17-Apr-2016 08:04:58.995 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
tomcat_1 | 17-Apr-2016 08:04:58.995 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.endorsed.dirs=/usr/local/tomcat/endorsed
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
tomcat_1 | 17-Apr-2016 08:04:58.996 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni:/lib/x86_64-linux-gnu:/usr/lib/x86_64-linux-gnu:/usr/lib/jni:/lib:/usr/lib
tomcat_1 | 17-Apr-2016 08:05:01.179 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
tomcat_1 | 17-Apr-2016 08:05:01.352 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
tomcat_1 | 17-Apr-2016 08:05:01.355 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]
tomcat_1 | 17-Apr-2016 08:05:01.357 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read
tomcat_1 | 17-Apr-2016 08:05:01.358 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 8408 ms
tomcat_1 | 17-Apr-2016 08:05:01.386 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service Catalina
tomcat_1 | 17-Apr-2016 08:05:01.386 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.0.33
tomcat_1 | 17-Apr-2016 08:05:01.419 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/ROOT
tomcat_1 | 17-Apr-2016 08:05:40.996 INFO [localhost-startStop-1] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [38,413] milliseconds.
tomcat_1 | 17-Apr-2016 08:05:42.017 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/ROOT has finished in 40,598 ms
tomcat_1 | 17-Apr-2016 08:05:42.018 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/docs
tomcat_1 | 17-Apr-2016 08:05:42.084 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/docs has finished in 66 ms
tomcat_1 | 17-Apr-2016 08:05:42.085 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/examples
tomcat_1 | 17-Apr-2016 08:05:44.082 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/examples has finished in 1,997 ms
tomcat_1 | 17-Apr-2016 08:05:44.082 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/host-manager
tomcat_1 | 17-Apr-2016 08:05:44.123 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/host-manager has finished in 41 ms
tomcat_1 | 17-Apr-2016 08:05:44.130 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory /usr/local/tomcat/webapps/manager
tomcat_1 | 17-Apr-2016 08:05:44.201 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory /usr/local/tomcat/webapps/manager has finished in 71 ms
tomcat_1 | 17-Apr-2016 08:05:44.223 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
tomcat_1 | 17-Apr-2016 08:05:44.246 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]
tomcat_1 | 17-Apr-2016 08:05:44.251 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 42893 ms
#停止
[root@rancher-server]~/second# docker-compose stop
Stopping second_tomcat_1...
Stopping second_mysql_1...
#删除
[root@rancher-server]~/second# docker-compose rm
Going to remove second_tomcat_1, second_mysql_1
Are you sure? [yN] y
Removing second_mysql_1...
Removing second_tomcat_1...
[root@rancher-server]~/second# docker-compose ps
Name   Command   State   Ports 
------------------------------

Maven配置

[root@rancher-server]~/maven-tar/
[root@rancher-server]~ cp apache-maven-3.3.3-bin.tar.gz /maven-tar/

Jenklins安装配置

[root@rancher-server]/jenkins_home# docker run -d -p 8080:8080 --name jenkins -v /usr/bin/docker:/usr/bin/docker -v /./run/docker.sock:/var/run/docker.sock -v /maven-tar:/root -v  /var/jenkins_home jenkins

浏览器访问

http://your-host:8080/

安装Git插件

在可选插件里面搜索git

勾选

git Client Plug-In

Git Parameter Plug-In

直接安装

175944_4boK_1767904.png

系统管理-全局安全配置

165746_Ozy0_1767904.png

Jenkins注册新用户

165747_WO8r_1767904.png

 创建一个新的任务

165946_xPNU_1767904.png

演示代码地址

https://git.oschina.net/dockerf/build-nginx.git

增加一个构建步骤-EXCUTE-SHELL

未完待续···

转载于:https://my.oschina.net/liuhuan0927/blog/661403

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值