4. Docker 构建镜像

2023-11-16

Docker 构建镜像

docker制作镜像通常是通过两种方式来实现的,  第一种是通过容器的 commit , 第二种是通过 Buildfile来实现的.

 

 

docker commit 打包镜像

容器在运行过程中我们难免会做一些修改, 比如运行的mysql 镜像我们可能创建了数据库, 建了用户等等, 但是如果吧容器 stop 之后在  rm 掉, 这个时候在拉取镜像 run 我们的容器就不是刚刚运行的那个容器了, 原来容器的一切修改都丢失了,  这个时候把当前运行中的容器打包成镜像, 之后使用这个镜像运行的容器都会和打包时的容器一模一样.

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a :提交的镜像作者;

     

  • -c :使用Dockerfile指令来创建镜像;

     

  • -m :提交时的说明文字;

     

  • -p :在commit时,将容器暂停。

 

使用exec 命令进入正在运行的一个redis容器内部建立一个文件夹

[docker@VM_121_116_centos ~]$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b409e978b259        redis               "docker-entrypoint..."   13 days ago         Up 24 hours         0.0.0.0:6379->6379/tcp   redis
[docker@VM_121_116_centos ~]$ docker exec -it redis /bin/bash
root@b409e978b259:/data# mkdir /testdir
root@b409e978b259:/data# exit
exit

使用commit命令打包容器

[docker@VM_121_116_centos ~]$ docker  commit redis testredis
sha256:b4b8688e025d0aba179292f632ae861acb61d792137ed6157a367724e5fb0d2b
[docker@VM_121_116_centos ~]$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
testredis           latest              b4b8688e025d        5 seconds ago       95 MB
docker.io/redis     latest              0f55cf3661e9        3 weeks ago         95 MB
docker.io/mysql     5.6                 96e41ac53eac        3 weeks ago         256 MB
docker.io/java      latest              d23bdf5b1b1b        2 years ago         643 MB

使用新镜像运行容器看看有没有文件夹

 

使用 DockerFile

使用dockerFile 可以实现在文件中预先定义镜像, 之后使用docker  build 命令执行文件就可以构建一个镜像, 相比 docker commit  更加规范, 并且可以实现自动化.

官网介绍: https://docs.docker.com/engine/reference/builder/

Dockerfile reference

Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.

This page describes the commands you can use in a Dockerfile. When you are done reading this page, refer to the Dockerfile Best Practices for a tip-oriented guide.

 

看一个简单的dockerfile的例子

