Dockerfile镜像的制作


如果学习Docker,那么制作镜像这一步肯定不能少的,别人给你的是环境,而你自己做的才是你最终需要的东西,接下来就记录一下如何制作一个满足自己的镜像,我们使用docker一般就是部署我们的应用,那么我就制作一个镜像来发布我们的应用,制作方式我们就选择Dockerfile的方式

Dockerfile:

docker其实就像是一个脚本文件,或者你可以直接把他看成一个脚本或者就是看成一条条命令的集合,在Dockerfile文件中我们一般分为四个部分:基础镜像、创建者信息(可省略)、制作镜像过程(操作镜像指令)、启动容器的命令

接下来我们先了解一下这四部分分别是什么?

准备:获取基础镜像

我们可以从镜像仓库中获取适合我们的基础镜像使用docker search <镜像名>查询镜像,使用docker pull <镜像名>获取,如:我要获取一个jdk8的镜像那么我们

#查询镜像仓库中jdk8相关的镜像
docker search java8
#获取名字是corvis/java8的镜像
docker pull corvis/java8

如下图:这个镜像我已经下载过了所以显示的已经存在

全部下载完成之后我们可以查一下我们的本地会有一个名字是corvis/java8的镜像

#查询本地镜像
docker images

到这里我们的基础镜像已经获取到了,我们把创建的Dockerfile文件放到一个单独的目录下,并把我们的项目打好的包也放在该目录下,接下里我们开始写我们的Dockerfile文件

制作的步骤

  1. 指定基础镜像

    #指定基础镜像(我们所有的操作都是在这个镜像的基础上做的)
    FROM corvis/java8
  2. 写入创建者信息

    MAINTAINER SunArmy
  3. 把我们的项目copy到镜像中,并暴露端口,这里我直接用springBoot写了一个空的项目打包test.jar,端口开的80

    #从本地copy到镜像的/usr/local目录下,使用ADD和COPY都可以
    ADD test.jar /usr/local/
    #暴露项目端口到宿主机

EXPOSE 80


4. 启动容器我们需要执行的命令(启动项目的命令)

使用CMD和ENTRYPOINT都可以

CMD ["java","-jar","/usr/local/test.jar"]

