GitHub Page:http://blog.cloudli.top/posts/Docker实战-使用-Dockerfile-构建镜像/

Dockerfile 指令详解请访问:https://www.cnblogs.com/cloudfloating/p/11737447.html

使用 Alpine Linux 作为基础镜像

Alpine 是一个非常轻量的 Linux 镜像,他只有大约 5MB 的大小,基于它构建镜像,可以大大减少镜像的体积。

Alpine 的 Docker Hub 页面:https://hub.docker.com/_/alpine

docker pull alpine

Alpine 使用 apk 命令来安装软件包,支持的软件包列表可以在官网查看:https://pkgs.alpinelinux.org/packages

这里以安装 Nginx 为例,学习镜像的构建。另外 Nginx 本身有官方镜像,pull 即可。

构建 Nginx 镜像

编写 Dockerfile

FROM alpine

RUN apk update \
# 安装 nginx
apk add --no-cache nginx \
mkdir /run/nginx && \
# 清除缓存
rm -rf /tmp/* /var/cache/apk/* # 添加容器启动命令,启动 nginx,以前台方式运行
CMD [ "nginx", "-g", "daemon off;" ]

这里有一个坑点,必须创建 /run/nginx 目录,不然会报错。

构建镜像

使用 docker build 命令构建:

docker build -t nginx-alpine .

在 Dockerfile 目录下执行以上命令即可构建镜像。-t 参数指定了镜像名称为 nginx-alpine,最后的 . 表示构建上下文(. 表示当前目录).

在使用 COPY 指令复制文件时,指令中的源路径是相对于构建上下文的(如果指定上下文为 /home,那么相当于所有的源路径前面都加上了 /home/)。

如果你的 Dockerfile 文件名不是 “Dockerfile”,可以使用 -f 参数指定。

千万不要将 Dockerfile 放在根目录下构建,假如你将 Dockerfile 放在一个存放大量视频目录下,并且构建上下文为当前目录,那么镜像将会非常大(视频都被打包进去了)。最佳做法是将 Dockerfile 和需要用到的文件放在一个单独的目录下。

运行容器

使用构建的镜像运行容器:

docker run --name my-nginx -p 80:80 -d nginx-apline
  • --name 指定容器的名称,可以省略(后续只能通过容器 id 来操作);
  • -p 映射端口,宿主端口 -> 容器端口;
  • -d 后台运行。

运行后访问 http://localhost/,会出现一个 nginx 的 404 页面,说明已经运行成功了,因为这里安装的 Nginx 并没有默认页面,/etc/nginx/conf.d/default.conf 中的内容:

# This is a default site configuration which will simply return 404, preventing
# chance access to any other virtualhost. server {
listen 80 default_server;
listen [::]:80 default_server; # Everything is a 404
location / {
return 404;
}
}

使用构建的 Nginx 镜像运行一个静态页面

在一个空目录下创建 Nginx 配置文件:

server {
listen 80 default_server;
listen [::]:80 default_server; root /var/www; location / {
index index.html;
}
}

编写一个静态页面:

<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<h1>Hello, Docker!</h1>
</body>
</html>

使用之前构建的镜像构建一个新的镜像:

FROM nginx-alpine
# 拷贝配置文件,覆盖默认的
COPY default.conf /etc/nginx/conf.d/
# 拷贝静态页面
COPY index.html /var/www

构建镜像、运行容器:

docker build -t site .
docker run --name my-site -p 80:80 -d site

现在访问 http://localhost/,就可以看到 Hello, Docker!

Docker 实战—使用 Dockerfile 构建镜像的更多相关文章

  1. docker(四) 使用Dockerfile构建镜像

    下面以一个例子来演示构建镜像的过程. #在/tmp目录下演示 cd tmp mkdir build-redis-image 1.创建Dockerfile文件 vim Dockerfile 并写入如下内 ...

  2. Dockerfile构建镜像

    Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...

  3. Dockerfile构建镜像实战

    目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...

  4. 使用Dockerfile构建镜像-Docker for Web Developers(5)

    1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...

  5. Docker容器学习梳理 - Dockerfile构建镜像

    在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...

  6. DockerFile构建镜像和Docker仓库

    利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...

  7. 013、Dockerfile构建镜像(2019-01-02 周三)

    参考https://www.cnblogs.com/CloudMan6/p/6830067.html   Dockerfile构建镜像过程分析   root@docker-lab:~/111# ls  ...

  8. Dockerfile 构建镜像

    一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest  b.设置维护者信息 没有固定格式  c.设置需要添加到容器中的文件 ...

  9. Docker系列教程04-Docker构建镜像的三种方式

    简介 创建镜像的方法主要有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建. 今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像. 1.基于容器构建镜像 基于已有 ...

随机推荐

  1. javascript中字符串对象常用的方法和属性

    前言 字符串是一种非常重要的数据类型,在Java等面向对象编程语言中,它代表对象类型,而在javascript中它却是一种基本数据类型,在开发的领域中,我们经常会碰到,无论是前端还是后台.比如后台验证 ...

  2. 关于Python selenium实现类似比价软件的功能

    偶然间想实现比价的功能,正常requests途径比较难实现,于是乎想到可以selenium可以简易实现,下面是代码. import requests from selenium import webd ...

  3. Windows和Mac系统下安装Docker

    在windows和mac系统中使用Docker Desktop安装Docker对系统的要求是很高的. 对于 Windows 系统来说,安装 Docker for Windows 需要符合以下条件: 必 ...

  4. SoapUI 的几种常用参数化方式

    今天给大家来梳理下soapui这款工具关于参数化的几种方式以及具体的应用场景 1.properties 官方文档:https://www.soapui.org/docs/functional-test ...

  5. 本次作业统一标题:C语言I博客作业02

    这个作业属于哪个课程 C语言程序设计1 这作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-2/homework/8655 我在这个课程的目标是 ...

  6. webpack loader实现

    正值前端组件化开发时代,那么必然离不开目前最火的构建工具--webpack(grunt,gulp等暂且不谈).说到这里,刚好有几个问题: 为什么运行打包命令之后,.vue 文件可以转成 .js 文件 ...

  7. Int类的129为什么转成byte就变成-127了?

    作为一个java开发人员,接触的基本都是上层的,都是以应用为主,根据业务实现功能,但今天无意间发现了一个小问题,int类型的129转成byte类型变成了-127,我知道是因为位数截取的原因,但是还没有 ...

  8. CS184.1X 计算机图形学导论 作业0

    1.框架下载 在网站上下载了VS2012版本的作业0的框架,由于我的电脑上的VS是2017版的,根据提示安装好C++的版本,并框架的解决方案 重定解决方案目标为2017版本. 点击运行,可以出来界面. ...

  9. Windows常用操作

    目录 查询IP地址 常用快捷键 显示文件后缀名 查询IP地址 1.进入到dos界面 2.输入命令: ipconfig 常用快捷键 快捷键 作用 win+E 打开计算机 win+R 打开运行 win+R ...

  10. 什么是IDS/IPS?

    目录   摘要 0x00 基于网络的IDS和IPS0x01 设计考虑因素0X02 IDS/IPS 总结           摘要 摘要 这篇文章主要介绍的是入侵检测系统(IDS)和入侵防御系统(IPS ...