Docker创建镜像以及私有仓库
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

可以看出下载速度明显很快
3
分享
收藏
Docker创建镜像以及私有仓库的更多相关文章
- docker 创建新的镜像到私有仓库
docker:/data# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bd6db4127a9e centos &q ...
- docker部署mysql,nginx,php,并上传镜像到私有仓库
前言 最近公司准备把现有环境全部搞成容器化,所以笔者就先了解了一下docker,并搞了一搞,并把自己搞的过程记录下来.话不多说直接开干 环境说明 Centos7 Docker version 18.0 ...
- docker 查询或获取私有仓库(registry)中的镜像
docker 查询或获取私有仓库(registry)中的镜像,使用 docker search 192.168.1.8:5000 命令经测试不好使. 解决: 1.获取仓库类的镜像: [root@sha ...
- [python](Docker SDK)上传镜像到私有仓库(tls、身份认证)
(Docker SDK)上传镜像到私有仓库(tls.身份认证) API:https://docker-py.readthedocs.io/en/stable/ 环境:python:3.7.3 配置参数 ...
- Docker容器学习梳理 - 私有仓库Registry使用
但有时候使用Docker Hub这样的公共仓库可能不方便,这种情况下用户可以使用registry创建一个本地仓库供私人使用,这点跟Maven的管理类似.使用私有仓库有许多优点: 1)节省网络带宽,针对 ...
- Docker基础-搭建本地私有仓库
1.使用registry镜像创建私有仓库 安装Docker后,可以通过官方提供的registry镜像来简单搭建一套本地私有仓库环境: docker run -d -p 5000:5000 regist ...
- Docker 创建镜像、修改、上传镜像
Docker 创建镜像.修改.上传镜像 –创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件系统创建一个. 一.创建镜像 创建镜像有很多方法,用户可以从 Do ...
- docker 创建镜像,并推送到私有仓库
创建镜像 创建 Dockerfile 镜像命名规则:registyr_url / namespace / depart / name : version 用这个规则创建的镜像,可直接推送到私有仓库 ...
- win10 下安装docker,创建镜像,push镜像到私有仓库,创建私有仓库,修改镜像仓库地址
通过连接下载window docker安装文件,https://download.docker.com/win/stable/Docker%20for%20Windows%20Installer.ex ...
随机推荐
- [Fundamental of Power Electronics]-PART I-3.稳态等效电路建模,损耗和效率-3.1 直流变压器模型
3.1 直流变压器模型 如图3.1所示,任何开关变换器都包含三个部分:功率输入,功率输出以及控制输入.输入功率按控制输入进行特定的功率变换输出到负载.理想情况下,这些功能将以100%的效率完成,因此 ...
- 【Flutter 3-5】Flutter进阶教程——在Flutter中使用Lottie动画
作者 | 弗拉德 来源 | 弗拉德(公众号:fulade_me) Lottie动画 在移动开发中总是需要展示一些动画特效,作为程序员的我们并不是很擅长用代码做动画,即便是有些动画可以实现,在跨平台的过 ...
- OO第三单元小结
目录 JML理论基础 JML工具链 openjml使用 openjml总结 jmlunitng使用 代码分析 第一次作业 第二次作业 第三次作业 测试&bug分析 黑盒测试 白盒测试(Juni ...
- idea无法引入自己定义的包和类
方法一:通过清理缓存解决: File -> Invalidate Caches / Restart...,在新窗口点击Invalidte and Restart,未奏效 方法二:导入依赖 如图, ...
- Mysql无法通过临时密码访问
在Linux上安装Mysql: [步骤一]:将mysql的安装文件上传到Linux的服务器. [步骤二]:安装MYSQL服务端 [步骤三]:安装MYSQL客户端 我在步骤三遇到了问题,所以直接从步骤三 ...
- Python中的多进程、多线程和协程
本文中的内容来自我的笔记.撰写过程中参考了胡俊峰老师<Python程序设计与数据科学导论>课程的内容. 并发处理:多进程和多线程 前置 概念: 并发:一段时间内同时推进多个任务,但不一定要 ...
- Parentheses Balance UVA - 673
You are given a string consisting of parentheses () and []. A string of this type is said to be corr ...
- Day17_106_IO_利用Buffered和BufferWriter完成复制
利用Buffered和BufferWriter完成复制 代码示例: 用BufferedReader 和 BufferWriter完成复制 import java.io.*; public class ...
- Firefox 启动带有配置信息
若不设置进行下述配置,那么 webdriver 每次启动火狐浏览器,默认都是一个不太有任何插件的浏览器被启动. 通过配置的方式,指定一个浏览器设置来启动,就可以使用以前安装的插件或配置信息了. 步骤一 ...
- hdu3746 KMP的next数组应用,求项链首尾项链循环
题意: 给你一个项链,问你最少加多少个珠子能满足整个项链是一个循环的项链(首尾相连) 思路: KMP的简单应用只要了解next数组的意义就好说了,下面总结下 next在循环方面 ...