1. docker镜像构建

该章节主要介绍2种构建docker镜像的方式。当然,当前基本上需要的基础镜像都有,直接使用即可。例如数据库、中间件之类的,只需要拿来使用即可,但是依然存在需要开发者构建镜像的情况。

1.1 docker commit

不推荐使用
先看看docker commit的含义

[centos@jiliguo docker]$ docker commit --help

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

Create a new image from a container's changes

Options:
  -a, --author string    Author (e.g., "John Hannibal Smith <hannibal@a-team.com>")
  -c, --change list      Apply Dockerfile instruction to the created image
  -m, --message string   Commit message
  -p, --pause            Pause container during commit (default true)
[centos@jiliguo docker]$ 

从一个改变的容器构建镜像,也就是说,docker commit启动一个容器,修改容器,再将修改后的容器保存为一个新的镜像。
接下来将演示一下如何通过docker commit 构建镜像

  • 运行镜像,并查看文件内容:
[centos@jiliguo docker]$ docker run  -it --name=helloworld myhelloworld:v1.0 bash
root@9508f1279b44:/# cat /var/local/hello-world.txt
hello world
  • 修改容器内文件内容
root@9508f1279b44:/# cat /var/local/hello-world.txt
hhhh
  • 保存镜像
[centos@jiliguo ~]$ docker ps
CONTAINER ID        IMAGE                                     COMMAND                  CREATED              STATUS              PORTS                                                                       NAMES
9508f1279b44        myhelloworld:v1.0                         "bash"                   About a minute ago   Up About a minute                                                                               helloworld
[centos@jiliguo ~]$ docker commit helloworld hhhh:v1.0
sha256:99d078dd4c709bb799092517947aa88600aca7e3fd5fe3101e5d98a5bad2ba0d
[centos@jiliguo ~]$ 
  • 测试
[centos@jiliguo ~]$ docker run -it hhhh:v1.0 bash
root@0475a8f33943:/# cat /var/local/hello-world.txt
hhhh
root@0475a8f33943:/# 

从上可知新的镜像的确是保存的修改后的内容

1.2 Dockerfile构建

通过dockerfile文件构建镜像,查看下docker build

[centos@jiliguo docker]$ docker build --help

Usage:  docker build [OPTIONS] PATH | URL | -

Build an image from a Dockerfile

演示一下:
Dockerfile:这就是hello-world镜像的dockerfile文件

FROM ubuntu
COPY hello-world.txt /var/local/hello-world.txt
CMD cat /var/local/hello-world.txt

构建镜像

[centos@jiliguo docker]$ docker build -t myhelloworld:v1.0 .
Sending build context to Docker daemon  3.072kB
Step 1/3 : FROM ubuntu
 ---> 94e814e2efa8
Step 2/3 : COPY hello-world.txt /var/local/hello-world.txt
 ---> 53bb09dc5daa
Step 3/3 : CMD cat /var/local/hello-world.txt
 ---> Running in 14f24da48b05
Removing intermediate container 14f24da48b05
 ---> 45219c78619f
Successfully built 45219c78619f
Successfully tagged myhelloworld:v1.0
--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指令的网络模式

有时候并不会创建成功,可能是在某个环节出现了问题,这个时候我们可以一行一行命令调试,每次添加一行命令,构建一下镜像,就知道在哪一行错误了。

通过docker history可以查看构建镜像记录

