--1-- 仓库 1、公有仓库: 1.基本操作:
1>搜索、下载image:
# docker search tomcat
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
tomcat Apache Tomcat is an open source implementa... 1017 [OK]
dordoka/tomcat Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba... 27 [OK]
consol/tomcat-8.0 Tomcat 8.0.15, 8080, "admin/admin" 15 [OK]
davidcaste/alpine-tomcat Apache Tomcat 7/8 using Oracle Java 7/8 wi... 10 [OK]
cloudesire/tomcat Tomcat server, 6/7/8 10 [OK]
andreptb/tomcat Debian Jessie based image with Apache Tomc... 6 [OK]
openweb/oracle-tomcat A fork off of Official tomcat image with O... 4 [OK]
kieker/tomcat 2 [OK]
fbrx/tomcat Minimal Tomcat image based on Alpine Linux 2 [OK]
camptocamp/tomcat-logback Docker image for tomcat with logback integ... 1 [OK]
abzcoding/tomcat-redis a tomcat container with redis as session m... 1 [OK]
bitnami/tomcat Bitnami Tomcat Docker Image 1 [OK]
picoded/tomcat tomcat 8 with java 8, and MANAGER_USER / M... 1 [OK]
rennergabor/virgo-tomcat-server Docker image for Eclipse Virgo Tomcat Server 0 [OK]
ping2ravi/tomcat Tomcat Versions 7 and 8 0 [OK]
cheewai/tomcat Tomcat and Oracle JRE in docker 0 [OK]
inspectit/tomcat Tomcat with inspectIT 0 [OK]
stakater/tomcat Tomcat based on Ubuntu 14.04 and Oracle Java 0 [OK]
charlycoste/tomcat Debian based Tomcat (don't use it, this is... 0 [OK]
davidcaste/debian-tomcat Yet another Debian Docker image for Tomcat... 0 [OK]
elcom/tomcat Tomcat with Java 0 [OK]
blueur/tomcat Tomcat with the possibility to set the use... 0 [OK]
khipu/tomcat ansible based tomcat 8 0 [OK]
oriaks/tomcat Tomcat 0 [OK]
phpmentors/tomcat-app Tomcat application image using Maven 0 [OK]
docker pull ${REPOSITORY}:${TAG}---------[不演示,第一节的实操在笔记【2】中有] 2.自动创建:
作为后续扩展学习部分,暂不演示,以实用功能为主 2、私有仓库: 1.使用registry的镜像创建私有仓库容器:
1>将registry镜像下载到本地:
# docker pull registry
latest: Pulling from registry
4b59778f82f9: Pull complete
d55b2c222c83: Pull complete
c664f834680b: Pull complete
b772c022cbbe: Pull complete
feb1c3b189e9: Pull complete
601bdc23d897: Pull complete
be7eadf718aa: Pull complete
9bac026e7e41: Pull complete
5c929a8b587a: Pull complete
Digest: sha256:0658d259f220a395b17f994a433cca057ff3828c839c303506db2993189bb2df
Status: Downloaded newer image for registry:latest 2>使用pull的官方registry启动一个仓库docker容器实例
方法1含义:将本地5000端口连接到容器实例的5000端口,实用官方registry镜像启动实例
# docker run -d -p 5000:5000 registry
4ea87a9497d26b3fac32748d72b0fc7ab1ca1c2cbde7075da530c16fe8a088f6 注:笔记中有s3相关的笔记,但是由于亚马逊中国区注册需要营业执照,国际区速度慢而且收费,所以就不演示,有机会演示的话,新起一个笔记连接于此:链接
方法2含义:将本地5000端口连接到容器实例的5000端口,实用官方registry镜像启动实例,并将本地目录/home/admin/registry挂载为该容器实例的数据卷,目录为容器中的/registry,权限读写
【推荐,因此,所有基于使用registry的镜像创建私有仓库容器的操作,都基于这个方式启动的,这样可以将镜像存在宿主机的/home/admin/registry目录下!】
# docker run -d -p 5000:5000 -v /home/admin/registry:/var/lib/registry registry
879e4d9ab3575846ca41251d95f6486449f4ba4461c7ec8f6068413f522d94a6 3>验证:
# docker tag my_centos:6.8 127.0.0.1:5000/lich_centos:6.8
# docker push 127.0.0.1:5000/lich_centos:6.8
The push refers to a repository [127.0.0.1:5000/lich_centos] (len: 1)
35b7ec25ed6f: Buffering to Disk
35b7ec25ed6f: Image already exists
Digest: sha256:2abc4b59ac7f668e699148994826d48149b12db4e69c2ec0a5abecdeafaf291c
# curl 127.0.0.1:5000/v2/_catalog
{"repositories":["lich_centos"]} 【注意,docker通过repository来断定1:镜像属于哪个注册服务器;2:镜像属于注册服务器的哪个仓库,通过tag来标记具体镜像】 【所以,push之前需要将image重新tag,然后再执行push操作】 【附:v2私服的http api】http://blog.csdn.net/ztsinghua/article/details/51496658
------------重要标记-------------- 1、v1版本的registry和v2版本的registry,验证方式不同: v1:浏览器访问方式为:我的ip:5000/v1/search v1可以通过get方式搜索关键字:curl -X GET 我的ip:5000/v1/search?q=关键字 latest版本为v2浏览器访问方式为:我的ip:5000/v2/_catalog 2、容器内部,存储镜像的位置不同: v1:/tmp/registry v2:/var/lib/registry 3、实现语言: v1:python v2:go[与docker相同] 4、以我上传的127.0.0.1:5000/lich_centos:6.8为例[v2],由于将本地的/home/admin/registry目录挂在到了他的镜像存储目录,所以镜像被存储到了本地的/home/admin/registry目录。结构如下:
]$ pwd
/home/admin/registry
]$ ll
total 4
drwxr-xr-x 3 root root 4096 Nov 11 10:46 docker
cd docker/registry/v2/
]$ ll
total 8
drwxr-xr-x 3 root root 4096 Nov 11 10:46 blobs
drwxr-xr-x 3 root root 4096 Nov 11 10:46 repositories
]$ pwd
/home/admin/registry/docker/registry/v2
]$ du -sh *
118M blobs
80K repositories
到上述步骤可以看出,镜像数据是存在blobs中的
$ cd repositories/
]$ ll
total 4
drwxr-xr-x 5 root root 4096 Nov 11 10:46 lich_centos
]$ pwd
/home/admin/registry/docker/registry/v2/repositories
]$ ll
total 4
drwxr-xr-x 5 root root 4096 Nov 11 10:46 lich_centos
以上步骤看出repositories是存储仓库文件的信息
]$ pwd
/home/admin/registry/docker/registry/v2/repositories/lich_centos/_manifests/tags
]$ ll
total 4
drwxr-xr-x 4 root root 4096 Nov 11 10:46 6.8
]$ pwd
/home/admin/registry/docker/registry/v2/repositories/lich_centos/_manifests/tags/6.8
]$ cd current/
]$ ll
total 4
-rw-r--r-- 1 root root 71 Nov 11 10:46 link
]$ cat link
sha256:2abc4b59ac7f668e699148994826d48149b12db4e69c2ec0a5abecdeafaf291c
$ pwd
/home/admin/registry/docker/registry/v2/repositories/lich_centos/_manifests/tags/6.8/index/sha256/2abc4b59ac7f668e699148994826d48149b12db4e69c2ec0a5abecdeafaf291c
]$ ll
total 4
-rw-r--r-- 1 root root 71 Nov 11 10:46 link
]$ cat link
sha256:2abc4b59ac7f668e699148994826d48149b12db4e69c2ec0a5abecdeafaf291c
以上可以看出_manifests中存着tag,以及相关的sha256密文信息,索引,以及当前的版本信息等
]$ pwd
/home/admin/registry/docker/registry/v2/blobs/sha256
]$ du -sh *
12K 2a
118M 57
]$ pwd
/home/admin/registry/docker/registry/v2/blobs/sha256/2a/2abc4b59ac7f668e699148994826d48149b12db4e69c2ec0a5abecdeafaf291c
]$ ll
total 4
-rw-r--r-- 1 root root 2685 Nov 11 10:46 data
]$ du -sh *
4.0K data
]$ pwd
/home/admin/registry/docker/registry/v2/blobs/sha256/57/57f54b88f59ddb62a1630ffb17ab61894db1d6393b0961a14c1334aad1403b27
]$ ll
total 120504
-rw-r--r-- 1 root root 123395470 Nov 11 10:46 data
]$ du -sh *
118M data
docker-registry使用
# docker-registry -h
usage: docker-registry [-h]
run the docker-registry with gunicorn, honoring the following
environment variables:
REGISTRY_HOST: TCP host or ip to bind to; default is 0.0.0.0
REGISTRY_PORT: TCP port to bind to; default is 5000
GUNICORN_WORKERS: number of worker processes gunicorn should start
GUNICORN_GRACEFUL_TIMEOUT: timeout in seconds for graceful worker restart
GUNICORN_SILENT_TIMEOUT: timeout in seconds for restarting silent workers
GUNICORN_USER: unix user to downgrade priviledges to
GUNICORN_GROUP: unix group to downgrade priviledges to
GUNICORN_ACCESS_LOG_FILE: File to log access to
GUNICORN_ERROR_LOG_FILE: File to log errors to
GUNICORN_OPTS: extra options to pass to gunicorn 可见,docker-registry启动的时候是从环境变量中读取这些量,为此,我们在~/.bashrc中添加如下内容:
export REGISTRY_HOST=0.0.0.0
export REGISTRY_PORT=9000
export GUNICORN_WORKERS=10
export GUNICORN_GRACEFUL_TIMEOUT=10
export GUNICORN_SILENT_TIMEOUT=10
export GUNICORN_USER=root
export GUNICORN_GROUP=root
export GUNICORN_ACCESS_LOG_FILE=/root/registry_logs/access.log
export GUNICORN_ERROR_LOG_FILE=/root/registry_logs/error.log 启动docker-registry【由于dev:跟了&dev 进入守护模式运行】:
docker-registry 启动后可能会有警告信息,不影响使用,只是没有开启redis的cache而已:
首先启动 2 个容器:
$ sudo docker run -i -t --rm --net=none base /bin/bash
root@1f1f4c1f931a:/#
$ sudo docker run -i -t --rm --net=none base /bin/bash
root@12e343489d2f:/# 找到进程号,然后创建网络名字空间的跟踪文件。
$ sudo docker inspect -f '``.`State`.`Pid`' 1f1f4c1f931a
2989
$ sudo docker inspect -f '``.`State`.`Pid`' 12e343489d2f
3004
$ sudo mkdir -p /var/run/netns
$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004 创建一对 peer 接口,然后配置路由
$ sudo ip link add A type veth peer name B
$ sudo ip link set A netns 2989
$ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A
$ sudo ip netns exec 2989 ip link set A up
$ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A
$ sudo ip link set B netns 3004
$ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
$ sudo ip netns exec 3004 ip link set B up
$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B