安装registry
安装并启动docker
yum -y install docker
systemctl enable docker
systemctl start docker
下载registry镜像
docker pull registry
docker images
启动一个容器
docker run -d -p 4000:5000 --name registry --restart=always --privileged=true -v /registry:/var/lib/registry registry
参数说明:
-d后台执行
-p 端口映射, 宿主机4000端口映射给容器的5000端口
--restart=always 容器意外关闭后, 自动重启(如果重启docker服务, 带这个参数的, 能自动启动为Up状态, 不带这个的,不会自动启动)
-v /registry:/var/lib/registry :默认情况下,会将仓库存放于容器内的/var/lib/registry目录下,指定本地目录挂载到容器
-privileged=true :CentOS7中的安全模块selinux把权限禁掉了,参数给容器加特权,不加上传镜像会报权限错误(OSError: [Errno 13] Permission denied: ‘/tmp/registry/repositories/liibrary’)或者(Received unexpected HTTP status: 500 Internal Server Error)错误
进入容器
docker exec -it 688d5d308b56 sh
构建镜像
docker有两种方法构建镜像
1、用docker commit命令来创建镜像
通过docker run命令启动容器
修改docker镜像内容
docker commit 容器名 仓库/镜像名 #提交修改的镜像
docker run新的镜像
2、用Dockerfile构建镜像
1、将需要的版本tomcat和jdk放在所建文件夹下
2、创建文件夹并编写Dockerfile文件
touch Dockerfile
内容如下:
FROM e934aafc2206 #这串数字是一个centos镜像的镜像id,在这里作为tomcat的基础镜像
MAINTAINER Bourbon Tian "bourbon@XXXX.com" #定义作者以及联系方式
WORKDIR / #切换镜像目录,进入/目录
RUN mkdir jdk1.7 #在/下创建jdk目录,用来存放jdk文件
RUN mkdir tomcat7012 #在/下创建tomcat7012目录,用来存放tomcat
ADD jdk1.7.0_79 /jdk1.7 #将宿主机的jdk目录下的文件拷至镜像/jdk1.7目录下
ADD tomcat7012 /tomcat7012 #将宿主机的tomcat目录下的文件拷至镜像的/tomcat7012目录下
#设置环境变量
ENV JAVA_HOME=/jdk1.7
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH=/sbin:$JAVA_HOME/bin:$PATH
EXPOSE 8080 #公开端口
ENTRYPOINT ["/tomcat7012/bin/catalina.sh","run"] #设置启动命令
参数官方文档:https://docs.docker.com/engine/reference/builder/
3、构建镜像
docker build -t 10.1.50.240:5000/tomcat7012 .
--no-chche #略过缓存功能
4、查看镜像信息
5、启动容器测试
docker run --name tomcat2 -d -p 8081:8080 10.1.50.240/tomcat7012
上传镜像到仓库
在docker公共仓库下载一个镜像
docker pull docker.io/centos
来修改一下该镜像的tag(前面必须要加上仓库域名或IP地址和端口号)
docker tag centos 10.1.50.240:4000/icos/ljy-centos
把打了tag的镜像上传到私有仓库
docker push 10.1.50.240:4000/icos/ljy-centos
此处可能会有报错Get https://XXX.XXX.XXX.XXX:4000/v2/: http: server gave HTTP response to HTTPS client
因为从 docker1.3.2 开始,docker registry 默认都是使用 https 协议而不使用 http,需要修改一下配置,让你的私有仓库支持 http
[root@localhost docker]# more daemon.json
{
"insecure-registries":["0.0.0.0/0"]
}
[root@localhost docker]#
修改后,重启docker
仓库下载镜像
在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入
# 添加这一行
"insecure-registries":["10.1.50.240:4000"]
//多个私服写法,逗号分隔即可
{
"insecure-registries": [
"registry:4000",
"registry2:4000"
]
}
下载私有仓库镜像
docker pull 10.1.50.240:4000/icos/ljy-centos
查看本地仓库镜像
curl http://10.1.50.240:4000/v2/_catalog
仓库删除镜像
私有仓库中删除镜像
删除的原理就是把索引删掉,但磁盘上的数据是删不掉的。这是由于各个镜像之间的不同层共用的关系,可能导致删除一个镜像后其余的镜像也无法使用了。
更改registry容器内/etc/docker/registry/config.yml文件
在storage中添加如下参数允许删除镜像
delete:
enabled: true
1.打开镜像的存储目录,删除镜像文件夹
$ docker exec <容器名> rm -rf /var/lib/registry/docker/registry/v2/repositories/<镜像名>
2.执行垃圾回收操作,注意2.4版本以上的registry才有此功能
进入容器执行命令
$ registry garbage-collect /etc/docker/registry/config.yml