使用Dockerfile制作自己的Docker镜像
一、背景
一直以来的开发流程都是先从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镜像的更多相关文章
- 制作自己的docker镜像
制作自己的Docker镜像主要有如下两种方式: 1.使用docker commit 命令来创建镜像 通过docker run命令启动容器 修改docker镜像内容 docker commit提交修改的 ...
- 制作OpenOffice的Docker镜像并添加中文字体解决乱码问题
官网下载openoffice http://www.openoffice.org/download/index.html 本文使用的是Docker官方发布的CentOS7镜像作为基础镜像.镜像的获取方 ...
- 用dockerfile创建jmeter的docker镜像
网上多是创建docker镜像是从jmeter官方下载jmeter的tgz包 今天我们用本地已经下载好的tgz包. 以下是dockerfile FROM java:8 ENV http_proxy &q ...
- 使用debootstrap制作debian-jessie系统docker镜像
先看一下Docker官网提示:In general, you'll want to start with a working machine that is running the distribut ...
- 使用dockerfile 构建springboot 的docker镜像
1 新建一个 springboot 项目,并将其打包成 jar 文件.生成demo1.jar 文件 请参考 使用springBoot搭建REATFul风格的web demo 2 编写 dockerfi ...
- 制作java的docker镜像
Dockerfile如下: FROM ubuntu:16.04 MAINTAINER tanyiqu ADD jdk-8u231-linux-x64.tar.gz /usr/local/ ENV JA ...
- Docker、Dockerfile、Docker镜像、容器这些都是什么鸟?
老生常谈,再再再……普及一下: Docker:最早是dotCloud公司出品的一套容器管理工具,但后来Docker慢慢火起来了,连公司名字都从dotCloud改成Docker. Dockerfile: ...
- 基于vue+springboot+docker网站搭建【七】制作后端spring-boot的docker镜像部署
制作spring-boot的docker镜像并部署 一.下载后端项目:https://github.com/macrozheng/mall 二.修改mall-admin项目的配置文件 修改applic ...
- 简单docker镜像修改方式
• 创建Dockerfile,文件内容如下: FROM nps:v1.0.1 ENTRYPOINT ["/usr/bin/init.sh"] • 启动基础镜像:docker run ...
随机推荐
- 警惕一大波银行类木马正在靠近,新型BankBot木马解析
背景 来自安全公司Dr.Web的研究人员说,最近一个未命名的Android银行木马源代码在地下黑客论坛遭到了泄露.就在近期,阿里聚安全检测到大量新型BankBot家族木马,木马伪装成Good Weat ...
- 强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning)
强化学习读书笔记 - 06~07 - 时序差分学习(Temporal-Difference Learning) 学习笔记: Reinforcement Learning: An Introductio ...
- 如何更新 OpenStack 组件?- 每天5分钟玩转 OpenStack(161)
这是 OpenStack 实施经验分享系列的第 11 篇. 本节教大家更新 OpenStack 组件的方法.请注意,是更新(Update)而不是升级(Upgrade).更新是给组件打补丁,版本不变:而 ...
- ArrayList源码剖析
ArrayList简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线 ...
- nodejs第二天之Buffer类
2.1一个更好的操作二进制数据的类,我们在操作文件或者网络数据的时候,其实操作就是二进制数据,Node为我们提供了一个更加方便去操作这种数据流的类Buffer,它是一个全局的类. 2.2三种调用方式 ...
- 九度OJ题目1076:N的阶乘 (java)运用BigInteger的例子。
题目描述: 输入一个正整数N,输出N的阶乘. 输入: 正整数N(0<=N<=1000) 输出: 输入可能包括多组数据,对于每一组输入数据,输出N的阶乘 样例输入: 4 5 15 样例输出: ...
- java-信息安全(七)-基于非对称加密,对称加密等理解HTTPS
概述 java-信息安全(一)-BASE64,MD5,SHA,HMAC java-信息安全(二)-对称加密算法DES,3DES,AES,Blowfish,RC2,RC4 java-信息安全(四)-数据 ...
- Windows定时计划执行Python
先看下定时执行的py文件 #coding:gbk from selenium import webdriver import time,os driver = webdriver.PhantomJS( ...
- 消息队列-ActiveMQ
1 业务需求描述 举例描述: 再警情通报的业务时通过发送消息界面可以选择 警情联络,和船情通报两种消息 发送方式可分为 一对一发送:部门对部门.个人对个人 一对多发送:部门对多部门.个人对多人 2 功 ...
- [笔记]LibSVM源码剖析(java版)
之前学习了SVM的原理(见http://www.cnblogs.com/bentuwuying/p/6444249.html),以及SMO算法的理论基础(见http://www.cnblogs.com ...