Docker 实战—使用 Dockerfile 构建镜像

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!

原文地址:https://www.cnblogs.com/cloudfloating/p/11788000.html

时间: 2024-07-30 18:40:24

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

docker 实战---安装一个基础镜像 (一)

泡了几天官网,对docker有了一点了解.准备着手搭建一个公司的开发测试环境,包括java.python. 环境介绍 首先说明一下我的环境 2台物理服务器(后面简称主机) 主机A的配置如下: [[email protected] ~]# lsb_release -a LSB Version: :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch:graphics-4.0-amd64:graphics-4.0-noarch:p

Dockerfile构建镜像

构建镜像 构建镜像指令:docker  build或docker  image  build   Dockerfile初识: cat >>Dockerfile<<end FROM  python:2.7-slim WORKDIR  /app ADD  .  /app RUN  pip  install  -r  requirements.txt EXPOSE  80 ENV  NAME  World CMD  ["python", "app.py&qu

Docker + SpringBoot2.0快速构建镜像

博文链接 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口.(引用官方概念,本文注重docker+springboot2.0快速构建镜像,对docker更细节的知识不在做赘述) Docker 本文使用的是CentOs7 docker 安装: yum install docker systemctl start docker 开

docker实战之Dockerfile(三层镜像的构建)

通过视频总结(http://edu.51cto.com/center/course/lesson/index?id=71317)Dockerfile 放在git上面,才叫自动化.创建docker镜像,首先得有父镜像,Dockerfile生成docker镜像,每执行一条语句,就会生成docker镜像的一层layer.一般有基础镜像,中间件镜像,最后生成应用镜像 本文基于centos系统的前提条件: 首先 ,从git.oschina网上下载好相应的源码进行练习.源码为搜索docker-trainin

Docker学习笔记(3)-- 如何使用Dockerfile构建镜像

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

Docker学习笔记-- 如何使用Dockerfile构建镜像

Dockerfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明imag

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

在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其中,然后让docker读取并分析.执行,那么重复构建.更新将变得很方便,所以Dockerfile就此诞生了.Docker提供了Dockerfile作为构建Docker镜像脚本,避免人们一行一行的输入,真是善莫大焉.Dockerfile脚本可以做到随时维护修改,即可以分享,更有利于在模板化,更不用说传

使用 Dockerfile 构建镜像

Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Dockerfile这种显而易见的脚本更容易被使用者接受,它明确的表明image是

使用Dockerfile构建镜像并push到私有仓库

环境:OS X 10.10.5 maven 3.3.9 Docker version 1.12.2 docker-machine version 0.8.2 程序示例为http://www.cnblogs.com/modprobe/p/6001333.html 中提到的服务发现程序 相关代码:https://github.com/li-hong/spring-cloud-demo 一.准备工作,安装docker-toolbox 方法:http://www.docker.com/products/