一、背景

  一直以来的开发流程都是先从Docker Hub中获取到基础镜像,之后在这个镜像的基础上做开发,以满足一定的需求或者提供某种服务,并由此产生新的镜像,然后就可以push到Docker Hub中。

  那么究竟如何在制作自己的的镜像的?

  本次,我会介绍Dockerfile的基本知识语法,带大家构建一个自己的镜像。

二、Dockerfile简介

2.1 先看一个简单例子

Dockerfile的注释都是以“#”开始的,每一行都是一个指令,一般情况下,Dockerfile由4个部分组成:基础镜像信息,维护者信息,镜像操作指令和容器启动指令。例如:

# Version 0.1

# 基础镜像

FROM ubuntu:latest

# 维护者信息

MAINTAINER zhangyongli

# 镜像操作命令

RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

# 容器启动命令

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

注意:如果是使用Dockerfile来构建镜像,Dockerfile第一条有效指令(注释除外),必须是基础镜像指令,维护者信息紧随其后。下面具体介绍下其指令。

2.2 Dockerfile指令

2.2.1 FROM指令

指定即将制作的镜像,继承哪位镜像。

格式:FROM <image> 或 FROM <image>:<tag>

2.2.2 MAINTAINER指令

指定维护者信息

格式:MAINTAINER <name>

2.2.3 RUN指令

执行shell命令的,当解析Dockerfile时,遇到RUN指令,将自动翻译为/bin/sh -c “xxxx”

格式:RUN <command>

2.3.4 CMD指令

指启动容器时执行的命令,每个Dockerfile只能有一条CMD指令,如果指定了多条CMD,只有最后一条会被执行。

格式:1. CMD command param1 param2

2. CMD [“executable”,”param1”,”param2”]

3. CMD [“param1”,”param2”]

(特别说明,如果用户启动容器时制订了运行的命令,则会覆盖掉CMD指定的指令)

2.3.5 ENV指令

指定一个环境变量,会被后续的RUN指令使用,并在容器运行时保持。

ENV <key> <value>

2.3.6 ADD指令

复制指定<src>到容器中的<dest>中,可以是Dockerfile所在目录的一个相对路径,也可以是一个URL,还可以是一个tar文件(自动解压为目录)

ADD <src> <dest>

2.3.7 COPY指令

复制本地主机<src>到容器中的<dest>中,当使用本地目录为源目录时,推荐使用

COPY <src> <dest>

三、Docker镜像制作

3.1 编写Dockerfile文件

新建一个Dockerfile文件,里面填写上之前简单例子所包含内容

vi Dockerfile

文件内容如下:

# Version 0.1

# 基础镜像

FROM ubuntu:latest

# 维护者信息

MAINTAINER zhangyongli

# 镜像操作命令

RUN apt-get -yqq update && apt-get install -yqq apache2 && apt-get clean

# 容器启动命令

CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

3.2 制作镜像

进入Dockerfile目录,执行

docker build -t 镜像名称:tag标识 .

当执行一步步执行完成后,出现Successfully built 时,则表示创建镜像成功。

3.3 验证

输入命令:

docker run -d -p 80:80 --name webtest myiserver:v1

然后浏览器访问80端口 即可看到apache2 默认页面。

四、进阶

4.1 准备工作

将iServer 811安装包,放到/opt/docker_images下。

4.2 使用国内源

当前目录下,

vi sources.list_aliyun

添加以下内容:

deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted

deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted

deb http://mirrors.aliyun.com/ubuntu/ trusty universe

deb-src http://mirrors.aliyun.com/ubuntu/ trusty universe

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates universe

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates universe

deb http://mirrors.aliyun.com/ubuntu/ trusty multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates multiverse

deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu trusty-security main restricted

deb-src http://mirrors.aliyun.com/ubuntu trusty-security main restricted

deb http://mirrors.aliyun.com/ubuntu trusty-security universe

deb-src http://mirrors.aliyun.com/ubuntu trusty-security universe

deb http://mirrors.aliyun.com/ubuntu trusty-security multiverse

deb-src http://mirrors.aliyun.com/ubuntu trusty-security multiverse

# deb cdrom:[Ubuntu-Server 14.04 LTS _Trusty Tahr_ - Release amd64 (20140416.2)]/ trusty main restricted

#deb cdrom:[Ubuntu-Server 14.04 LTS _Trusty Tahr_ - Release amd64 (20140416.2)]/ trusty main restricted

4.3 编写shell脚本(配置许可)

建议提前先解压一个tar包,用于确认目录和名称,

当前目录下执行

vi run.sh

添加以下内容:

# 初始化许可驱动

cd /opt/supermap_iserver_8.1.1a_linux64_deploy/support/SuperMap_License/Support/aksusbd-2.4.1-i386

./dunst

./dinst

echo

# 运行iServer

cd /opt/supermap_iserver_8.1.1a_linux64_deploy/bin

./catalina.sh run

4.4编写iServer Dockerfile

当前目录下执行

vi Dockerfile

添加以下内容:

FROM ubuntu:14.04

MAINTAINER zhangyongli

ENV ISERVER_VERSION 8.1.1

ENV iServer true

# 国内的Ubuntu镜像源

ADD sources.list_aliyun /etc/apt/sources.list

# 安装iServer产品包

ADD supermap_iserver_8.1.1a_linux64_deploy.tar.gz /opt/

# 安装依赖库

RUN cd /opt/supermap_iserver_8.1.1a_linux64_deploy/support && \

