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!
Docker 实战—使用 Dockerfile 构建镜像的更多相关文章
- docker(四) 使用Dockerfile构建镜像
下面以一个例子来演示构建镜像的过程. #在/tmp目录下演示 cd tmp mkdir build-redis-image 1.创建Dockerfile文件 vim Dockerfile 并写入如下内 ...
- Dockerfile构建镜像
Dockerfile构建镜像的步骤: 从基础镜像运行一个容器 执行一条指令,对容器做出修改 执行类似docker commit的操作,提交一个新的镜像层 再基于刚提交的镜像运行一个新的容器 执行Doc ...
- Dockerfile构建镜像实战
目录 一.常见Dockerfile指令 二.编写Centos Dockerfile 2.1.编写Dockerfile 2.2.构建 2.3.查看Docker镜像 2.4.运行镜像 三.CMD和ENTR ...
- 使用Dockerfile构建镜像-Docker for Web Developers(5)
1.理解Dockerfile语法 语法命令 命令功能 举例 FROM 所有的dockerfile都必须以FROM命令指定镜像基于哪个基础镜像来制作 FROM ubuntu:14:04 MAINTAIN ...
- Docker容器学习梳理 - Dockerfile构建镜像
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- DockerFile构建镜像和Docker仓库
利用commit理解镜像构成 注意: docker commit 命令除了学习之外,还有一些特殊的应用场合,比如被入侵后保存现 场等.但是,不要使用 docker commit 定制镜像,定制镜像应该 ...
- 013、Dockerfile构建镜像(2019-01-02 周三)
参考https://www.cnblogs.com/CloudMan6/p/6830067.html Dockerfile构建镜像过程分析 root@docker-lab:~/111# ls ...
- Dockerfile 构建镜像
一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest b.设置维护者信息 没有固定格式 c.设置需要添加到容器中的文件 ...
- Docker系列教程04-Docker构建镜像的三种方式
简介 创建镜像的方法主要有三种:基于已有镜像的容器创建.基于本地模板导入.基于Dockerfile创建. 今天就逐一讲述为大家讲述,如何构建属于自己的docker镜像. 1.基于容器构建镜像 基于已有 ...
随机推荐
- Spring 梳理 - 视图解析器 VS 视图(View,ViewResolver)
View View接口表示一个响应给用户的视图,例如jsp文件,pdf文件,html文件等 该接口只有两个方法定义,分别表明该视图的ContentType和如何被渲染 Spring中提供了丰富的视图支 ...
- Mybatis的xml文件对大于号小于号的特殊处理!
当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序 ...
- .NET进阶篇-丑话先说,Flag先立--致青春
作为开发者,工作了半年,也总觉得技术栈和刚毕业区别不大,用的技术还都是N年前的,每每看到新东西,也只心里哇塞惊叹一下,然后就回归于忙碌.怪自己的技术池太浅,热门的令人称奇的技术也都是在其他巨人的肩膀上 ...
- java架构之路-(JVM优化与原理)JVM类的加载机制
话不多说,先上图. ***.class文件执行大概就是这样来走的.我们都知道我们的java文件经过编译以后会生成对应的class文件.先经过类装载子系统,然后塞进运行时内存模型的元空间,开始执行方法, ...
- InnoDB体系结构
1.前言 整理了下InnoDB体系结构,方便以后更简单的理解 2.思维导图 参考: https://www.cnblogs.com/tangshiguang/p/6741035.html https: ...
- python句柄部分操作
```python3# 通过窗口类名.窗口标题获取控件句柄hwnd = win32gui.FindWindow("ClassName", "TitleName" ...
- vue3.0 vue.config.js 配置实战
今天讲述一下vue-config.js配置,我们前面搭建好脚手架会发现,这个对比2.x版本少了很多东西,没有build的配置,也没有webpack的配置,那么问题来了,我们如何去开发我们的项目呢,比如 ...
- 安装高可用Hadoop生态 (二) 安装Zookeeper
2. 安装Zookeeper 2.1. 解压程序 ※ 3台服务器分别执行 .tar.gz -C/opt/cloud/packages /opt/cloud/bin/zookeeper /conf ...
- 2019滴滴java面试总结 (包含面试题解析)
2019滴滴java面试总结 (包含面试题) 本人6年开发经验.今年年初找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是既有php也有Java后端开发,最终选择去了滴滴 ...
- BBEdit 13.0 for Mac 打开大文件不吃力
BBEdit 是一款拥有 16 年历史的 HTML 和文本编辑器,拥有高性能且流畅的文本处理能力,适用于 Web 和软件开发者,具备功能丰富且强大的智能搜索.代码折叠.FTP 和 SFTP 管理等功能 ...