共计 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 标识 . |
当执行一步步执行完成后,出现 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 访问即可。
更多 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