Docker registry 与 持续集成
1.如何建立私有的 Docker Hub
docker是一个非常好用的虚拟化工具。
Registry 在git上分为老代码库和新代码库,老代码push,pull 存在性能问题,新代码库采用go语言编写大大优化了push和pull的效率。
下面给出建立私有docker hub的方法。docker将私有hub的环境打包在registry image中
tag 为latest的版本为 0.9.1 版本,这里直接采用2.1.1版本
执行指令:
$ sudo docker pull registry:2.1.1
启动容器:
$ sudo docker run -d -v /opt/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:2.1.1
Registry服务默认会将上传的镜像保存在容器的/var/lib/registry,我们将主机的/opt/registry目录挂载到该目录,即可实现将镜像保存到主机的/opt/registry目录了。
这条指令启动一个基于registry image的cotainer。并将host主机的port 5000绑定到虚拟机的端口5000。
通过docker ps 查看
[root@hadoop /]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e6f720c3fbc registry:2.1.1 "/bin/registry /et..." 5 seconds ago Up 3 seconds 0.0.0.0:5000->5000/tcp registry 711859caf110 ubuntu "/bin/bash" 23 hours ago Up 23 hours newcontent b206b1748020 mysql:5.5 "docker-entrypoint..." 23 hours ago Up 23 hours 3306/tcp mysqldb abdf172d98e0 test/centos "./var/tmp/tomcat/..." 40 hours ago Up 40 hours 0.0.0.0:8090->8080/tcp testContainer [root@hadoop /]#
可通过浏览器查看:
这样,对该host主机端口5000的任何访问都转移到虚拟机中。
上传image:
首先通过docker tag 将image标志为要推送到私有仓库:
docker tag $ID $IP:$port/$name
如
[root@hadoop /]# docker tag hello-world 127.0.0.1:5000/hello-world
查看镜像:
[root@hadoop /]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE test/centos latest 0235ea6a1dc1 40 hours ago 655 MB <none> <none> f07e6d9bd519 42 hours ago 192 MB mysql 5.5 0697aa95507c 2 days ago 255 MB ubuntu latest 0ef2e08ed3fa 3 days ago 130 MB ubuntu 14.04 7c09e61e9035 3 days ago 188 MB docker-whale latest 17104b3a899f 3 days ago 256 MB 127.0.0.1:5000/hello-world latest 48b5124b2768 6 weeks ago 1.84 kB hello-world latest 48b5124b2768 6 weeks ago 1.84 kB centos latest 67591570dd29 2 months ago 192 MB registry 2.1.1 52bb991b482e 16 months ago 220 MB [root@hadoop /]#
直接使用doker push 将镜像上传到私有库
[root@hadoop /]# docker push 127.0.0.1:5000/hello-world The push refers to a repository [127.0.0.1:5000/hello-world] 98c944e98de8: Pushed latest: digest: sha256:720abce70775606fa539d38acc4d58d96eea22d51d7d06d269f6c5d6702e50a5 size: 2103 [root@hadoop /]#
在浏览器中输入 http://127.0.0.1:5000/v2/_catalog可以查看已经上传的镜像
同时可在宿主机本地/opt/registry目录下查看到,这样在Container挂掉的时候,我们在宿主机依旧可以查看到镜像
[root@hadoop ~]# cd /opt/registry/ [root@hadoop registry]# ls docker
下载image:
先将本地的 hello-world 镜像删除掉
[root@hadoop registry]# docker rmi hello-world Untagged: hello-world:latest Untagged: hello-world@sha256:c5515758d4c5e1e838e9cd307f6c6a0d620b5e07e6f927b07d05f6d12a1ac8d7 [root@hadoop registry]#
使用 docker pull 拉取镜像
[root@hadoop registry]# docker pull 127.0.0.1:5000/hello-world Using default tag: latest latest: Pulling from hello-world 983bfa07a342: Pull complete Digest: sha256:720abce70775606fa539d38acc4d58d96eea22d51d7d06d269f6c5d6702e50a5 Status: Downloaded newer image for 127.0.0.1:5000/hello-world:latest
使用私有仓库push可能会出现的问题:因为启动的registry服务不是安全可信的,需要修改docker配置文件 /etc/default/docker
添加 DOCKER_OPTS="--insecure-registry xxx.xxx.xxx.xxx:5000" 并重启docker 服务 service docker restart
2.将git上的项目git到本地,这里使用的osgit (http://git.oschina.net)
[root@bogon ~]# git clone https://git.oschina.net/wq3435/second.git
若提示
bash: git: command not found...
说明没有安装 git
安装git,CentOS下使用:
yum install git -y 或 yum install -y git
在Ubuntu 或 Debian下使用
apt-get install git -y
3.在git到本地后会有如下的目录
[root@bogon second]# ls README.md centos7 docker-compose.yml hello jdk jenkins jre maven mysql tomcat
第一个文件 docker-compose.xml
mysql: #先启动一个叫mysql的docker容器(也可以任务是创建名叫mysql的docker容器),命名叫 mysql:,因为是yml文件对格式缩进要求非常严格 image: mysql:5.5 #采用的镜像是 csphere/mysql:5.5 ports: #给宿主机和container的端口进行映射 - "3306:3306" volumes: #把宿主机的文件目录/var/lib/docker/vfs/dir/dataxc 映射到container的文件目录 /var/lib/mysql - /var/lib/docker/vfs/dir/dataxc:/var/lib/mysql #这样的做法是当Container删掉以后,这个目录下的文件还是存在的(可以应用到生产中registry的映射) hostname: mydb.server.com #这里的hostname和docker run --name 的name是不一样的,后者是 docker ps 中显示的name,而这里的hostname是系统本地 #在/etc/hostname 中的hostname是一个意思 tomcat: image: tomcat:7.0.75 ports: - "8080:8080" links: #links的两个作用 ①在tomcat中想访问mysql,可以再etc/host下写上ip地址和主机名,这样就可以直接连通了,不需要做域名解析.②可以直接访问msyql容器中的环境变量 - mysql:db #给mysql起的一个别名db environment: #配置环境变量,也可以通过 docker run -e 环境变量 配置环境变量 - TOMCAT_USER=admin - TOMCAT_PASS=admin hostname: tomcat.server.com
4.使用docker-compose.xml 启动
[root@bogon second]# docker-compose up -d
bash: docker-compose: command not found...
这里显示没有安装docker-compose
安装docker-compose
一种方式:
$ curl -L "https://github.com/docker/compose/releases/download/1.11.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
上述方式可能会很慢。
第二种方式
1、首先检查Linux有没有安装Python-pip包,直接执行 yum install python-pip
yum install python-pip
2、没有python-pip包就执行命令 yum -y install epel-release
yum -y install epel-release
3、执行成功之后,再次执行yum install python-pip
yum install python-pip
4.安装好pip之后,就可以安装Docker-Compose了.在linunx终端执行:pip install docker-compose.
[root@bogon ~]# pip install docker-compose
5.安装成功
[root@bogon ~]# docker-compose --version docker-compose version 1.11.2, build dfed245 [root@bogon ~]#
安装好docker-compose后再次执行 docker-compose up -d
[root@bogon second]# docker-compose up -d
Creating second_mysql_1
Creating second_tomcat_1