文章目录

  • 通过commit构建镜像
    • 实例
  • 使用dockerfile构建镜像
    • 实例

  构建docker镜像能够保存我们对容器的的修改,并再次使用。提供了自定义镜像的能力,使得我们能够以软件的形式打包并分发服务及运行环境。

  docker提供了两种构建镜像的方式,通过容器构建,和通过Dockerfile文件构建:

docker commit
docker bulid

通过commit构建镜像

  commit命令通过容器构建镜像,所以其接收容器的名字作为主要参数:

docker commit [OPTIONS] CONTAINER| REPOSITORY[:TAG]]
  1. -a:用来指定镜像的作者,通常我们会指定作者的名字以及联系方式。 --author=’’ Author e.g., "John Hannibal Smith hannibal@a-team.com
  2. -m:用来记录镜像构建的信息。–message=" Commit message
  3. -p:由于执行commit命令时会将正在执行的容器暂停,-p命令可以不暂停正在执行的容器。 --pause=true Pause container during commit

实例

  启动一个交互式容器:

docker run -i -t -p 80 --name commit_test ubuntu /bin/bash

  对这个容器做出修改,比如安装nginx

apt-get update
apt-get install nginx

  安装好之后就可以exit退出了,之后将其提交为镜像:

docker commit -a "zhiqiangho" -m 'nginx' commit_test zhiqiangho/commit_test1

  -a "zhiqiangho"为添加的作者信息,-m 'nginx’为添加镜像的信息。返回的唯一ID就是新生成的镜像的ID

  之后就可以通过images命令来查看刚才生成的镜像了:

docker images

  接下来运行一下刚刚生成的镜像:

docker run -d --name nginx_web1 zhiqiangho/commit_test1 nginx -g "daemon off;"

  这里我们给了一个参数来告诉nginx以前台的模式来运行,否者运行结束后容器也会停止。可以ps命令来查看容器的进程:

docker ps

  访问容器内部进程:

curl http://127.0.0.1

  但是这个时候我们并不能访问容器服务,因为刚刚忘记了指定容器映射的端口

docker run -d --name nginx_web2 -p 80 zhiqiangho/commit_test1 nginx -g "daemon off;"

  这样再用映射后的端口来访问:

curl http://127.0.0.1:49155

  由于之前将修改的容器保存到了镜像中,我们可以很容易地执行这个镜像,提供同样的服务。

使用dockerfile构建镜像

  使用dockerfile文件构建镜像主要分为两步:

  1. 创建dockerfile文件。
  2. 使用$ docker build命令来构建镜像。

  dockerfile文件实际上就是包含了一系列命令的文本文件。

  如下例所示就是一个dockerfile文件示例:

# First Dockerfile
FROM ubuntu:14.04
MAINTAINER zhiqiangho "zhiqiangho@outlook.com"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80

  它包含了镜像的基础ubuntu:14.04,镜像的维护人,以及需要在镜像中需要执行的命令,和暴露的端口。

实例

  首先创建一个存放dockerfile存放的目录:

mkdir -p dockerfile/df_test1

  然后进入到这个目录中:

cd docker/file/df_test1

  将刚才的内容写入到dockerfile文件中:

vim Dockerfile

  编写完成之后保存并退出。

  之后就可以通过build命令构建镜像:

$ docker build [OPTIONS] PATH |URL| -
  1. –force-rm=false
  2. –no-cache=false .
  3. –pull=false
  4. -q, -quiet=false
  5. –rm=true
  6. -t:指定出构建镜像的名字。–tag=“”

  后面的PATHURL都是指dockerfile文件的路径。

docker build -t="zhiqiangho/df_test1" .

  docker从基础镜像运行一个容器,也就是from指令指定的镜像名。然后执行指令,对容器做出修改,然后执行类似docker commit的操作,提交一个新的镜像层,再基于刚提交的镜像运行一个新的容器。然后再执行dockerfile中的下一条指令,直至所有指令执行完毕。这样我们就能够使用中间层镜像进行调试。

  后面一个.表示当前目录。dockerfile文件中的命令会被一条一条地执行。构建完成之后可以用docker images查看构建的新镜像。

  接下来就可以运行这个镜像:

