可以使用Dockerfile的配置文件方式进行构建自己的镜像

下面利用docker构建一个Caddy web服务器

构建脚本

Dockerfile有自己的命令,下面使用了一些比较常用的命令,更多的Dockerfile命令,可查看以下博文:

Dockerfile命令详解(超全版本)

Dockerfile文件内容

# 基础镜像Ubuntu
FROM ubuntu:latest
# 镜像作者信息
MAINTAINER zhoutao "zhoutao825638@vip.qq.com"
#RUN 命令执行脚本
RUN mkdir -p /opt/soft/caddy
RUN mkdir -p /usr/www/html
RUN echo "<h1>Hello,World!</h1>" >> /usr/www/html/index.html
# COPY 执行本地拷贝命令
COPY ./caddy /opt/soft/caddy/
COPY ./Caddyfile /opt/soft/caddy/
# 启动执行命令
CMD ["/opt/soft/caddy/caddy", "-conf","/opt/soft/caddy/Caddyfile"]
# 暴露端口
EXPOSE 80

Caddyfile文件内容

其中Caddyfile配置文件内容如下:

:80 {
gzip
root /usr/www/html
}

caddy文件可从caddy官方下载

构建命令

首先确认下文件结构

$ tree
.
├── caddy
├── Caddyfile
└── Dockerfile
  • caddy 是Caddy的运行文件
  • Caddyfile 是caddy的配置文件
  • Dockerfile是构建docker的配置文件

然后开始构建image(注意切换到和Dockerfile同级目录)

docker build -t caddy_image:0.1 .
  • 构建结果

第一次构建需要拉取ubuntu基础镜像,然后才开始构建

Sending build context to Docker daemon  20.12MB
Step 1/9 : FROM ubuntu:latest
latest: Pulling from library/ubuntu
124c757242f8: Pull complete
9d866f8bde2a: Pull complete
fa3f2f277e67: Pull complete
398d32b153e8: Pull complete
afde35469481: Pull complete
Digest: sha256:de774a3145f7ca4f0bd144c7d4ffb2931e06634f11529653b23eba85aef8e378
Status: Downloaded newer image for ubuntu:latest
---> cd6d8154f1e1
Step 2/9 : MAINTAINER zhoutao "zhoutao825638@vip.qq.com"
---> Running in 976ccb6d9fd0
Removing intermediate container 976ccb6d9fd0
---> c41619ec0682
Step 3/9 : RUN mkdir -p /opt/soft/caddy
---> Running in fea53d5e3b98
Removing intermediate container fea53d5e3b98
---> 2b84b490ac72
Step 4/9 : RUN mkdir -p /usr/www/html
---> Running in 2b6d3ef30fb2
Removing intermediate container 2b6d3ef30fb2
---> eef4e4e0584a
Step 5/9 : RUN echo "<h1>Hello,World!</h1>" >> /usr/www/html/index.html
---> Running in 9784c9f94636
Removing intermediate container 9784c9f94636
---> e2b8568e77c5
Step 6/9 : COPY ./caddy /opt/soft/caddy/
---> 7f5e675846bb
Step 7/9 : COPY ./Caddyfile /opt/soft/caddy/
---> e8fbed1ae131
Step 8/9 : CMD ["/opt/soft/caddy/caddy", "-conf","/opt/soft/caddy/Caddyfile"]
---> Running in a71772181530
Removing intermediate container a71772181530
---> 66b878cddbf6
Step 9/9 : EXPOSE 80
---> Running in 39741df7c755
Removing intermediate container 39741df7c755
---> 51c30425c00e
Successfully built 51c30425c00e
Successfully tagged caddy_image:0.1

运行容器

# docker运行容器
$ docker run -p 9090:80 -d --name caddy_9090 caddy_image:0.1
575c7966b1021de5fe95212cb09723e3256ad1153a8cd04a836ab171d40860ed # 查看docker所有的容器
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
575c7966b102 caddy_image:0.1 "/opt/soft/caddy/cad…" 5 seconds ago Up 4 seconds 0.0.0.0:9090->80/tcp caddy_9090

访问测试

可以看到,当我访问80端口的时候,他会到/usr/www/html目录下寻找数据,而index.html正是我们在Dockerfile文件中的RUN命令写入的RUN echo "<h1>Hello,World!</h1>" >> /usr/www/html/index.html

