Docker的安装及镜像、容器的基本操作详见博客https://blog.51cto.com/11134648/2160257
下面介绍Docker创建镜像和创建私有仓库的方法,详细如下:

创建镜像

创建镜像的方法有三种,分别是基于已有镜像创建、基于本地镜像模板创建以及基于Dockfile创建。下面介绍这三种镜像的方法

1.基于已有镜像创建

实质就是把一个容器里面运行的程序以及该程序的运行环境打包起来生成新的镜像。

命令格式:docker commit [选项] 容器ID/名称 仓库名称:标签

(1)首先需要查看启动已有镜像的容器的ID号

docker ps -a


(2)之后使用docker commit命令创建一个新镜像

命令格式:docker commit [选项] 容器ID/名称 仓库名称:标签

常用选项: -m 说明信息
-a 作者信息
-p 生成过程中停止容器的运行


(3)创建完成后会返回新创建镜像的ID号

docker images | grep daoke

2.基于本地模板创建

通过导入操作系统模板文件可以生成镜像,模板文件可以从OPENVZ开源项目下载,下载地址为http://download.openvz.org/template/precreated。

(1)下载模板文件

wget http://download.openvz.org/template/precreated/debian-7.0-x86-minimal.tar.gz


(2)使用docker导入命令导入为本地镜像

cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new


(3)导入完成后会返回生成镜像的ID信息

docker images | grep new

3.基于Dockerfile创建

  • Dockfile是由一组指令组成的文件,其中每条指令对应Linux中的一条命令,Docker程序将读取Dockfile中的指令生成指定镜像。

  • Dockfile结构大致分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。
  • Dockfile每行支持一条指令,每条指令可携带多个参数,支持使用”#“号开头的注释。

Dockerfile有十几条命令可用于构建镜像,其中常见的指令如下:

指令 含义
FROM 镜像 指定所创建镜像的基础镜像
MAINTAINER 名字 指定维护者信息
RUN 命令 在所基于镜像上执行命令
CMD ["要运行的程序",“参数1”,“参数2”] 指定启动容器时默认执行的命令
LABEL 指定生成镜像的元数据标签信息
EXPOSE 端口号 指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值 设置一个环境变量的值,会被后面的RUN使用
ADD < src > <dest> 赋值指定的< src > 路径下的内容到容器中的<dest>路径下,<src>可以为URL;,<src>要与Dockerfile位于相同目录;如果为tar文件,会自动解压到<dest>路径下
COPY < src > <dest> 复制本地主机的<src>路径下的内容到镜像中的<dest>路径下;一般情况下推荐使用COPY,而不是ADD
ENTRYPOINT 指定镜像的默认入口
VOLUME ["目录"] 在容器中创建数据卷挂载点
USER 用户名/UID 指定运行容器时的用户名或UID
WORKDIR 路径 为后续的RUN、CMD、ENTRYPOINT指定工作目录
ARG 指定镜像内使用的参数(例如版本号信息等)
ONBUILD 命令 配置当前所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令
STOPSIGNAL 容器退出的信号值
HEALTHCHECK 如何进行健康检查
SHELL 指定使用shell时默认shell类型

例如基于Dockerfile创建httpd镜像,步骤如下:

(1)建立目录,作为生成镜像的工作目录

mkdir  apache
cd apache

(2)创建并编写Dockerfile文件

vim Dockerfile

#基于的基础镜像
FROM centos
#维护镜像的用户信息
MAINTAINER The porject <cloud-ops@centos.org>
#镜像操作指令安装apache软件
RUN yum -y update
RUN yum -y install httpd
#开启 80 端口
EXPOSE 80
#复制网站首页文件
ADD index.html /var/www/html/index.html
#将执行脚本复制到镜像中
ADD run.sh /run.sh
RUN chmod 755 /run.sh
#启动容器时执行脚本
CMD ["/run.sh"]

(3)编写执行脚本内容

vim run.sh

