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.基于容器构建镜像 基于已有 ...
随机推荐
- Maven 梳理 - 常用三种archetype说明
archetype:原型的意思,可理解为Maven项目模板工具包 常用archetype 1.cocoon-22-archetype-webapp 2.maven-archetype-quicksta ...
- Ubuntu 卸载openJDK
如果你在 Ubuntu 软件中心安装过 OpenJDK,请先使用如下命令将其删除: $ sudo apt-get purge openjdk*
- [ProblemSolving][Ubuntu][LyX] The selected document class ... requires external files that are not available...
I installed LyX in my Ubuntu(version LTS 18.04), but I just can't make it work. Every time I open an ...
- Linux上编译安装PHP
这篇文章主要介绍了关于Linux上编译安装PHP,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 之前在服务器上编译安装了PHP运行环境,但是安装完过了一段时间就差不多忘记了,只是零零星 ...
- Mac OS Catalina 如何删除自带的应用
在新推送的系统升级过后,(博主系统是Mac OS Mojave 10.14)我们会发现,之前我们删除的令人讨厌的Mac自带应用又回来了,如果我们还按照之前百度的方式删除的话,参考: https://w ...
- 【solved】must have one register DataBase alias named `default`
beego在初始化MySQL数据库时报错处理 1.报错提示: ... [ORM]2019/10/11 08:42:52 register db Ping `default`, dial tcp 192 ...
- 移动端meta设置大全
声明文档使用的字符编码: <meta charset='utf-8'> 强制让文档与设备的宽度保持1:1,对页面设置不能进行缩放: <meta name="viewpor ...
- requests模块(post)请求篇
'''利用parse模块模拟post请求分析百度词典分析步骤:1. 打开F122. 尝试输入单词girl,发现每敲一个字母后都有请求3. 请求地址是 http://fanyi.baidu.com/su ...
- 1046 Shortest Distance (20 分)
1046 Shortest Distance (20 分) The task is really simple: given N exits on a highway which forms a si ...
- unittest生成测试报告
1.先导入HTMLTestRunner模块 2.实例一脚本如下 #coding=utf-8 import unittest import HTMLTestRunner #封装批量执行用例 def al ...