FROM ubuntu
MAINTAINER Talon <j615326@163.com> 
# disable interactive functions 
ENV DEBIAN_FRONTEND noninteractive 
# set default java environment variable 
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64 
RUN apt-get update && \ 
apt-get install -y software-properties-common && \ 
add-apt-repository ppa:openjdk-r/ppa -y && \ 
apt-get install -y --no-install-recommends openjdk-8-jre && \ 
rm -rf /var/lib/apt/lists/*

解析:

RUN : 是表示使用的基础镜像, 我们这里表示使用的 ubuntu:14.04 

MAINTAINER : 表示的是这个BulidFile的创建人

ENV : 表示设置容器的环境变量

RUN : 表示要在容器里面运行的命令,  &&\ 表示执行完这个命令继续执行下一行

注意事项: RUN 中最好首先执行 apt-get update 或者 yum update 更新一下依赖,  否则容易报错

E: Unable to locate package software-properties-common

 

使用docker bliud 命令

j简单的用法是 docker build -t   镜像名称  DockerFile 目录

[docker@VM_121_116_centos dockerFile]$ vim Dockerfile
[docker@VM_121_116_centos dockerFile]$ docker build  -t talon/java .

上图中DockerFile的执行顺序是和DockerFile中定义的是一致的,

要注意, 以上的环节都是在容器里面执行的, 而不是在宿主机执行, Dockerfile的主要作用就是事前定义要你要在容器里面做什么, 在bulid的时候直接执行事前定义好的命令和操作

 

完成之后查看镜像可以看见刚刚 build的镜像

[docker@VM_121_116_centos dockerFile]$ docker images

docker build 更加详细的命令

docker build [OPTIONS] PATH | URL | -
OPTIONS说明:
  • --build-arg=[] :设置镜像创建时的变量;

  • --cpu-shares :设置 cpu 使用权重;

  • --cpu-period :限制 CPU CFS周期;

  • --cpu-quota :限制 CPU CFS配额;

  • --cpuset-cpus :指定使用的CPU id;

  • --cpuset-mems :指定使用的内存 id;

  • --disable-content-trust :忽略校验,默认开启;

  • -f :指定要使用的Dockerfile路径;

  • --force-rm :设置镜像过程中删除中间容器;

  • --isolation :使用容器隔离技术;

  • --label=[] :设置镜像使用的元数据;

  • -m :设置内存最大值;

  • --memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;

  • --no-cache :创建镜像的过程不使用缓存;

  • --pull :尝试去更新镜像的新版本;

  • --quiet, -q :安静模式,成功后只输出镜像 ID;

  • --rm :设置镜像成功后删除中间容器;

  • --shm-size :设置/dev/shm的大小,默认值是64M;

  • --ulimit :Ulimit配置。

  • --tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。

  • --network: 默认 default。在构建期间设置RUN指令的网络模式

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

4. Docker 构建镜像 的相关文章

随机推荐

  • 西瓜书(周志华):什么是版本空间以及如何求取版本空间

    下面是自己结合百度的资料来理解的一些比较通俗的说法 假设空间 属性所有可能取值组成的可能的样本 版本空间 与已知数据集一致的所有假设的子集集合 绿色加号代表正类样本 红色小圈代表负类样本 GB 是最大泛化正假设边界 maximally Ge
  • 【管理篇 / 登录】❀ 01. 网线连接登录 ❀ FortiGate 防火墙

    简介 当我们拿到新的防火墙的时候 首先要做的就是将电脑快速 简便的连接到防火墙 登录并进行管理 而最方便的连接方式就是用网线了 这里介绍的是最简单的飞塔防火墙物理连接以及浏览器登录访问 桌面式防火墙网线连接 飞塔防火墙产品线里低端的桌面式防
  • 对象转换为JSON数据格式&使用JQuery获取数据

    将对象转换为JSON数据格式 我们需要json lib 2 3 jdk15 jar架包 当然还需要其它架包 来实现对象转JSON数据格式 此架包提供两个类来实现转换 JSONObject fromObject object 将对象转换成js
  • Python爬虫编程实践--re bs及xpath

    Beautiful Soup库入门 Beautiful Soup 是一个HTML XML 的解析器 主要用于解析和提取 HTML XML 数据 它基于HTML DOM 的 会载入整个文档 解析整个DOM树 因此时间和内存开销都会大很多 所以
  • 共识算法-PBFT

    简介 1 PBFT简介 BFT Byzantine Fault Tolerance 是区块链共识算法中需要解决的一个核心问题 例如 公有链网络中 比特币和以太访中用的是POW EOS用的是DPOS PBFT一般用于联盟链场景中 它是共识节点
  • Vivado时序约束(转载)

    Vivado时序约束 本文主要介绍如何在Vivado设计套件中进行时序约束 原文出自Xilinx中文社区 Timing Constraints in Vivado UCF to XDC Vivado软件相比于ISE的一大转变就是约束文件 I
  • vue3 父子组件传参

    父向子传参 父组件
  • bootstrap table复选框选多页勾选

    bootstrap table复选框选多页勾选 在项目中发现 bootstrap table的复选框选中后 翻页操作会导致上一页选中的丢失 api中的 bootstrapTable getSelections 只能拿到当前页的复选框 js
  • 正则表达式大全

    1 匹配中文 u4e00 u9fa5 2 英文字母 a zA Z 3 数字 0 9 4 匹配中文 英文字母和数字及下划线 u4e00 u9fa5 a zA Z0 9 同时判断输入长度 u4e00 u9fa5 a zA Z0 9 4 10 5
  • (Java)leetcode-236 Lowest Common Ancestor of a Binary Tree(二叉树的最近公共祖先)

    题目描述 给定一个二叉树 找到该树中两个指定节点的最近公共祖先 百度百科中最近公共祖先的定义为 对于有根树 T 的两个结点 p q 最近公共祖先表示为一个结点 x 满足 x 是 p q 的祖先且 x 的深度尽可能大 一个节点也可以是它自己的
  • MTK多国语言相关经验总结

    MTK多国语言相关经验总结 一 移植多国语言移植多国语言主要牵涉到对mmi features h 整个工程的宏控定义文件 fontres c 字体资源文件 的修改 并添加相应的字库文件 1 语言宏控的修改在mmi features h文件中
  • 使用C#语言,基于OpenCvSharp 开发摄像头后台,移动物体位置识别 (一)

    刚刚入门OpenCvSharp 也是小白一枚 教程很少 慢慢摸索 边学边记录 文末附链接 效果 要求 Visual Studio 2017 摄像头x1 准备工作 新建一个 Net Framework 控制台应用 右击解决方案 gt 管理解决
  • 京城游戏人-Day13: 获取被点击的 Button 以及其上的文字内容

    京城游戏人 Day13 获取被点击的 Button 以及其上的文字内容 作者 大锐哥 地址 http blog csdn net prevention 获取被点击的 button var button UnityEngine EventSy
  • Centos + docker,Ubuntu + docker介绍安装及详细使用

    docker笔记 常用命令 设置docker开机自启 sudo chkconfig docker on 查所有镜像 docker images 删除某个镜像 docker rmi CONTAINER ID 容器ID 删除所有镜像 docke
  • Linux命令大全!

    系统信息 arch 显示机器的处理器架构 1 uname m 显示机器的处理器架构 2 uname r 显示正在使用的内核版本 dmidecode q 显示硬件系统部件 SMBIOS DMI hdparm i dev hda 罗列一个磁盘的
  • Grid 布局实现九宫格图片动画

    前言 Grid 布局实现九宫格 background position设置背景图像起始位置 速速来Get吧 文末分享源代码 记得点赞 关注 收藏 1 实现效果 2 实现步骤 定义css变量 九宫格中每个宫格的长 宽为w 宫格之间的间距为ga
  • STL容器的线程安全

    众所周知 STL容器不是线程安全的 对于vector 即使写方 生产者 是单线程写入 但是并发读的时候 由于潜在的内存重新申请和对象复制问题 会导致读方 消费者 的迭代器失效 实际表现也就是招致了core dump 另外一种情况 如果是多个
  • firefox os_如何在电视上测试Firefox OS应用

    firefox os One of my responsibilities in my new role in Partner Engineering at Mozilla is testing HTML5 powered apps and
  • 解决git中出现的“bash syntax error near unexpected token ’(‘”错误

    今天来分享一篇关于我在git使用过程中出现的一个错误 错误信息 bash syntax error near unexpected token 翻译过来就是提示我在 这里有错误 而这个错误是我在使用git commit提交时候产生的 我当时
  • 4. Docker 构建镜像

    Docker 构建镜像 docker制作镜像通常是通过两种方式来实现的 第一种是通过容器的 commit 第二种是通过 Buildfile来实现的 docker commit 打包镜像 容器在运行过程中我们难免会做一些修改 比如运行的mys