![](https://img2018.cnblogs.com/blog/1470032/201906/1470032-20190620195709987-889940204.png)

~~~python
FROM corvis/java8
MAINTAINER SunArmy
COPY test.jar /usr/local/
EXPOSE 80
CMD ["java","-jar","/usr/local/test.jar"]
  1. 我们已经写好了Dockerfile文件那么我们直接在当前目录下执行命令来生成镜像

    #根据Dockerfile文件制作镜像
    docker build -t test:1.0 .
    #查看本地镜像
    docker images

至此,我们的镜像已经做好了

Dockerfile常用指令,语法

1、FROM <镜像名image>:<版本号tag>
一般是Dockerfile的第一行,指定基础镜像 2、MAINTAINET <创建者信息>
指明该镜像的创建者信息 3、RUN <命令>
容器中需要执行的命令,如:在容器创建之后需要在根目录创建一个logs目录
RUN mkdir /logs 4、COPY <本地文件> <容器路径>
复制本地文件到镜像中,本地路径是以Dockkerfile所在目录为根目录 如:把test.jar复制到/usr/local目录
COPY test.jar /usr/local 5、ADD <本地文件> <容器路径>
复制本地文件到镜像中,本地路径是以Dockkerfile所在目录为根目录,区别与COPY的可以从URL复制,可以直接解压.tar.gz并把解压之后的文件复制到镜像
如:把test.jar复制到/usr/local目录
ADD test.jar /usr/local
从URL复制到/usr/local
ADD URL /usr/local
解压test.tar.gz复制到镜像/usr/local
ADD test.tar.gz /usr/local 6、ENV <key> <value>
设置环境变量,可以直接用的环境变量有如下
$HOME 用户主目录
$HOMENAME 容器主机名
$PATH 容器环境变量(这个会经常用到)
如:我们要把/usr/bin添加到环境变量中
ENV PATH $PATH:/usr/bin 7、EXPOSE [<port>...]
Docker服务端暴露端口,如:我们镜像中有8080和8081两个端口需要暴露出去
EXPOSE 8080 8081 8、CMD ["",""]
括号中的是需要执行的命令
指定启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条指令,则最后一条执行(如果启动的时候指定了命令会被启动时指定的命令覆盖) 9、ENTRYPOINT ["",""]
和CMD指令一样,唯一不同的是即使启动的时候指定了命令,该命令也不会被覆盖 10、VOLUME ["/data"]
作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。 11、USER username
指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令 之前可以使用RUN命令创建需要的用户。 12、WORKDIR /path
为后续的RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个WORKDIR指令,若后续指令用得是相对路径,则会基 于之前的命令指定路径。 13.ONBUILD [INSTRUCTION]
该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令。

以上就是写Dockerfile文件所需要的基本指指令

写好之后我们切入Dockerfile目录下执行 docker build 即可制成我们自己的镜像,如:使用当前目录的Dockerfile文件创建镜像并设置标签,-t参数设置标签

docker build -t test:1.0 .

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

Build an image from a Dockerfile

Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
--build-arg list Set build-time variables
--cache-from strings Images to consider as cache sources
--cgroup-parent string Optional parent cgroup for the container
--compress Compress the build context using gzip
--cpu-period int Limit the CPU CFS (Completely Fair
Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair
Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is
'PATH/Dockerfile')
--force-rm Always remove intermediate containers
--iidfile string Write the image ID to the file
--isolation string Container isolation technology
--label list Set metadata for an image
-m, --memory bytes Memory limit
--memory-swap bytes Swap limit equal to memory plus swap:
'-1' to enable unlimited swap
--network string Set the networking mode for the RUN
instructions during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of
the image
-q, --quiet Suppress the build output and print image
ID on success
--rm Remove intermediate containers after a
successful build (default true)
--security-opt strings Security options
--shm-size bytes Size of /dev/shm
-t, --tag list Name and optionally a tag in the
'name:tag' format
--target string Set the target build stage to build.
--ulimit ulimit Ulimit options (default [])

把镜像保存到本地

docker save <保存到本地的文件> <镜像>

如:把test:1.0这个镜像保存到本地

docker save -o test_1.0.tar test:1.0

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

Build an image from a Dockerfile

Options:
--add-host list Add a custom host-to-IP mapping (host:ip)
--build-arg list Set build-time variables
--cache-from strings Images to consider as cache sources
--cgroup-parent string Optional parent cgroup for the container
--compress Compress the build context using gzip
--cpu-period int Limit the CPU CFS (Completely Fair
Scheduler) period
--cpu-quota int Limit the CPU CFS (Completely Fair
Scheduler) quota
-c, --cpu-shares int CPU shares (relative weight)
--cpuset-cpus string CPUs in which to allow execution (0-3, 0,1)
--cpuset-mems string MEMs in which to allow execution (0-3, 0,1)
--disable-content-trust Skip image verification (default true)
-f, --file string Name of the Dockerfile (Default is
'PATH/Dockerfile')
--force-rm Always remove intermediate containers
--iidfile string Write the image ID to the file
--isolation string Container isolation technology
--label list Set metadata for an image
-m, --memory bytes Memory limit
--memory-swap bytes Swap limit equal to memory plus swap:
'-1' to enable unlimited swap
--network string Set the networking mode for the RUN
instructions during build (default "default")
--no-cache Do not use cache when building the image
--pull Always attempt to pull a newer version of
the image
-q, --quiet Suppress the build output and print image
ID on success
--rm Remove intermediate containers after a
successful build (default true)
--security-opt strings Security options
--shm-size bytes Size of /dev/shm
-t, --tag list Name and optionally a tag in the
'name:tag' format
--target string Set the target build stage to build.
--ulimit ulimit Ulimit options (default []) C:\Users\SunArmy\Desktop\demo>docker save --help Usage: docker save [OPTIONS] IMAGE [IMAGE...] Save one or more images to a tar archive (streamed to STDOUT by default) Options:
-o, --output string Write to a file, instead of STDOUT

Dockerfile镜像的制作的更多相关文章

  1. Docker 镜像的制作和使用

    镜像 Layer(层) 镜像里的内容是按「层」来组织的,「层」可以复用,一个完整的镜像也可以看做是一个「层」.多个「层」叠加在一起就形成了一个新的镜像,这个镜像也可以作为别的镜像的基础「层」进行更加复 ...

  2. NGINX镜像的制作

    NGINX镜像的制作 # mkdir -pv /opt/nginx # cd /opt/nginx/ # cat index.html www.dexter.com   编写Dockerfile # ...

  3. 基于url-to-pdf-api构建docker镜像,制作一个网页另存服务

    基于url-to-pdf-api构建docker镜像,制作一个网页另存服务 业务背景: 需要根据一个url路径打印这个网页的内容 解决方案: 1.使用wkhtml2pdf 2.使用puppeteer ...

  4. 封装win7系统、制作win7GHO镜像、制作一个自定义的镜像文件具体步骤、制作Win10镜像gho

    作者:导演你让灰太狼吃只羊 来源:CSDN 原文:https://blog.csdn.net/qq_35057426/article/details/83015516 版权声明:本文为博主原创文章,转 ...

  5. dockerfile镜像设置中文

    一.dockerfile镜像设置中文 centos镜像默认不支持中文,把下面的内容加到dockerfile即可 # 修改时区 RUN rm -rf /etc/localtime && ...

  6. Dockerfile镜像实例

    Dockerfile镜像实例 目录 Dockerfile镜像实例 一.构建SSH镜像 1. 建立工作目录 2. 生成镜像 3. 启动容器并修改root密码 二.systemctl镜像 1. 建立工作目 ...

  7. 7.云原生之Docker容器Dockerfile镜像构建浅析与实践

    转载自:https://www.bilibili.com/read/cv15220707/?from=readlist Dockerfile 镜像构建浅析与实践 描述:Dockerfile是一个文本格 ...

  8. 基于Dockerfile镜像制作的基本操作

    一.使用Dockerfile制作镜像 前面的博客中已经介绍了如何基于容器制作镜像,此方法的原理是使用一个正在运行的容器,根据生产所需进行配置更改等操作后,使其满足生产环境,再将这个容器打包制作为镜像, ...

  9. Dockerfile镜像制作时间同步

    1.问题描述 宿主机与容器时间相差8小时 2.原因 宿主机采用了CST时区,CST应该是指(China Shanghai Time,东八区时间)容器采用了UTC时区,UTC应该是指(Coordinat ...

随机推荐

  1. MyBatis 的基本要素—核心对象

    MyBatis 三个基本要素   ➢ 核心接口和类 ➢ MyBatis 核心配置文件(mybatis-config.xml) ➢ SQL 映射文件(mapper.xml) MyBatis 核心接口和类 ...

  2. Linux命令学习(3): zcat 直接查看压缩文件

    版权声明:本文为博主原创文章,未经允许不得转载. zcat 用途:在不解压文件的情况下,直接将文件内容输出到标准输出.(原压缩文件不做任何更改) 格式:zcat [-n] [-V] [FILE] 参数 ...

  3. CCF201709-1 打酱油 java(100分)

    试题编号: 201709-1 试题名称: 打酱油 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明带着N元钱去买酱油.酱油10块钱一瓶,商家进行促销,每买3瓶送1瓶,或者每 ...

  4. python+pyqt5实现24点小游戏

    本文实例为大家分享了python实现24点游戏的具体代码,供大家参考,具体内容如下 描述:一副牌中A.J.Q.K可以当成是1.11.12.13.任意抽取4张牌,用加.减.乘.除(可加括号)把牌面上的数 ...

  5. hihocoder 1032 最长回文子串(Manacher)

    传送门 #include<queue> #include<cmath> #include<cstdio> #include<cstring> #incl ...

  6. 【Codeforces 490C】Hacking Cypher

    [链接] 我是链接,点我呀:) [题意] 让你把一个字符串分成左右两个部分 形成两个正数 使得这两个正数一个能被a整除,一个能被b整除 找到任意一个解就可以 [题解] 枚举分割的断点i 枚举的时候用同 ...

  7. javamail中的 javax.mail.AuthenticationFailedException: failed to connect的解决

    在163邮箱中开启POP3和SMTP服务,并设置客户端授权密码,用该密码登录.而不是用户的密码.

  8. codeforces gym 100357 H (DP 高精度)

    题目大意 有r*s张扑克牌,数字从1到 r,每种数字有s种颜色. 询问对于所有随机的d张牌,能选出c张组成顺子的概率和组成同花的概率. 解题分析 对于组成顺子的概率,令dp[i][j][k]表示一共选 ...

  9. Windows 文件夹修改为exe的原理和解决办法

    有关文件夹后缀改为exe的病毒 该病毒之前出现过,不过没多长时间便消失了,最新的这个应该是变种,下面解决一下该病毒在移动存储设备中的问题: 该病毒并不具备能够将文件夹改为文件的能力,只是将原有文件夹全 ...

  10. iOS常用的正则表达式总结

    /* 正则表达式说明: . 匹配除换行符以外的任意字符 \\w 匹配字母或数字或下划线或汉字 \\s 匹配任意的空白符 \\d 匹配数字 \\b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字 ...