$ curl -X GET http://localhost:9090/index.html
<h1>Hello,World!</h1>

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

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

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

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

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

  3. docker:Dockerfile构建LNMP平台

    docker:Dockerfile构建LNMP平台   1.dockerfile介绍  Dockerfile是Docker用来构建镜像的文本文件,包含自定义的指令和格式.可以通过docker buil ...

  4. Docker 使用Dockerfile构建redis镜像

    Dockerfile实现: FROM centos: MAINTAINER hongdada "hongdaqi159505@gmail.com" WORKDIR /home RU ...

  5. Docker 使用Dockerfile构建tomcat镜像

    Dockerfile概念: 镜像的定制实际上就是定制每一层所添加的配置.文件.如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像,那么之前提及的无法重复的问题. ...

  6. 使用dockerfile构建自己的镜像

    CentOS Linux release 7.2.1511 Docker version 17.03.1-ce 首先应该了解docker镜像的分层机制,这个网上文章很多,简单说就是对镜像的每次修改都是 ...

  7. docker使用Dockerfile构建ssh容器

    一.使用Dockerfile构建centos 1.创建 Dockerfile mkdir centos # 创建一个目录存放之后的Dockerfile,目录名无所谓 cd centos # 进入目录 ...

  8. Docker —— 使用 Dockerfile 制作 Jdk + Tomcat 镜像

    一.准备好Jdk和Tomcat apache-tomcat-8.5.50.tar.gz jdk-8u212-linux-x64.tar.gz 注意: Jdk 和 Tomcat 记得从官网下载,否则制作 ...

  9. Docker build Dockerfile 构建镜像 - 二

    Dockerfile 制作镜像 https://hub.docker.com/ 搜索需要镜像: https://hub.docker.com/_/centos/ 官方示例: centos:6 1.这里 ...

随机推荐

  1. 解决Google Play审核中的WebViewClient.onReceivedSslError问题

    Google Play应用市场提交应用审核,出现因WebViewClient.onReceivedSslError问题导致拒绝通过. Google Paly给出的详情地址:support.google ...

  2. 在nuget上发布自己的程序集教程

     前期准备 [1]注册nuget官网账号:注册地址:https://www.nuget.org/ [2]下载Nuget.exe文件:下载地址:https://www.nuget.org/downloa ...

  3. 还在用AIDL吗?试试EasyMessenger吧

    EasyMessenger 直达Github项目地址 一款用于Android平台的基于Binder的进程间通信库,采用annotationProcessor生成IPC通信需要的代码.EasyMesse ...

  4. 章节八、3-如何用Chrome开发者工具查看元素

    一.如何使用开发者工具,操作步骤与火狐浏览器一致(此处不重复叙述,此处主要描述如何查找元素是否存在以及元素在页面中是否重复). 1.打开开发者选项,然后按“ctrl+f”,会出现一个输入框在输入框中输 ...

  5. 吴恩达机器学习笔记59-向量化:低秩矩阵分解与均值归一化(Vectorization: Low Rank Matrix Factorization & Mean Normalization)

    一.向量化:低秩矩阵分解 之前我们介绍了协同过滤算法,本节介绍该算法的向量化实现,以及说说有关该算法可以做的其他事情. 举例:1.当给出一件产品时,你能否找到与之相关的其它产品.2.一位用户最近看上一 ...

  6. 【TensorFlow篇】--DNN初始和应用

    一.前述 ANN人工神经网络有两个或两个以上隐藏层,称为DNN 只有一个隐藏层是多层感知机 没有隐藏层是感知机 二.反向传播应用举例 举例: 正向传播,反向传播是一次迭代, 正向传播:在开始的每一层上 ...

  7. 处理SQL Server中的重复行

    如果表中的数据需要基于行中的多个值具有唯一约束,则适合的解决方案将是复合健. 复合主键 使用SQL Server语法创建符合主键非常简单. create table my_parts ( id_par ...

  8. CanalSharp-mysql数据库binlog的增量订阅&消费组件Canal的.NET客户端

    一.前言 CanalSharp是阿里巴巴开源项目mysql数据库binlog的增量订阅&消费组件 Canal 的.NET客户端,关于什么是 Canal?又能做什么?我会在后文为大家一一介绍.C ...

  9. knockoutjs data-bind 声明式绑定整理

    一.Visible绑定 1.功能 Visible绑定通过绑定一个值来确定DOM元素显示或隐藏 2.示例 <div data-bind="visible: shouldShowMessa ...

  10. 从零开始搭建一个规范的vue-cli 3.0项目

    在这一集我们将讲到如何从安装vue-cli开始,到新建一个本地项目,再到vscode中关于eslint的配置,以及本地项目关联公司远程项目的基本操作. 一,初始化本地项目 1,首先,全局安装vue-c ...