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. Day17_106_IO_利用Buffered和BufferWriter完成复制

    利用Buffered和BufferWriter完成复制 代码示例: 用BufferedReader 和 BufferWriter完成复制 import java.io.*; public class ...

  2. WinForm只运行运行一个实例(单开)

    using System; using System.Diagnostics; using System.Runtime.InteropServices; using System.Windows.F ...

  3. BeetleX数据分析中间服务V3

    V3版可以对更多的数据场景分析,可以用在系统日志,销售数据,医疗门诊等不同行业的数据进行分析透视.而它的目标并不是简单地进行数据汇总,更注重于不同时间段和不同标签之前的数据的汇总和差异对比,通过数据的 ...

  4. pickle json模块

    pickle --- Python 对象序列化 通过pickle模块的序列化操作我们能够将程序中运行的对象信息保存到文件中去,永久存储. 通过pickle模块的反序列化操作,我们能够从文件中创建上一次 ...

  5. 号外号外!DevUI Admin V1.0 发布啦!

    4月是鸟儿的月份,是木棉花的月份,是 DevUI Admin 发布的月份. 广受大家期待的 DevUI Admin 终于迎来了第一个开源 Angular 版本! DevUI Admin 是一个企业级中 ...

  6. 使用IDEA模拟git命令使用的常见场景

    目录 使用IDEA模拟git命令使用的常见场景 前期准备 新建一个远程仓库 在一个文件夹内建立两个子文件夹作为两个本地仓库的存放位置 本地仓库与远程仓库建立联系 模拟两个用户协同开发的场景(使用IDE ...

  7. 【Springboot】Springboot监听器Demo

    /** * @author: yq * @date: 2020/8/31 0:01 * @description 自定义事件 */ @Data public class MyEvent extends ...

  8. hdu4965 巧用矩阵乘法结合律

    题意:      给两个矩阵,n*m的矩阵A,和m*n的矩阵B, 求(A*B)^(n*n)其中 m<=6,n<=1000. 思路:       一开始直接模拟,写了个矩阵快速幂,超时了,因 ...

  9. Windows Server系统加固

    目录 账户管理.认证授权 管理账户 管理口令 授权 审核策略 IP协议安全配置 设备其他配置操作 账户管理.认证授权 管理账户 说明: 对于管理员账号,要求更改缺省账户名称,并且禁用 guest (来 ...

  10. Windows核心编程 第九章 线程与内核对象的同步(上)

    第9章 线程与内核对象的同步 上一章介绍了如何使用允许线程保留在用户方式中的机制来实现线程同步的方法.用户方式同步的优点是它的同步速度非常快.如果强调线程的运行速度,那么首先应该确定用户方式的线程同步 ...