Dockerfile基础

Dockerfile基础
Dockerfile分四部分组成: 基础镜像、维护者信息、镜像操作指令、启动时命令
ps: 我的本地镜像已经有centos,若没有请使用docker pull centos

入门例子
创建Dockerfile文件

cd temp && vim Dockerfile

#若本地镜像没有centos请先使用`docker pull centos`
FROM centos

MAINTAINER thewindkee thewindkee@163.com

RUN echo hi
在当前目录下执行docker build .
效果:构建了一个centos镜像,并且输出了hi

Sending build context to Docker daemon 2.048 kB
Step 1/3 : FROM centos
---> 1e1148e4cc2c
Step 2/3 : MAINTAINER thewindkee thewindkee@163.com
---> Running in aa0fbd3c9882
---> fdeb2afefe47
Removing intermediate container aa0fbd3c9882
Step 3/3 : RUN echo hi
---> Running in f15e63f49e17

hi
---> b96f2a0acf5d
Removing intermediate container f15e63f49e17
Successfully built b96f2a0acf5

★含有nginx的例子
实际不需要这么麻烦,直接使用docker pull nginx即可,这里只是作为练习

FROM centos

MAINTAINER thewindkee thewindkee@163.com

RUN yum install wget -y
# or ADD nginx.tar ~
RUN wget http://nginx.org/download/nginx-1.14.2.tar.gz
RUN tar -xvf nginx-1.14.2.tar.gz
WORKDIR nginx-1.14.2
RUN ls

RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
RUN yum install -y libxml2 libxml2-dev libxslt-devel -y gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
RUN useradd -M -s /sbin/nologin nginx

RUN ./configure --user=nginx www.wanmeiyulept.com--group=nginx --prefix=/usr/local/nginx --with-file-aio --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module -www.meiwanyule.cn-with-http_image_www.qcaphb.com filter_module --with-http_geoip_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_auth_request_module --with-http_random_index_module --with-http_secure_link_www.365soke.com module --with-http_degradation_module --with-http_stub_status_module && make && make install

ENV PATH /usr/local/nginx/sbin:$PATH

EXPOSE 80
#防止启动后退出,因此daemon off;
CMD ["/bin/bash", "-c", "nginx -g ‘daemon off;‘"]

docker build
docker build . #利用Dockerfile 创建一个镜像
1
打包效果:

使用docker tag 镜像ID 新仓库名:TAG 为其添加版本号

启动

使用docker commit 创建一个新镜像
docker commit 容器名 之后的镜像名:版本号
docker commit 可以在一个容器的基础上创建一个新的镜像。
这里为了方便看出效果,我们先改变一下原镜像的内容,再commit成新镜像

启动刚才Dockerfiel使用exec 进入容器,改变index.html的title

commit后启动 新镜像
可以发现新镜像是改变后的内容。
ps:run每次开启一个新容器,start 启动已存在的容器.run = create+start

参考:
Dockerfile 语法

FROM
基础镜像可以为任意镜像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。FROM命令必须是Dockerfile的首个命令。如果同一个DockerFile创建多个镜像时,可使用多个FROM指令(每个镜像一次)
# Usage: FROM [image name]
FROM ubuntu
MAINTAINER
指定维护者的信息,并应该放在FROM的后面。
# Usage: MAINTAINER [name]
MAINTAINER authors_www.yongshi123.cn  name
RUN
RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。
格式为Run 或者Run [“executable” ,”Param1”, “param2”]
前者在shell终端上运行,即/bin/sh -C,后者使用exec运行。例如:RUN [“/bin/bash”, “-c”,”echo hello”]
每条run指令在当前基础镜像执行,并且提交新镜像。当命令比较长时,可以使用“/”换行。
# Usage: RUN [command]
RUN apt-get update
USER
格式为 USER daemon 。
指定运行容器时的用户名或UID,后续的 RUN 也会使用指定用户。
当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户,例如: RUN groupadd -r postgres && useradd -r -g postgres postgres 。要临时获取管理员权限可以使用 gosu ,而不推荐 sudo 。
# Usage: USER [UID]
USER 751
VOLUME
VOLUME命令用于让你的容器访问宿主机上的目录。
格式为 VOLUME [“/data”] 。
创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。
# Usage: VOLUME ["/dir_www.michenggw.com", “/dir_2” …]
VOLUME ["/my_files", “/app_files”]
WORKDIR
WORKDIR命令用于设置CMD指明的命令的运行目录。
格式为 WORKDIR /path/to/workdir 。
为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录。
可以使用多个 WORKDIR 指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。例如:
WORKDIR /a
WORKDIR b
WORKDIR c
RUN pwd
# 最终路径为 /a/b/c 。
CMD
支持三种格式:
CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
CMD command param1 param2,在/bin/sh上执行
CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。
# Usage 1: CMD application www.sanxinyuLevip.com “argument”, “argument”, …
CMD “echo” “Hello docker!”
ENV
格式为 ENV 。 指定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
ENV TZ “Asia/Shanghai”
ENV LANG en_US.UTF-8
ENV LC_ALL en_www.dasheng178.com US.UTF-8
ADD
ADD命令有两个参数,源和目标。它的基本作用是从源系统的文件系统上复制文件到目标容器的文件系统。如果源是一个URL,那该URL的内容将被下载并复制到容器中。如果文件是可识别的压缩格式,则docker会帮忙解压缩。
# Usage: ADD [source directory or URL] [destination directory]
ADD /my_app_folder /my_app_folder
COPY(基本于ADD没有区别)
COPY 将文件从路径 <src复制添加到容器内部路径 。
COPY
EXPOSE
指定在docker允许时指定的端口进行转发
EXPOSE […]
ENTRYPOINT
两种格式:
ENTRYPOINT [“executable”, www.bsylept.com “param1”, “param2”]
ENTRYPOINT command param1 param2(shell中执行)。
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个 Dockerfile 中只能有一个 ENTRYPOINT,当指定多个时,只有最后一个起效。
ONBUILD
ONBUILD 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行

