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

 

 

 

 

 

 

 

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com