107 lines
5.9 KiB
Markdown
107 lines
5.9 KiB
Markdown
##部署本地仓库
|
||
由于网络的关系,国内用户在使用docker hub的时候,很难pull一个基本的镜像下来。
|
||
本节介绍如何创建部署本地仓库。
|
||
|
||
###安装docker
|
||
参见本文第三小节
|
||
###从文件系统创建一个image镜像
|
||
创建镜像有很多方法,官方的推荐是pull一个,不过在墙内,想pull一个基本的ubuntu都没办法完成。
|
||
这里推荐一个办法就是从一个文件系统import一个镜像,个人推荐可以使用opvz的模板来创建:(openvz可以说是容器虚拟化的先锋吧)
|
||
openvz的模板下载地址如下:
|
||
http://openvz.org/Download/templates/precreated
|
||
下载完之后,比如:下载了一个ubuntu14.04的镜像
|
||
使用以下命令:
|
||
```
|
||
sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
|
||
```
|
||
然后用docker images看下:
|
||
```
|
||
docker images
|
||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||
ubuntu 14.04 05ac7c0b9383 17 seconds ago 215.5 MB
|
||
```
|
||
就多了一个我们的ubuntu镜像
|
||
|
||
###创建私有仓库
|
||
官方指南称最简单的办法是 docker run -p 5000:5000 registry,如果被墙了,也无法下载该images。感谢CSDN,我有一个1M的腾讯云服务器,上面搭建了一个私有仓库大家可以使用
|
||
docker pull 203.195.193.251:5000/registry
|
||
到我的服务器下载 速度虽然慢点,但有保证!
|
||
另外的方法是使用刚才的创建的ubuntu来创建,官方有个docker仓库的源码地址 https://github.com/dotcloud/docker-registry 下载私有仓库的源码,可以根据上面的docker file来创建。
|
||
|
||
也可以参考:
|
||
http://www.vpsee.com/2013/11/build-your-own-docker-private-regsitry-service/
|
||
|
||
###在私有仓库上传、下载、搜索images
|
||
创建好自己的私有仓库之后,可以使用docker tag 一个镜像,然后push,然后在别的机器上pull下来就好了。这样我们的局域网私有docker仓库就搭建好了。
|
||
步骤如下:
|
||
使用 docker run -p 5000:5000 registry 在局域网的一台机器上开启一个容器之后,我的局域网私有仓库地址为192.168.7.26:5000
|
||
先在本机看下现有的images
|
||
```
|
||
root ~ # docker images
|
||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||
ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
|
||
ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB
|
||
使用 docker tag 将ba58这个image标记为192.168.7.26:5000/test
|
||
root ~ # docker tag ba58 -t 192.168.7.26:5000/test
|
||
root ~ # docker images
|
||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||
ubuntu 14.04 ba5877dc9bec 6 weeks ago 192.7 MB
|
||
ubuntu latest ba5877dc9bec 6 weeks ago 192.7 MB
|
||
192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
|
||
```
|
||
使用docker push 上传我们标记的新image,这里因为我的服务器上已经有这个images,所有在上传文件层的时候,都跳过了,但是标记还是不一样的。
|
||
```
|
||
root ~ # docker push 192.168.7.26:5000/test
|
||
The push refers to a repository [192.168.7.26:5000/test] (len: 1)
|
||
Sending image list
|
||
Pushing repository 192.168.7.26:5000/test (1 tags)
|
||
Image 511136ea3c5a already pushed, skipping
|
||
Image 9bad880da3d2 already pushed, skipping
|
||
Image 25f11f5fb0cb already pushed, skipping
|
||
Image ebc34468f71d already pushed, skipping
|
||
Image 2318d26665ef already pushed, skipping
|
||
Image ba5877dc9bec already pushed, skipping
|
||
Pushing tag for rev [ba5877dc9bec] on {http://192.168.7.26:5000/v1/repositories/test/tags/latest}
|
||
root ~ # curl http://192.168.7.26:5000/v1/search
|
||
The program 'curl' is currently not installed. You can install it by typing:
|
||
apt-get install curl
|
||
```
|
||
现在的私有仓库只支持这样简陋的搜索方式,如果没有安装curl,可以先安装后再使用
|
||
```
|
||
root ~ # apt-get install curl
|
||
Reading package lists... Done
|
||
Building dependency tree
|
||
Reading state information... Done
|
||
The following NEW packages will be installed:
|
||
curl
|
||
0 upgraded, 1 newly installed, 0 to remove and 570 not upgraded.
|
||
Need to get 123 kB of archives.
|
||
After this operation, 313 kB of additional disk space will be used.
|
||
Get:1 http://192.168.7.26/ubuntu/ trusty/main curl amd64 7.35.0-1ubuntu2 [123 kB]
|
||
Fetched 123 kB in 0s (7457 kB/s)
|
||
Selecting previously unselected package curl.
|
||
(Reading database ... 184912 files and directories currently installed.)
|
||
Preparing to unpack .../curl_7.35.0-1ubuntu2_amd64.deb ...
|
||
Unpacking curl (7.35.0-1ubuntu2) ...
|
||
Processing triggers for man-db (2.6.7.1-1) ...
|
||
Setting up curl (7.35.0-1ubuntu2) ...
|
||
root ~ # curl http://192.168.7.26:5000/v1/search
|
||
{"num_results": 7, "query": "", "results": [{"description": "", "name": "library/miaxis_j2ee"}, {"description": "", "name": "library/tomcat"}, {"description": "", "name": "library/ubuntu"}, {"description": "", "name": "library/ubuntu_office"}, {"description": "", "name": "library/desktop_ubu"}, {"description": "", "name": "dockerfile/ubuntu"}, {"description": "", "name": "library/test"}]}
|
||
```
|
||
这里我们可以看到 {"description": "", "name": "library/test"} 表示我们的image已经被成功上传了。
|
||
现在我们到另外一台机器上下载这个images
|
||
```
|
||
[root@opnvz ~]# docker pull 192.168.7.26:5000/test
|
||
Pulling repository 192.168.7.26:5000/test
|
||
ba5877dc9bec: Download complete
|
||
511136ea3c5a: Download complete
|
||
9bad880da3d2: Download complete
|
||
25f11f5fb0cb: Download complete
|
||
ebc34468f71d: Download complete
|
||
2318d26665ef: Download complete
|
||
[root@opnvz ~]# docker images
|
||
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
|
||
192.168.7.26:5000/test latest ba5877dc9bec 6 weeks ago 192.7 MB
|
||
```
|
||
|
||
这样我们就可以在新的机器上使用这个images了! |