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 指定的命令在构建镜像时并不执行,而是在它的子镜像中执行
Dockerfile基础的更多相关文章
- dockerfile基础命令
一直想写一个, 但发现网上有很多了, 直接copy把 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等.当前目录下包含Dockerfile,使用命令build来 ...
- Dockerfile编写语法
docker镜像本质上就是一个个基础镜像的堆叠,为了做出我们想要的镜像,我们需要考虑最终镜像所需的所有基础环境,然后一层层堆叠.也就是不断以基础镜像搭建上层镜像. 先看例子: # Version: # ...
- [置顶]
docker--基础镜像和dockerfile
制作基础镜像 注意:需要在CentOS6下操作 准备工作 yum -y install febootstrap 下载ISO镜像文件到服务器 mkdir /mnt/centos6/ mount -o l ...
- docker+k8s基础篇一
Docker+K8s基础篇(一) docker的介绍 A:为什么是docker B:k8s介绍 docker的使用 A:docker的安装 B:docker的常用命令 C:docker容器的启动和操作 ...
- 使用alpine制作最小化的JDK基础镜像
注意:这里使用的是oracle的JRE,版本是1.8. 1.解压jre包,删除根目录下文本文件,然后删除其他不必要文件. #解压 tar xvcf jre-8u161-linux-x64.tar.gz ...
- Dockerfile多阶段构建原理和使用场景
本文转载自Dockerfile多阶段构建原理和使用场景 导语 Docker 17.05版本以后,新增了Dockerfile多阶段构建.所谓多阶段构建,实际上是允许一个Dockerfile 中出现多个 ...
- Dockerfile 多阶段构建实践
写在前面 在Docker Engine 17.05 中引入了多阶段构建,以此降低构建复杂度,同时使缩小镜像尺寸更为简单.这篇小作文我们来学习一下如何编写实现多阶段构建的Dockerfile 关于doc ...
- 3.Docker容器学习之新手基础使用
原文地址: http://blog.weiyigeek.top/2019/5/2-docker%E5%AD%A6%E4%B9%A0%E4%B9%8B%E5%9F%BA%E7%A1%80%E4%BD%B ...
- Docker学习重点(7)~DockerFile
一.DockerFile DockerFile是用来构建docker镜像的文件,可以理解为命令参数脚本! 1.构建步骤: 编写一个dockerfile文件 docker build 构建成为一个镜像 ...
随机推荐
- Feel Good POJ - 2796 (前缀和+单调栈)(详解)
Bill is developing a new mathematical theory for human emotions. His recent investigations are dedic ...
- PhpStorm的注册激活方法
首先,需要修改本地的hosts文件(路径一般为C:\Windows\System32\drivers\etc\hosts),添加下面这行代码. 0.0.0.0 account.jetbrains.co ...
- Eclipse Todo Tasks 任务试图
java - Find TODO tags in Eclipse - Stack Overflowhttps://stackoverflow.com/questions/16903046/find-t ...
- java编程规范(持续更新)
1:非空判断 错误例子: if(user.getUserName().equals("hollis")){ } 这段代码极有可能在实际运行的时候跑出NullPointerExcep ...
- CRM/PLM/SCM/MES与ERP的联系与区别
企业通过专设信息机构.信息主管,配备适应现代企业管理运营要求的自动化.智能化.高技术硬件.软件.设备.设施,建立包括网络.数据库和各类信息管理系统在内的工作平台,提高企业经营管理效率的发展模式. 那么 ...
- 关于Vue-cli 组件引入CSS样式文件
在 Vue-cli 组件 .vue 文件中引入 css 样式表出错 由于使用Vue-cli后, 引入css 样式表 不需要 多余../../ 之类路径 现在写法也发生了改变 <style ...
- Leetcode SingleNumber I & II & III 136/137/260
SingleNumber I: 题目链接:https://leetcode-cn.com/problems/single-number/ 题意: 给定一个非空整数数组,除了某个元素只出现一次以外,其余 ...
- Python 构建工具 buildout 的介绍与使用
来到了新公司上班,首先就是得把自己的环境给搭起来.知乎使用了buildout作为python项目的构建工具. 那么什么是 buildout ? buildout的是一款自动化构建工具.由Zope团队开 ...
- 老男孩python学习自修【第一天】文件IO用法
第一天 文件IO处理 1.读文件实例 file_split.python f = file('myFile.txt', 'r') for line in f.readlines(): line = ...
- layui tips