#!/bin/bash
rm -rf /run/httpd/* #清理httpd缓存
exec /usr/sbin/apachectl -D FOREGROUND #启动apache服务

(4)创建测试页面

echo "web test" > index.html

需要注意的是Dockerfile文件、需要运行的脚本文件以及要复制到容器中的文件都必须在工作目录下同一级。


(5)使用Dockfile生成镜像

命令格式:docker build [选项] 路径
常用选项: -t 指定镜像的标签信息
docker build -t httpd:centos .   #注意别忘了末尾有"."


(6)使用新的镜像运行容器

docker run -d -p 1216:80 httpd:centos   #其中-p选项实现从本地端口1216到容器中的80端口的映射


可以看到该镜像已在容器中加载运行

本机的ip地址是192.168.100.138,访问容器中的Apache服务。

firefox http://192.168.100.138:1216

创建私有仓库

使用registry镜像来搭建本地私有仓库。

1.下载registry镜像

docker pull registry

2.在/etc/docker/目录下创建一个json文件,定义私有仓库地址

vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.100.138:5000"]}

3.重启docker服务

systemctl start daemon-reload
systemctl restart docker.service

4.使用下载好的registry镜像启动一个容器

  • 默认情况下仓库存放于容器内的/tmp/registry目录下。
  • -v选项可以将本地目录挂载到容器内的/tmp/registry下使用,这样就不会容器被删除后镜像也会随之消失。
    docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry

    5.将上传的镜像标记

    docker tag httpd:centos 192.168.100.138:5000/httpd

6.上传做标记的镜像

docker push 192.168.100.138:5000/httpd

7.获取私有仓库列表

curl -XGET http://192.168.100.138:5000/v2/_catalog
curl -XGET http://192.168.100.138:5000/v2/httpd/tags/list

8.删除做标记的镜像

docker rmi 192.168.100.138:5000/httpd
docker images

9.从私有仓库下载标记的镜像

docker pull 192.168.100.138:5000/httpd


可以看出下载速度明显很快

著作权归作者所有:来自51CTO博客作者小樱桃Cherry的原创作品,如需转载,请注明出处,否则将追究法律责任

3

分享

收藏

小樱桃Cherry

56篇文章,69W+人气,35粉丝

https://blog.51cto.com/11134648/2160358

关注

Docker创建镜像以及私有仓库的更多相关文章

  1. docker 创建新的镜像到私有仓库

    docker:/data# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd6db4127a9e centos &q ...

  2. docker部署mysql,nginx,php,并上传镜像到私有仓库

    前言 最近公司准备把现有环境全部搞成容器化,所以笔者就先了解了一下docker,并搞了一搞,并把自己搞的过程记录下来.话不多说直接开干 环境说明 Centos7 Docker version 18.0 ...

  3. docker 查询或获取私有仓库(registry)中的镜像

    docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...

  4. [python](Docker SDK)上传镜像到私有仓库(tls、身份认证)

    (Docker SDK)上传镜像到私有仓库(tls.身份认证) API:https://docker-py.readthedocs.io/en/stable/ 环境:python:3.7.3 配置参数 ...

  5. Docker容器学习梳理 - 私有仓库Registry使用

    但有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似.使用私有仓库有许多优点: 1)节省网络带宽,针对 ...

  6. Docker基础-搭建本地私有仓库

    1.使用registry镜像创建私有仓库 安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境: docker run -d -p 5000:5000 regist ...

  7. Docker 创建镜像、修改、上传镜像

    Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...

  8. docker 创建镜像,并推送到私有仓库

    创建镜像 创建  Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...

  9. win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址

    通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...

随机推荐

  1. 利用别名切换索引流程Elasticsearch 7.7

    背景 公司里面现在有es集群,由于时间过长,es集群中的某个索引过大但是未删除,一直在写入的情况下,昨天写入突然停止了,发现是索引超时的问题,这时想到通过创建一个新的索引来进行索引切换 操作 es 集 ...

  2. 围绕 Kubernetes 的 8 大 DevOps 生产关键实践

    本文主要介绍 DevOps 的 8 大关键实践在 Kubernetes 平台下如何落地,结合我们目前基于 Kubernetes 平台的 DevOps 实践谈谈是如何贯彻相关理念的,这里不会对其具体实现 ...

  3. 学习笔记-cordova 限制app横屏

    禁止手机app横竖屏幕转换,只需在根目录下的 config.xml 中添加如下内容 <preference name="orientation" value="po ...

  4. 【Python学习笔记】-虚拟环境virtualenv

    在开发python应用程序的时候,系统安装的python3只有一个版本:3.4.所有的第三方的包都回被pip安装到python3的site-packages目录下. 如果我们要要同时开发多个应用程序, ...

  5. Hibernate(十四篇)

    (一)Hibernate简介 (二)hibernate配置管理 (三)Hibernate对象-关系映射文件 (四)Hibernate API详解 (五)Hibernate一级缓存 (六)Hiberna ...

  6. Leedcode算法专题训练(哈希表)

    Java 中的 HashSet 用于存储一个集合,可以查找元素是否在集合中.如果元素有穷,并且范围不大,那么可以用一个布尔数组来存储一个元素是否存在.例如对于只有小写字符的元素,就可以用一个长度为 2 ...

  7. es的分布式架构原理能说一下么(es是如何实现分布式的啊)?

    在搜索这块,lucene是最流行的搜索库.几年前业内一般都问,你了解lucene吗?你知道倒排索引的原理吗?现在早已经out了,因为现在很多项目都是直接用基于lucene的分布式搜索引擎--elast ...

  8. 工作区和GOPATH

    工作区和GOPATH 1.特性: 1.1.5版本的自举(即用 Go 语言编写程序来实现 Go 语言自身) 2.1.7版本的垃圾回收器 2.GOROOT.GOPATH 和 GOBIN GOROOT:Go ...

  9. 吉特日化MES&WMS系统--三色灯控制协议转http

    关于硬件控制大部分都是使用CS客户端程序,一般连接口都是用网口,串口,USB口等,应用通讯是不支持HTTp协议操作的,而目前一般做技术的人员都在于BS开发,使用HTTP 协议,所以在硬件交互上可能觉得 ...

  10. PDF转HTML工具——用springboot包装pdf2htmlEX命令行工具

    Convert PDF to HTML without losing text or format. 用springboot把pdf2htmlEX命令行工具包装为web服务, 使得PDF转HTML更方 ...