./dependencies_check_and_install.sh install -yu && \

echo

RUN apt-get update

RUN cd /opt/supermap_iserver_8.1.1a_linux64_deploy/support/SuperMap_License/Support && \

tar xvf aksusbd-2.4.1-i386.tar && \

echo

ADD run.sh /opt/

RUN chmod 777 /opt/run.sh

# Container启动时立即运行iServer

CMD /opt/run.sh

4.5 最终目录内容

4.6 制作镜像

docker build -t supermap/iserver:c811a

4.7 创建容器

docker run --name iserver1 -p 8090:8090 -d supermap/iserver:c811a

然后使用 IP:8090访问即可。

使用Dockerfile制作自己的Docker镜像的更多相关文章

  1. 制作自己的docker镜像

    制作自己的Docker镜像主要有如下两种方式: 1.使用docker commit 命令来创建镜像 通过docker run命令启动容器 修改docker镜像内容 docker commit提交修改的 ...

  2. 制作OpenOffice的Docker镜像并添加中文字体解决乱码问题

    官网下载openoffice http://www.openoffice.org/download/index.html 本文使用的是Docker官方发布的CentOS7镜像作为基础镜像.镜像的获取方 ...

  3. 用dockerfile创建jmeter的docker镜像

    网上多是创建docker镜像是从jmeter官方下载jmeter的tgz包 今天我们用本地已经下载好的tgz包. 以下是dockerfile FROM java:8 ENV http_proxy &q ...

  4. 使用debootstrap制作debian-jessie系统docker镜像

    先看一下Docker官网提示:In general, you'll want to start with a working machine that is running the distribut ...

  5. 使用dockerfile 构建springboot 的docker镜像

    1 新建一个 springboot 项目,并将其打包成 jar 文件.生成demo1.jar 文件 请参考 使用springBoot搭建REATFul风格的web demo 2 编写 dockerfi ...

  6. 制作java的docker镜像

    Dockerfile如下: FROM ubuntu:16.04 MAINTAINER tanyiqu ADD jdk-8u231-linux-x64.tar.gz /usr/local/ ENV JA ...

  7. Docker、Dockerfile、Docker镜像、容器这些都是什么鸟?

    老生常谈,再再再……普及一下: Docker:最早是dotCloud公司出品的一套容器管理工具,但后来Docker慢慢火起来了,连公司名字都从dotCloud改成Docker. Dockerfile: ...

  8. 基于vue+springboot+docker网站搭建【七】制作后端spring-boot的docker镜像部署

    制作spring-boot的docker镜像并部署 一.下载后端项目:https://github.com/macrozheng/mall 二.修改mall-admin项目的配置文件 修改applic ...

  9. 简单docker镜像修改方式

    • 创建Dockerfile,文件内容如下: FROM nps:v1.0.1 ENTRYPOINT ["/usr/bin/init.sh"] • 启动基础镜像:docker run ...

随机推荐

  1. Maven 搭建SpringMvc+Spring+Mybatis详细记录

    总觉得,看比人写的总是那么好,每次搭建框架时都会找博客,找教程来跟着一步一步走,虽然很快搭建成功了,但是经常情况是我并不知道我干了什么,也不记得具体步骤,到底为什么要这么做,今天我详细记录了一下自己搭 ...

  2. Memcached【第一篇】安装

    第一步:准备 1. 安装包 memcached-1.4.35.tar.gz 2. 安装 libevent 1)简介 Libevent 是一个异步事件处理软件函式库,以 BSD 许可证释出.Memcac ...

  3. 多线程爬坑之路--并发,并行,synchonrized同步的用法

    一.多线程的并发与并行: 并发:多个线程同时都处在运行中的状态.线程之间相互干扰,存在竞争,(CPU,缓冲区),每个线程轮流使用CPU,当一个线程占有CPU时,其他线程处于挂起状态,各线程断续推进. ...

  4. JS入门(三)

    数据的类型转换: 之前提到过,js中数据类型分两种, 基本数据类型string  number   boolean  undefined  null 复杂数据类型 对象   Date   Array ...

  5. HTML初学者常用标签及属性

    1.HTML5头部结构   [DOCTYPE html] 声明文档类型为HTML5文件. 文档声明在HTML5文档必不可少,且必须放在文档的第一行.   [meta标签] 1-charset属性:单独 ...

  6. 1599: [Usaco2008 Oct]笨重的石子

    1599: [Usaco2008 Oct]笨重的石子 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 795  Solved: 543[Submit][ ...

  7. JavaWeb之Servlet总结

    今天上班居然迟到了,昨天失眠了,看完吐槽大会实在不知道做些什么,刚好朋友给我发了两个JavaWeb的练习项目,自己就又研究了下,三四点才睡,可能周日白天睡的太多了,早上醒来已经九点多了,立马刷牙洗脸头 ...

  8. .NET中可空值类型实现原理

    为了让.Net中的值类型可以赋值为null,微软特地添加了Nullable<T>类型,也可简写为T?.但是Nullable<T>自身是结构体,也是值类型,那么它是如何实现将nu ...

  9. 【转】SQL Server海量数据库的索引、查询优化及分页算法

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  10. HTML学习笔记汇总

    笔记几乎涵盖了日常开发中全部的知识点以及相关注意事项 想要学习网页制作的初学者可以通过本篇笔记初步掌握HTML的使用,也可以将该笔记作为查阅资料查看 HTML简单结构 <html> < ...