原文地址:https://www.cnblogs.com/qwangxiao/p/10558615.html

时间: 2024-07-31 12:57:01

Dockerfile基础的相关文章

Dockerfile基础命令-图解轻松学Docker&K8S

>>> 点我开始视频学习 <<< 在Dockerfile中我们书写了一系列的内置命令,比如form workdir和add,作为Dockerfile,他远远不止提供了这么几个命令,本节咱们就将最常用的命令进行讲解.在这里强调一下,对于我们本节所学习的命令,大家脑海里有个印象就可以了.在后续我们还会通过大量的案例进行实践.首先咱们来看一个最基础的from. from from这个指令是基于基准镜像来设计的.什么叫基于基准镜像?顾名思义,我们在构建新镜像时候,你要依托于哪个

不得不掌握的Dockerfile基础指令

FROM 基于哪个镜像 MAINTAINER 注明作者 COPY 复制文件进入容器(只能使用相对路径,不能使用绝对路径) ADD 复制文件进入容器(与COPY的不同是,如果复制的是.tar.gz文件,将会被解压) WORKDIR 指定工作目录,假如目录不存在,会自动创建 ENV 设置环境变量 EXPOSE 暴露容器端口 RUN 在构建镜像的时候执行,作用于镜像层面 ENTRYPOINT 在容器启动的时候执行,作用于容器层,dockerfile里有多条时只允许执行最后一条 若为exec命令格式,可

Dockerfile实战:构建基础的ubuntu14.04镜像

我们可以从Docker Hub上下载官方仓库中的镜像,我自己就下载了ubuntu镜像,只有188M左右,很小巧了.但是看了下,里面的软件源还是官方的,而且没有安装vim,所以就打算自己写一个Dockerfile,用它来构建适合自己的ubuntu基础镜像. deb http://archive.ubuntu.com/ubuntu/ trusty main restricted deb-src http://archive.ubuntu.com/ubuntu/ trusty main restric

【Application】Docker DockerFile解析(五)

DockerFile介绍 DockerFile是用来构建Docker镜像文件,是由一系列命令和参数构成的脚步 在docker hub 上搜索并查看centos的DockerFile如下: DockerFile基础知识 1.每条保留字指令都必须为大写字幕且后面要跟随至少一个参数 2.指令按照从上到下,顺序执行 3.#表示注释 4.每条指令都会创建一个新的镜像层,并对镜像进行提交 DockerFile构建过程 1.docker从基础镜像运行一个容器 2.执行一条指令并对容器作出修改 3.执行类似do

容器和应用程序:扩展、重构或重建?

技术领域是不断变化的,因此,任何应用程序都可能在很短时间内面临过时甚至淘汰,更新换代的速度之快给人的感觉越来越强烈,我们如何使传统应用程序保持活力不落伍?工程师想的可能是从头开始重建传统应用程序,这与公司的业务目标和产品时间表通常是相悖的.如果现阶段正在运行的应用程序是正常工作的,这时候你很难找到正当而充分的理由让技术人员花六个月重写应用程序.代码债似乎注定意味着失败. 众所周知,产品开发向来都不是非黑即白那么简单,必须要权衡各方妥协折衷进行,虽然完全重写的可行性不大,但应用程序现代化的长远利益

Docker 镜像及Docker仓库配置 [四]

Docker 镜像及Docker仓库配置 [四] Docker 时间:2016年11月8日15:45:20 一.Docker 镜像介绍 Docker镜像构建分为两种,一种是手动构建,另一种是Dockerfile(自动构建) Docker镜像手动构建案例: 我们基于centos镜像进行构建,制作nginx镜像 [[email protected] ~]# docker run --name abcdocker -it centos[[email protected] /]# yum install

【HAVENT原创】Docker 创建一个新的 Node 镜像,并发布到 DockerHub

下面我将在 Window10 系统下面生成一个新的 Node 镜像,并发布的 DockerHub. 1. 将带有 Dockerfile 的项目目录放到用户根目录 C:\Users\havent.liu\wehotel-app 2. 启动 Docker Quickstart Terminal,根据 Dockerfile 生成一个基础镜像 $ docker build -t havent/node6 havent-node6 附:dockerfile 基础镜像代码 FROM node:6-alpin

docker系列之file基本操作

dockerfile基础操作 Dockerfile 是记录了镜像是如何被构建出来的配置文件, 可以被 docker 直接执行以创建一个镜像. 它的样子: FROM ubuntu:14.04 MAINTAINER YS.Zou <> ADD run /root/run ADD sources.list /etc/apt/sources.list ADD id_rsa.pub /tmp/pubkey ADD requirements /root/requirements RUN mkdir -p

Docker | 第五章:构建自定义镜像

前言 上一章节,主要是介绍了下Dockerfile的一些常用命令的说明.我们知道,利用Dockerfile可以构建一个新的镜像,比如运行Java环境,就需要一个JDK环境的镜像,但直接使用公共的镜像时,一般上大小都比较大.所以本章节就主要结合Dockerfile文件及commit方式,构建属于自己的镜像,同时对镜像进行压缩和优化,同时也是对Dockerfile知识的一个实践. 利用Dockerfile构建自定义镜像 选定基础镜像 准备JRE版本 编写Dockerfile 实践:运行SpringB