CentOS Linux release 7.2.1511

Docker version 17.03.1-ce

首先应该了解docker镜像的分层机制,这个网上文章很多,简单说就是对镜像的每次修改都是在原镜像基础上加了一层包装;

构建自己的docker镜像有两种方式;

一种是在启动容器后,直接对容器进行操作,然后commit,好处是方便直观,但会导致很多中间层,且不好追溯,所以不推荐这样用;

另一种是编辑dockerfile,然后通过docker build生成镜像,下面详细说说如何使用dockerfile构建一个带jdk的centos镜像;

先准备一个文件夹img,把需要的文件放到子文件夹resource中,这里还拿了一个rpm文件演示如何安装,如下:

img/
├── Dockerfile
└── resource
    ├── jdk1.7.0_65
    ├── nc-1.84-22.el6.x86_64.rpm

文件Dockerfile的内容如下:

FROM daocloud.io/centos:latest

COPY resource /usr/local

RUN cd /usr/local \
    && rpm -ivh nc-1.84-22.el6.x86_64.rpm \
&& yum install which -y \
&& rm -rf nc-1.84-22.el6.x86_64.rpm \
&& yum clean all ENV JAVA_HOME=/usr/local/jdk1.7.0_65/jre
ENV CLASSPATH=.:$JAVA_HOME/lib \
    PATH=$JAVA_HOME/bin:$PATH

FROM  必须位于第一行,表示基础镜像,这里为centos,若不需要任何基础环境就用scratch;

COPY  拷贝宿主机的资源到镜像,这里是将resource下所有东西拷贝到镜像的/usr/local/目录;

RUN    镜像中执行命令,这里安装了一个rpm包和yum安装which命令,然后进行了清理;

     这里把多个命令合并到一个RUN语句是为了减少层数;

ENV     设置镜像的环境变量,由于后面两个变量依赖JAVA_HOME,所以必须分到两个ENV语句了;

其他命令还有:ADD/CMD/ENTRYPOINT/VOLUME/ARG/EXPOSE/WORKDIR/USER/HEALTHCHECK/ONBUILD等;

下面构建镜像:

# cd img/
# docker build -t my/base .
# docker images
  REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
  my/base              latest              2cdd09a142e5        24 seconds ago      359MB
  daocloud.io/centos   latest              a8493f5f50ff        4 days ago          192MB

.   命令最后传入的是build的工作目录,这个工作目录是很重要的;

    工作目录里所有的文件会传输到docker服务端,而且dockfile中指定文件时(COPY那行的resource)必须是工作目录的相对路径;

所以,在img目录外面这样build也是一样的:

     docker build -t my/base img/

-t  指定镜像在仓库的名字;

-f  指定dockfile,因为我们这里用的默认名称Dockerfile,所以不用指定;

--network=host  build也是启动了一个镜像执行的,因为默认的bridge网络模式有网络损耗,所以如果build中包含较多外网访问,建议改为host:

          docker build --network=host -t my/base .

下面启动测试下这个镜像:

# docker run --name mb -dti my/base
c86b648c10174271e080f90e8d437a4ee2e25993003bdc68317477514349cb10
# docker attach mb
[root@c86b648c1017 /]# which java
  /usr/local/jdk1.7.0_65/jre/bin/java
[root@c86b648c1017 /]# java -version
    java version "1.7.0_65"
    Java(TM) SE Runtime Environment (build 1.7.0_65-b17)
    Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)

over

使用dockerfile构建自己的镜像的更多相关文章

  1. docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像

    docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像 一.docker通过dockerfile构建JDK最小镜像 1.1 下载JRE 1.2 解压JRE,删除相关不需要文件 ...

  2. Docker 使用 Dockerfile 构建自己的镜像

    可以使用Dockerfile的配置文件方式进行构建自己的镜像 下面利用docker构建一个Caddy web服务器 构建脚本 Dockerfile有自己的命令,下面使用了一些比较常用的命令,更多的Do ...

  3. Docker使用Dockerfile构建新的镜像

    构建镜像步骤; 1.创建Dockerfile文件,该文件是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明. vim Dockerfile //每一个指令都会在镜像上创建一个新 ...

  4. 使用dockerfile构建镜像(docker build)

    Docker buidl .  找出当前文件夹下的Docker build文件名的文件 Docker build -t  centos(镜像名) . 在当前目录下找centos的镜像文件 Docker ...

  5. 用Dockerfile构建docker image

    dockerfile是为快速构建docker image而设计的,当你使用docker build 命令的时候,docker 会读取当前目录下的命名为Dockerfile(首字母大写)的纯文本文件并执 ...

  6. 使用Docker构建jdk1.8镜像

    一.下载centos镜像 下载自己需要的版本TAG,详见: docker安装指定版本TAG的镜像 $ sudo docker pull centos:centos7 二.下载jdk1.8,并上传到/u ...

  7. 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像

    Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...

  8. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  9. 使用Dockerfile构建镜像

    Dockerfile是一个文本格式的配置文件,用户可以使用Dockerfile快速创建自定义的镜像.它类似shell脚本,由一行行命令组成,支持以#开头的注释行.一般而言,Dockerfile分为四部 ...

随机推荐

  1. [Guitar self-practising] 【吉他练习王-节奏练习】曲目1 基本扫弦节奏练习

    这本书来自吉他练习王-节奏练习, 大家可以自行到网上搜搜电子版看看. 扫弦练习: 将左手轻轻靠着琴弦, mute琴弦.右手拿上拨片, 节拍器60,左脚踏着节拍练习. note: 注意 “轻”(幅度轻, ...

  2. 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)

    案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...

  3. [pat]A1072 Gas Station

    这道题的结点编号是字符串类型,处理的过程很有意思,用getID将house和GasStation进行区分 #include<bits/stdc++.h> using namespace s ...

  4. python os.path模块常用方法详解

    os.path模块主要用于文件的属性获取,在编程中经常用到,以下是该模块的几种常用方法.更多的方法可以去查看官方文档:http://docs.python.org/library/os.path.ht ...

  5. cocos2dx 3.13 在Mac平台下配置安卓环境变量

    终端下输入:vi .bash_profile 编辑环境变量: export COCOS_CONSOLE_ROOT=/Users/jiazedong/Cocos2d-x/cocos2d-x-3.2/co ...

  6. ASP.NET Core 启动流程图

    简洁描述: 一   WebHostBuilder.Build() =>1注入公共的实例 2创建WebHost实例 3注入自定义实例 4创建IServer 5添加中间件(_components集合 ...

  7. 3.十分钟搞定Vue搭建

    Vue推荐开发环境 Node.js 6.2.0.npm 3.8.9.webpack 1.13.vue-cli 2.5.1.webstrom2016 现在开始安装环境 安装nodejs 可以在终端里下载 ...

  8. gitlab8.2->8.16->8.17->9.0升级

    注:不要跨过8.16升级至8.17,这样做升级过程会报错 ###################################8.2升级至8.16########################## ...

  9. centos7上安装nodejs

    1. 确保安装编译工具 $ yum -y install gcc gcc-c++ 2. 获取官网源码 : $ wget https://nodejs.org/dist/v9.9.0/node-v9.9 ...

  10. 笔记 : win8系统中的VM虚拟机的Ubuntu搭建samba服务

    1. 环境准备 (此处使用root超级管理员帐户,执行命令时不用加sudo, 普通帐户需要前面加sudo):  (1)安装好Ubutun虚拟系统后,Ubuntu 的软件源配置文件是 /etc/apt/ ...