Docker搭建本地私有仓库及镜像制作方法

Docker默认是从registry.hub.docker.com拉取镜像,当我们因为某些原因无法访问默认地,就需要搭建一个本地私有镜像仓库,以及制作docker镜像。

部署私有仓库

部署docker

安装并启动docker:

wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
yum -y install docker
systemctl start docker && systemctl enable docker

部署registry

拉取并启动registry:

# 拉取registry镜像
docker pull registry
# 运行registry容器
docker run -itd -v /data:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest
# 查看容器运行状态
docker ps

验证registry

curl http://127.0.0.1:5000/v2/_catalog

通过以上命令可知目前仓库为空,现在从docker官方拉取一个nginx镜像做测试:

# 从默认仓库拉取镜像
docker pull nginx
# 给镜像打标签
docker tag docker.io/nginx 10.10.200.201:5000/nginx
# 上传镜像至私有仓库
docker push 10.10.200.201:5000/nginx

先注册本地仓库(所有需要使用私有仓库的docker客户端都需要修改),修改配置/etc/docker/daemon.json

{
  "insecure-registries":["10.10.200.201:5000"],
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

上传镜像后就可以使用了,以下是验证结果:

[root@docker-registry ~]# docker push 10.10.200.201:5000/nginx
The push refers to a repository [10.10.200.201:5000/nginx]
908cf8238301: Pushed 
eabfa4cd2d12: Pushed 
60c688e8765e: Pushed 
f431d0917d41: Pushed 
07cab4339852: Pushed 
latest: digest: sha256:794275d96b4ab96eeb954728a7bf11156570e8372ecd5ed0cbc7280313a27d19 size: 1362
[root@docker-registry ~]# ls /data/docker/registry/v2/repositories/nginx/
_layers  _manifests  _uploads
[root@docker-registry ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx            latest              7e4d58f0e5f3        13 days ago         133 MB
10.10.200.201:5000/nginx   latest              7e4d58f0e5f3        13 days ago         133 MB
docker.io/registry         latest              2d4f4b5309b1        3 months ago        26.2 MB
[root@docker-registry ~]# docker rmi docker.io/nginx
Untagged: docker.io/nginx:latest
Untagged: docker.io/nginx@sha256:c628b67d21744fce822d22fdcc0389f6bd763daac23a6b77147d0712ea7102d0
[root@docker-registry ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
10.10.200.201:5000/nginx   latest              7e4d58f0e5f3        13 days ago         133 MB
docker.io/registry         latest              2d4f4b5309b1        3 months ago        26.2 MB

从其他主机也可以拉取该仓库的镜像,以下是验证结果:

[root@docker-client ~]# docker pull 10.10.200.201:5000/nginx
Using default tag: latest
Trying to pull repository 10.10.200.201:5000/nginx ... 
latest: Pulling from 10.10.200.201:5000/nginx
d121f8d1c412: Pull complete 
ebd81fc8c071: Pull complete 
655316c160af: Pull complete 
d15953c0e0f8: Pull complete 
2ee525c5c3cc: Pull complete 
Digest: sha256:794275d96b4ab96eeb954728a7bf11156570e8372ecd5ed0cbc7280313a27d19
Status: Downloaded newer image for 10.10.200.201:5000/nginx:latest
[root@docker-client ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
10.10.200.201:5000/nginx   latest              7e4d58f0e5f3        13 days ago         133 MB

至此,本地私有镜像仓库搭建完成。

制作本地镜像

通过commit制作镜像

该方法适用于对原有镜像基础上进行修改,然后保存为新镜像,基本语法和构建流程如下:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  1. 运行原容器:docker run -it <OLD_IMAGE>
  2. 修改原容器:docker exec -it <OLD_IMAGE>
  3. 保存新镜像:docker commit <OLD_IMAGE> <NEW_IMAGE>
  4. 验证新镜像:docker run -it <NEW_IMAGE>
  5. 推送至仓库:docker push <TAG><NEW_IMAGE>

通过commit构建的都是黑箱镜像,构建时会引入一些无用的文件导致体积臃肿,也会保留历史操作导致难以维护,因此不建议使用。

通过build制作镜像

该方法适用于从Dockerfile中构建镜像,基本语法和参数说明如下:

docker build [OPTIONS] PATH | URL | -
参数 说明
--build-arg=[] 设置镜像创建时的变量
--cpu-shares 设置 CPU 使用权重
--cpu-period 限制 CPU CFS 周期
--cpu-quota 限制 CPU CFS 配额
--cpuset-cpus 指定使用的 CPU ID
--cpuset-mems 指定使用的 内存 ID
--disable-content-trust 忽略校验,默认开启
-f 指定要使用的Dockerfile路径
--force-rm 设置镜像过程中删除中间容器
--isolation 使用容器隔离技术
--label=[] 设置镜像使用的元数据
-m 设置内存最大值
--memory-swap 设置Swap的最大值为内存+swap,"-1"表示不限swap
--no-cache 创建镜像的过程不使用缓存
--pull 尝试去更新镜像的新版本
--quiet, -q 安静模式,成功后只输出镜像ID
--rm 设置镜像成功后删除中间容器
--shm-size 设置/dev/shm的大小,默认值64M
--ulimit Ulimit配置
--tag, -t 镜像的名字及标签,一般格式为name:tag或name
--network 在构建期间设置RUN指令的网络模式,默认default

后续会有Dockerfile的相关文章,本文仅举例如何对现有的Dockerfile构建镜像:

# 把当前目录中的Dockerfile构建newimg
docker build -t newimg:1.0 .
# 指定包含Dockerfile的压缩包构建nginx
docker build http://10.10.200.201:5000/nginx.tar.gz -t nginx:v1.15
# 在指定的压缩包中,Dockerfile文件不在默认的目录或者是其它文件名
docker build http://10.10.200.201:5000/docker.tar.gz -f ./nginx/Dockerfile -t nginx:v1.15

原创文章禁止转载:技术学堂 » Docker搭建本地私有仓库及镜像制作方法

精彩评论

2+6=

感谢您的支持与鼓励

支付宝扫一扫打赏

微信扫一扫打赏