Docker镜像制作及发布

Docker镜像制作及发布

搭建本地私有容器仓库

服务器:http://192.168.31.4:9000/ admin/Routon@1981

首先下载registry 镜像

1
docker pull registry

运行registry 容器

1
docker run -itd -v /data/registry:/var/lib/registry -p 5000:5000 --restart=always --name registry registry:latest

-itd: 在容器中打开一个伪终端进行交互操作,并在后台运行
-v: 把宿主机的/data/ registry目录绑定到容器/var/lib/ registry目录(这个目录是registry容器中存放镜像文件的目录),来实现数据的持久化;
-p:映射端口;访问宿主机的5000端口就访问到registry容器的服务了
–restart=always:这是重启的策略,在容器退出时总是重启容器
-name registry: 创建容器命名为registry
registry:latest:这个是刚才pull下来的镜像

Docker容器的重启策略如下:

  • no:默认策略,在容器退出时不重启容器
  • on- failure: 在容器非正常退出时(退出状态非0),才会重启容器
  • on-failure:3 :在容器非正常退出时重启容器,最多重启3次
  • always:在容器退出时总是重启容器
  • unless-stopped:在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

1. 基于现有镜像

创建

1
docker create -it ubuntu:16.04 /bin/bash

进入镜像修改

1
2
docker start  [containerID]
docker exec -it [containerID] /bin/bash

将修改后的容器提交为新的镜像,需要使用该容器的ID号创建新镜像

1
2
docker commit -a "gary" -m "rk3308 base env" [containerID] ubuntu:rk3308
docker images

常用选项:

  • -a 提交的镜像作者;
  • -c 使用Dockerfile文件来创建镜像;
  • -m 提交时的文字注释;
  • -p 在commit时,将容器暂定。

2. 基于本地模版

通过导入操作系统模板文件可以生成镜像,模板可以从OPENVZ开源项目下载,下载地址为:

http://openvz.org/Download/template/precreated

1
wget http://download.openvz.org/template/precreated/ubuntu-16.04-x86_64.tar.gz
1
cat ubuntu-16.04-x86_64.tar.gz | docker import - ubuntu:16.04

3. 基于Dockerfile

https://github.com/komljen/dockerfile-examples

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
FROM ubuntu:trusty
MAINTAINER Alen Komljen <alen.komljen@live.com>

ENV DEBIAN_FRONTEND noninteractive

RUN locale-gen en_US.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

RUN echo "force-unsafe-io" > /etc/dpkg/dpkg.cfg.d/02apt-speedup
RUN echo "Acquire::http {No-Cache=True;};" > /etc/apt/apt.conf.d/no-cache

RUN echo $'#!/bin/sh\nexit 101' > /usr/sbin/policy-rc.d
RUN chmod +x /usr/sbin/policy-rc.d

RUN \
apt-get update && \
apt-get -y install \
software-properties-common \
vim \
pwgen \
unzip \
curl \
git-core && \
rm -rf /var/lib/apt/lists/*
1
docker build -f Dockerfile

推送本地镜像到私有镜像仓库

客户端机器
在daemon.json文件中添加私有镜像仓库地址

1
vim /etc/docker/daemon.json
1
2
3
4
{
"insecure-registries": ["192.168.31.4:5000"],
"registry-mirrors": ["https://registry.docker-cn.com"]
}
1
service docker restart

为镜像打标签

1
docker tag [image_ID] 192.168.31.4:5000/ubuntu:16.04

上传到私有仓库

1
docker push 192.168.31.4:5000/ubuntu:16.04

列出私有仓库的所有镜像

1
curl http://192.168.31.4:5000/v2/_catalog

出私有仓库的centos 镜像有哪些tag

1
curl http://192.168.31.4:5000/v2/ubuntu/tags/list

先删除原有的centos的镜像,再测试私有仓库下载

1
2
docker rmi -f 8652b9 f0cb4c
docker pull 192.168.31.4:5000/hello-world:latest

参考:

文章目录
  1. 1. Docker镜像制作及发布
    1. 1.1. 搭建本地私有容器仓库
    2. 1.2. 1. 基于现有镜像
    3. 1.3. 2. 基于本地模版
    4. 1.4. 3. 基于Dockerfile
    5. 1.5. 推送本地镜像到私有镜像仓库