docker run -d --name nginx_web3 -p 80 zhiqiangho/df_test1 nginx -g "daemon off;"

  同样可以使用curl命令来验证访问:

Docker系列(七)构建镜像相关推荐

  1. Docker系列 七. Docker 安装Jenkins

    Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...

  2. Docker 从Dockerfile 构建镜像 :build 命令的用法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. Dockerfile 创建完成后,可以使用 docker build 命令根据 Dockerfile ...

  3. Docker使用Dockerfile构建镜像

    2019独角兽企业重金招聘Python工程师标准>>> Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条 ...

  4. Docker系列七安装私人云盘

    前言 第三次更新: 后来拥有了一个群晖做为个人云盘,效果也不错,后来就没有继续捣鼓了. 第二次更新: 后来发现nextcloud会有要通过不被信任的域名访问的问题,于是重新修改了一遍. 我要在自己的云 ...

  5. 【Docker】Dockerfile构建镜像与命令详解

    前言 传统方式部署集群,你需要在每台机器搭建环境,配置各种中间件,这样不但效率低下,而且很难保证环境的一致性,而且配置如果有改动,需要挨个机器修改. 有了Docker,上述问题都能解决.但是官方镜像大 ...

  6. Docker 多阶段构建镜像multi-stage

    多阶段构建是一个新特性,需要 Docker 17.05 或更高版本的守护进程和客户端.对于那些努力优化 Dockerfiles 并使其易于阅读和维护的人来说,多阶段构建非常有用. 在之前先来学习术语: ...

  7. docker:dockerfile构建镜像

    目录 一.dockerfile概念 1.dockerfile的原理就是镜像分层 二.docker镜像的创建 1.基于现有镜像创建 2.基于本地模板创建 3.基于dockerfile创建 3.1 doc ...

  8. Docker 系列之 常用镜像

    Ubuntu 实战 操作 # 拉取 18.04 版本的 Ubuntu 镜像 docker pull ubuntu:latest# 以交互方式运行并进入 ubuntu 容器环境 docker run - ...

  9. Docker系列七: 使用Humpback管理工具管理容器(一款UI管理工具)

    Humpback 可以帮助企业快速搭建轻量级的 Docker 容器云管理平台,若将你的 Docker 主机接入到 Humpback 平台中,就能够为你带来更快捷稳定的容器操作体验. 功能特点 Web操 ...

  10. docker commit构建镜像(不推荐)

    dcoker commit镜像构建 获取docker镜像 # 下载镜像(默认从docker hub获取) docker pull ubuntu:14.04 搜索镜像 docker search IMA ...

最新文章

  1. UIColor之【扩展:#FFFFFF -UIColor】
  2. JS全选功能代码优化
  3. C++获取指向二维数组的首元素指针
  4. python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)...
  5. mongodb更新操作符$unset
  6. 虚拟化VMware ESXi 6.7服务器安装配置详细步骤图文
  7. VB 泛型 T 应用
  8. 数据结构(C语言版 第2版)课后习题答案 严蔚敏 编著
  9. tkinter-界面化抽签小程序
  10. 从细节到宏观的seo方案制定
  11. pdf关键字高亮 java_Java 查找、高亮PDF文本
  12. Spinner的用法(转)
  13. Java语言十五讲——第二讲 ClassLoader
  14. 微软:拿番茄花园开刀与反垄断无关
  15. 使用谷歌浏览器的speechSynthesis的API,实现语音播报功能
  16. 725 数模 空气污染问题研究 (15 五一 B)
  17. 自制wpf年会抽奖小软件
  18. OpenVINO™场景文字识别与同步与异步推理
  19. CSS 样式表大全(学习笔记)
  20. js -- 车牌号对应的归属地js文件

热门文章

  1. Hadoop2.x集群动态添加删除数据节点
  2. 方维分享系统修改,本地安装失败,后台无法登陆
  3. 二叉树中的和为某一值的路径(二)(C++)
  4. Kubernetes详解(十三)——Pod详解
  5. KVM详解(一)——KVM基础知识
  6. IS-IS详解(三)——IS-IS 报文结构与功能
  7. MAC 终端打开sublime3
  8. LinkedIn首席数据科学家谈数据分析
  9. 搜索场 day1 A 求和
  10. Espresso unit test的输入法问题