[centos@jiliguo docker]$ docker history myhelloworld:v1.0
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
45219c78619f        22 minutes ago      /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "cat …   0B
53bb09dc5daa        22 minutes ago      /bin/sh -c #(nop) COPY file:8181b3ba47dd4294…   12B
94e814e2efa8        5 weeks ago         /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B
<missing>           5 weeks ago         /bin/sh -c mkdir -p /run/systemd && echo 'do…   7B
<missing>           5 weeks ago         /bin/sh -c rm -rf /var/lib/apt/lists/*          0B
<missing>           5 weeks ago         /bin/sh -c set -xe   && echo '#!/bin/sh' > /…   745B
<missing>           5 weeks ago         /bin/sh -c #(nop) ADD file:1d7cb45c4e196a6a8…   88.9MB 

1.3 dockerfile常见命令

FROM
指定 base 镜像。
MAINTAINER
设置镜像的作者,可以是任意字符串。
COPY
将文件从 build context 复制到镜像。
COPY 支持两种形式:
COPY src dest
ADD
与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。
ENV
设置环境变量,环境变量可被后面的指令使用
EXPOSE
指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。
VOLUME
将文件或目录声明为 volume。
WORKDIR
为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。
RUN
在容器中运行指定的命令。
CMD
容器启动时运行指定的命令。
ENTRYPOINT
设置容器启动时运行的命令
。
Dockerfile 中可以有多个 ENTRYPOINT/CMD 指令,但只有最后一个生效。

菜鸟系列docker——docker镜像下(5)的更多相关文章

  1. 菜鸟系列docker——docker镜像上(3)

    1. 镜像image 镜像和容器的关系就和安装包和程序的关系一样,有了镜像才可以启动容器,容器是镜像的一个运行实例. 1.1 镜像的结构 通过第二节仓库,可能很多看官已经查看到镜像是分层的,接下来将对 ...

  2. 菜鸟系列docker——docker镜像中(4)

    docker镜像命令 该章节主要介绍docker image相关命令实践操作,建议都一起跑一边 1. docker images 列举本机docker镜像 [centos@jiliguo docker ...

  3. Docker探索系列2之镜像打包与DockerFile

    preface docker基本入门以后,可以试试打包docker镜像与dockerfile了 docker镜像 docker hub仓库有2类仓库,用户仓库和顶层仓库,用户仓库由docker用户创建 ...

  4. centos7系统下搭建docker本地镜像仓库

    ## 准备工作 用到的工具, Xshell5, Xftp5, docker.io/registry:latest镜像 关于docker的安装和设置加速, 请参考这篇博文centos7系统下 docke ...

  5. SpringBoot系列: 制作Docker镜像的全过程

    本文主要参考了 https://segmentfault.com/a/1190000016449865 , 感谢作者的付出. 另外,  在本文中, 演示了Windows+Maven+Docker To ...

  6. Docker系列之Docker镜像(读书笔记)

    一.基本概念 Docker包括三个基本概念镜像.容器.仓库. Docker镜像:就是一个只读的模板.例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了Apache或其他应用程序.用 ...

  7. 使用alpine的docker镜像下 dind 的方式安装dotnet core 的一个非dockerfile的方法

    1. 下载dind的镜像 docker pull docker:dind 2. 执行该镜像 docker run -it --privileged --name some-docker -d dock ...

  8. windows7下docker配置镜像加速

    原文地址:https://blog.csdn.net/slibra_L/article/details/77505003 1,本文目的:windows7下docker配置镜像加速,下面是具体操作步骤: ...

  9. Docker在Centos下使用Dockerfile构建远程Tomcat和Jenkins镜像

    镜像构建准备环境原料 构建CentOS Docker tomcat镜像 Dockerfile文件内容: FROM centos:latest MAINTAINER boonya <boonya@ ...

随机推荐

  1. 小白的CTF学习之路4——内存

    明天要进行二模考试了,沉住气,加油,能过 内存是学C路上必不可少的一环,一定要非常认真的去学 内存的物理结构: ROM:只读内存——早期的手机 RAM:读写(数据断点既消) DRAM:经常更新 SRA ...

  2. 底图与蒙版的过渡效果transition

    我用2种方法写了底图与蒙版的过渡效果 方法一:用js方法 <!DOCTYPE html> <html> <head> <meta http-equiv=&qu ...

  3. windows和ubuntu下git commit提交后如何保存和退出,回到命令行

    问题一: windows下git commit后会进入vim界面,不知道怎么操作 解决办法: 1.输入小写字母i,此时进入编辑模式,可以输入你想输入的内容 2.按下esc键,此时退出编辑模式,输入英文 ...

  4. Spring——事务

    Spring事务 事务的ACID特性 原子性(Atomicity):在事务中的操作,要么都执行,要么都不执行! 一致性(Consistency):数据从一种状态,同时到达另一种状态. 持久性(Dura ...

  5. <笔记>字体文件的路径问题

    如果做过虚拟域名,不可以通过127.0.0.1来访问字体文件 改成通过虚拟域名访问,就没问题: 不过更建议使用相对路径

  6. Android开发者的Anko使用指南(二)之Dialogs

    在项目中使用Anko Dialogs dependencies { compile "org.jetbrains.anko:anko-commons:$anko_version" ...

  7. FPGA中分数分频器的实现代码

    module clkFracDiv( output reg clkout, input rstn, input refclk, :] fenzi, :] fenmu ); :] rstn_syn; : ...

  8. vue.js 系列教程

    Vuejs——(1)入门(单向绑定.双向绑定.列表渲染.响应函数) Vuejs——(2)Vue生命周期,数据,手动挂载,指令,过滤器 Vuejs——(3)计算属性,样式和类绑定 Vuejs——(4)v ...

  9. Asp.net Security框架(1)

    Security框架主要用于身份认证的,基本上所有Asp.net项目有意或者无意的都在使用的,框架的源码包含在Katana项目下. 最常见的使用方式或许就是SignIn来给客户端浏览器生成包含身份信息 ...

  10. 算法与数据结构(一) 线性表的顺序存储与链式存储(Swift版)

    温故而知新,在接下来的几篇博客中,将会系统的对数据结构的相关内容进行回顾并总结.数据结构乃编程的基础呢,还是要不时拿出来翻一翻回顾一下.当然数据结构相关博客中我们以Swift语言来实现.因为Swift ...