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]]
- 运行原容器:docker run -it <OLD_IMAGE>
- 修改原容器:docker exec -it <OLD_IMAGE>
- 保存新镜像:docker commit <OLD_IMAGE> <NEW_IMAGE>
- 验证新镜像:docker run -it <NEW_IMAGE>
- 推送至仓库: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搭建本地私有仓库及镜像制作方法