阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用Dockerfile构建自己的Docker镜像

266次阅读
没有评论

共计 4851 个字符,预计需要花费 13 分钟才能阅读完成。

一、背景

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

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

本次,我会介绍 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 标识 .

使用 Dockerfile 构建自己的 Docker 镜像

使用 Dockerfile 构建自己的 Docker 镜像

当执行一步步执行完成后,出现 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 最终目录内容

 使用 Dockerfile 构建自己的 Docker 镜像

 

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 安装应用(CentOS 6.5_x64) http://www.linuxidc.com/Linux/2014-07/104595.htm 

Ubuntu 16.04 服务器上配置使用 Docker  http://www.linuxidc.com/Linux/2017-06/145176.htm 

Ubuntu 15.04 下安装 Docker  http://www.linuxidc.com/Linux/2015-07/120444.htm 

Docker 安装实例 http://www.linuxidc.com/Linux/2017-04/142666.htm 

Docker 创建基础镜像  http://www.linuxidc.com/Linux/2017-05/144112.htm 

在 Ubuntu 15.04 上如何安装 Docker 及基本用法 http://www.linuxidc.com/Linux/2015-09/122885.htm 

Ubuntu 16.04 上 Docker 使用手记 http://www.linuxidc.com/Linux/2016-12/138490.htm 

使用 Docker 分分钟启动常用应用  http://www.linuxidc.com/Linux/2017-04/142649.htm 

Ubuntu 16.04 下 Docker 修改配置文件不生效解决办法  http://www.linuxidc.com/Linux/2017-05/143862.htm 

Docker 的详细介绍:请点这里
Docker 的下载地址:请点这里

 本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-11/148160.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4851字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中