1:创建Dockerfile文件,用于构建镜像 如果你还不知道Dockerfile如何创建,请移步我的另一篇博客:https://blog.csdn.net/CSDN___LYY/article/...替换对应http位置即可 我的项目的数据库使用的是远程数据库,所以没有在镜像中加入数据库的构建,还是直接使用的远程数据库 Dockerfile文件如下: #使用的基础镜像 FROM centos...将创建的Dockerfile文件放在该文件夹中,Dockerfile的文件名最好是“Dockerfile”,这样会默认查找到该文件,不用再进行指定文件。...4:测试容器 容器启动后有时候容器中的tomcat还没有启动完毕,我们可以通过查看该容器的log来判断tomcat是否启动成功 docker logs 容器ID或者容器name 当我们在确认tomcat...启动成功后,在本地测试是否可以访问项目 ####在本机的浏览器中输入: ip:8080/xcar-index-web ####例如: 10.52.10.227:8080/xcar-index-web
检查完所有指令后,Docker 会从缓存中寻找可用的镜像,而不是创建一个新镜像。如果不想使用缓存,可以在执行 docker build 命令是添加 --no-cache=true选项。...Docker 遵守的基本规则如下: 从缓存中已经存在的父镜像开始,将下一条指令与从该基本镜像派生的所有子镜像进行比较,以查看是否使用完全相同的指令构建了其中的一个子镜像。如果没有则缓存失效。...解释性意见包含在内。 注意:如果字符串中包含空格,则必须用双引号引起来或转义这个空格。如果字符串中包含双引号,必须转义。...如果 Dockerfile 中有多个步骤使用了上下文中的不同文件,挨个使用 COPY 命令,而不是一次全部完成。这可确保每个步骤的构建缓存仅在特定的所需文件发生更改时才会失效(强制重新运行该步骤)。...例如,可以为语言堆栈镜像使用 ONBUILD,在 Dockerfile 中使用该语言编写任意用户软件,就像在 Ruby 的 ONBUILD 变体中看到的一样。
容器启动命令:当基于改镜像的容器启动时需要执行哪些命令,常见的是CMD命令和ENTRYPOINT命令 CMD命令也是默认在/bin/sh中执行,并且默认只能有一条, 如果是多条CMD命令则只有最后一条执行...用户也可以在docker run命令创建容器时指定新的CMD命令来覆盖Dockerfile里的CMD 创建镜像 docker build 命令用于使用 Dockerfile 创建镜像。...将内部服务的80端口暴露出来,提供给容器间互联使用 设置容器主机名:ENV HOSTNAME web。设置由该镜像创建的容器的主机名为web。...向镜像中增加文件 COPY test.txt /var/www/html,将txt文件拷贝到容器里的/var/ww/html目录中。...如果Dockerfile在/usr/local目录下,则test.txt的绝对路径就是/usr/local/test.txt ADD html.tar /var/www:将tar包添加到容器指定目录
Dockerfile指令 FROM 有效的Dockerfile必须从FROM开始,镜像可以是任何有效的镜像。 官方建议,如果只需要一个linux基础镜像,建议使用Debian镜像,控制的很小。...如果知道要更新当前基础镜像中中的某一个软件,比如**nginx**,请使用**apt-get install -y nginx**来进行安装更新 通常我们会如下使用他: ```docker RUN apt-get...该值将处于所有“后代” Dockerfile命令的环境中 该ENV指令有两种形式。第一个表单ENV 将会将一个变量设置为一个值。第一个空格后的整个字符串将被视为- 包括空格和引号等字符。...第二种形式ENV = …允许一次设置多个变量。请注意,第二种形式在语法中使用等号(=),而第一种形式则不使用等号。像命令行解析一样,引号和反斜杠可用于在值中包含空格。...如果用户指定了在Dockerfile中未定义的构建参数,则构建会输出警告[Warning] One or more build-args [foo] were not consumed.
/lib/docker/volumes是否有生成卷,因为我的是mac电脑,一般会自动隐藏这个文件路径,需要运行这条命令进去看: docker run -it --privileged --pid=host...# LABEL指令为镜像添加标签,当前镜像会继承父镜像的标签,如果与父标签重复,会覆盖之前的标签 # 例: LABEL multi.label1="value1" multi.label2="value2...可以指定端口监听 TCP 还是 UDP,如果不指定协议,则默认为 TCP # 如果要同时在 TCP 和 UDP 上公开,在Dockerfile中可以这样写 EXPOSE 80/tcp EXPOSE 80...# 如果WORKDIR不存在,及时它没有在后续Dockerfile指令中使用,它也会被创建。...简单的说,就是 Dockerfile 里用 ONBUILD 指定的命令, # 在本次构建镜像的过程中不会执行(假设镜像为 test-build), # 当有新的Dockerfile使用了之前构建的镜像FROM
CMD在Dockerfile中只能出现一次,如果有多个,只有最后一个会有效。通常放在dockerfile的最后面。...:$JAVA_HOME/lib:$JRE_HOME/lib ENV PATH $PATH:$JAVA_HOME/bin 定义变量,在后面的语句中使用 ENV JDK_VERSION 8u-91...比如: docker run -d -v mydata:/data xxxx 在这行命令中,就使用了 mydata 这个命名卷挂载到了 /data 这个位置,替代了 Dockerfile 中定义的匿名卷的挂载配置...注意: 当基础镜像变化后,使用ONBUILD的指令在各个项目都用这个 Dockerfile 重新构建镜像,会继承基础镜像的更新,就不必去更改所有的子镜像了。...如果该目录下没有所需文件,那么应该把所需文件复制一份过来。
一、关于Dockerfile 在Docker中创建镜像最常用的方式,就是使用Dockerfile。...> #安装httpd软件包 RUN yum -y update RUN yum -y install httpd #开启80端口 EXPOSE 80 #复制网站首页文件至镜像中web站点下 ADD...index.html /var/www/html/index.html #复制该脚本至镜像中,并修改其权限 ADD run.sh /run.sh RUN chmod 775 /run.sh #当启动容器时执行的脚本文件... 设置环境内环境变量,例如: ENV MYSQL_ROOT_PASSWORD 123456 ENV JAVA_HOME /usr/local/jdk1.8.0_45 2.7 ADD 拷贝文件或目录到镜像中... ADD html.tar.gz /var/www/html ADD https://xxx.com/html.tar.gz /var/www/html PS:如果是URL或压缩包,会自动下载或自动解压
RUN 指令最常见的用法是安装包用的apt-get,因为该指令会安装包,所以有几个问题需要注意 不要使用 RUN apt-get upgrade 或 dist-upgrade , 如果基础镜像中的某个包过时了...如果你确定某个特定的包比如 foo 需要升级,使用 apt-get install -y foo 就行,该指令会自动升级 foo 包。...,特别是在执行apt-get指令后 /var/cache/apt 和 /var/lib/apt/lists下面会缓存一些安装包; 删除中间文件:比如下载的压缩包 删除临时文件:如果命令产生了临时文件,也要及时删除...#安装完软件包清楚 `/var/lib/apt/list/` 缓存 rm -rf /var/lib/apt/lists/* rm -rf /var/cache/apt 12.构建缓存查找是否已经存在可重用的镜像...,如果有就使用现存的镜像不再重复创建 , 在开启缓存的情况下,内容不变的指令尽量放在前面;当然如果你不想在构建过程中使用缓存,你可以在 docker build 命令中使用--no-cache=true
install httpd && yum install ftp 这样在构建的时候会减少产生中间层镜像 EXPOSE 指定运行该镜像的容器使用的端口,可以是多个。...ONBUILD COPY index.html /var/www/html Dockerfile的构建过程 docker会从Dockerfile文件头FROM指定的基础镜像运行一个容器 然后执行一条指令...,对容器修改 接着执行类似docker commit的操作,创建新的镜像层 在基于刚创建的镜像运行一个新的容器 执行Dockerfile下一条指令,直到所有指令执行完毕 docker会删除中间层创建的容器...如果不想使用构建缓存,则在docker build中使用—no-cache选项。...还可以在Dockerfile中使用ENV REFRESH_DATE 2018-01-01来制定缓存刷新时间,更改这个时间,就会让后面的命令不使用缓存。
我之前部署我的博客项目(Django应用),没用Docker,直接借助的宝塔Linux服务器面板在服务器上部署的,部署起来也是十分的方便,使用了Django+Nginx+Supervisor+Gunicorn...我的博客是使用了容器互联的方式搭建 Django 容器栈。 网络架构 ?...也就是说你必须要做几件事: 在每个服务(应用)下编写Dockerfile; 在docker-compose.yml文件中配置相关的服务; run.sh 执行 docker-compose命令:build...:配置了环境变量,创建一个数据库(该数据库名为djangoblog,django在执行migrate操作时会用); volumes:数据卷,为了实现备份用的,/date/mysql 是主机目录,/var...,会先启动memcached,然后再启动db;二是如果执行docker-compose up db也会创建和启动memcached。
FROM指令必是Dockerfile文件中的首条命令,启动构建流程后,Docker将基于该镜像构建新镜像,FROM后的命令也会基于这个基础镜像。...FROM有以下限制: FROM必须是Dockerfile中第一条非注释命令 在一个Dockerfile文件中创建多个镜像时,FROM可以多次出现。...RUN指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache参数,如:docker build --no-cache。...6.ENV设置环境变量 指定环境变量,在镜像生成过程中会被后续 RUN 指令使用,在镜像启动的容器中也会存在。...如果基于 image-A 创建新的镜像时,新的 Dockerfile 中使用FROM image-A指定基础镜像,会自动执行 ONBUILD 指令的内容,等价于在后面添加了两条指令: FROM
为了更大兼容所有平台,我把时间同步写到Dockerfile中。...我将Composer直接安装在了php-fpm的镜像中,其实官方也提供了Composer的镜像,拉取Composer镜像执行也可以达到目的,因为我们使用Composer只是为了执行Composer命令来管理我们的包...,如果Composer单独是一个容器的话,我们在不用时,还可以将容器关掉;但是在这里,我直接将Composer装进php-fpm镜像中,主要是我的项目安装了一些PHP拓展,在编写composer.json...文件时,我定义了extension的依赖,这样Composer执行时会检查环境是否安装了这些依赖,所有如果我直接用Composer镜像的话,还需要把我用的拓展安装到镜像里,就麻烦多了,所以我直接在PHP...其它的参数: build定义了你的Dockerfile在哪里,如果没有写Dockerfile可以不用build,可以用images参数定义官方镜像,比如image:mysql:5.7; depends_on
一旦环境变量设置,就可以在Dockerfile后面的内容及容器运行后的应用中获取使用这个环境变量,ENV的写法也是=,语法为 ENV MY_NAME="John Doe" ENV...、bzip2、xz格式的压缩包,ADD指令将会自动解压缩这个压缩文件到目标路径去 2.5 ARG ARG设置的是构建时的参数,也可以理解为构建时的环境变量,与ENV的不同是只在构建时生效,生成的镜像中是不存在的...如果工作目录不存在,即使它没有在后续的Dockerfile指令中使用,它也会被创建 WORKDIR指令可以在Dockerfile中使用多次。...,那么将使用Docker镜像自带的命令及其参数 如果在容器配置中只设置了 command 但是没有设置 args,那么容器启动时只会执行该命令, Docker镜像中自带的命令及其参数会被忽略 如果在容器配置中只设置了...args,那么Docker镜像中自带的命令会使用该新参数作为其执行时的参数 如果在容器配置中同时设置了 command 与 args,那么Docker镜像中自带的命令及其参数会被忽略。
如果公司的私包比较少的话或者你想偷懒,可以考虑一下。...,会自动挂载到匿名卷。...dockerfile: Dockerfile ## 依赖的 Dockerfile 文件 image: cnpmjs.org # 镜像名称或 id volumes: - cnpm-files-volume...注意点:1、当你改变本地代码之后,先执行 docker-compose build 构建新的镜像,然后执行 docker-compose up -d 取代运行中的容器。...即下载模块文件时,先判断是否是私包(即包名是否有带 scope ),如果不是私包代理到上游 Registry,若是私包先判断服务器本地是否有该私包文件,如果不存在先去 OSS 下载到本地 nfs 目录下
RUN 指令最常见的用法是安装包用的apt-get,因为该指令会安装包,所以有几个问题需要注意。...如果你确定某个特定的包比如 foo 需要升级,使用 apt-get install -y foo 就行,该指令会自动升级 foo 包。...,特别是在执行apt-get指令后 /var/cache/apt 和 /var/lib/apt/lists下面会缓存一些安装包; 删除中间文件:比如下载的压缩包 删除临时文件:如果命令产生了临时文件,也要及时删除...#安装完软件包清楚 `/var/lib/apt/list/` 缓存 rm -rf /var/lib/apt/lists/* rm -rf /var/cache/apt 12.构建缓存查找是否已经存在可重用的镜像...,如果有就使用现存的镜像不再重复创建 , 在开启缓存的情况下,内容不变的指令尽量放在前面;当然如果你不想在构建过程中使用缓存,你可以在 docker build 命令中使用--no-cache=true
如果使用ADD,那么不仅仅是复制过去了,同时还会解压缩这个tar包。...ENV指令 大家看到ENV这个词应该差不多能明白它是什么意思了,ENV就是环境变量单词的缩写。在dockerfile里,我们也经常得定义一些环境变量。...如果后续万一参数有变化,只要改前面的ENV内容值即可,非常方便! 7. ARG指令 ARG指令就是用来传递变量用的,它一般结合docker build命令中的--build-arg一起使用。...USER root 这个命令很简单,但是要注意的是,使用USER指令,会影响RUN、CMD、ENTRYPOINT等指令,同时也会影响容器中主进程运行的用户。...大家只要在日常工作当中多用一两次,基本上就能写出很专业实用的dockerfile。这些指令我想也不是死的,随着docker的发展,我想未来肯定会出一些新的指令。但是目前这些指令,基本上是够用了。
,在企业实际工作当中,我们也一般使用Dockerfile来构建镜像 使用Dockerfile 如果说容器是现成的商品房,镜像就是样板房,那么Dockerfile文件就是构建房子的设计图纸,它来规定如何建造地基...#指定容器中多个需要被挂载的目录,会把这些目录映射到宿主机的多个随机目录上,实现数据的持久化和同步 VOLUME /var/data var/log #指定容器中的 var/log 目录挂载到宿主机上的...设置多个环境变量 示例:ENV JAVA_HOME /usr/java1.8/ ARG: #设置构建镜像是要传递的参数,ARG指令定义的参数,在docker build命令中以--build-arg...ENV 创建的变量不仅能够在构建镜像的过程中使用,在容器运行时也能够以环境变量的形式被应用程序使用 Dockerfile官方文档参考 https://docs.docker.com/engine/reference...里面写的不一样,在Dockerfile当中,涉及tomcat和jdk版本,均需要进行替换,如对应的压缩包名称,以及环境变量路径 编译Dockerfile文件,在本目录执行可以不写Dockerfile文件名称
FROM 指令必是 Dockerfile 文件中的首条命令,启动构建流程后,Docker 将会基于该镜像构建新镜像,FROM 后的命令也会基于这个基础镜像。...FROM 有以下限制: FROM 必须 是 Dockerfile 中第一条非注释命令 在一个 Dockerfile 文件中创建多个镜像时,FROM 可以多次出现。...tag 或 digest 是可选的,如果不使用这两个值时,会使用 latest 版本的基础镜像 2 RUN 执行命令 在镜像的构建过程中执行特定的命令,并生成一个中间镜像。...: 卷可以容器间共享和重用 容器并不一定要和其它容器共享卷 修改卷后会立即生效 对卷的修改不会对镜像产生影响 卷会一直存在,直到没有任何容器在使用它 VOLUME 让我们可以将源代码、数据或其它内容添加到镜像中...在大部分情况下,Dockerfile 会和构建所需的文件放在同一个目录中,为了提高构建的性能,应该使用 .gitignore 来过滤掉不需要的文件和目录。
如果我们在DockerFile中使用了CMD指令,则docker run命令之后会直接运行CMD指令,例如: docker run -it container_name 会在启动这个容器之后,直接运行/...如果我们在DockerFile中写明了目录,但是在docker run的时候不想使用这个目录应该怎么办?...答案是使用docker run -w /var/dir1 使用-w参数之后,会使用/var/dir1来覆盖我们DockerFile中的路径。...指令去覆盖DockerFile中的USER选项; 2、如果不指定USER选项,则默认是root用户 06 VOLUME VOLUME指令用来向基于镜像创建的容器添加卷。...在ADD文件的过程中,如果目的地址是以/结尾,那么DockerFile会认为源位置是一个目录,反之则认为源文件是一个文件。
可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。...大多情况下,应该将一个空目录作为构建上下文环境,并将 Dockerfile 文件放在该目录下。 在构建上下文中使用的 Dockerfile 文件,是一个构建指令文件。...在 Docker 构建镜像的第一步,docker CLI 会先在上下文目录中寻找.dockerignore文件,根据.dockerignore 文件排除上下文目录中的部分文件和目录,然后把剩下的文件和目录传递给...如果不想使用这些缓存镜像, 可以在构建时指定--no-cache参数,如:docker build --no-cache 2.4 ADD 将本地文件添加到容器中,tar类型文件会自动解压...,该镜像中的触发器将会被钥触发。
领取专属 10元无门槛券
手把手带您无忧上云