一、Docker从入门到精通之Docker Compose
Compose是一个用于定义和运行多容器Docker应用程序的工具。使用Compose,您可以使用YAML文件来配置应用程序的服务。然后,只需一个命令,就可以从配置中创建并启动所有服务。
用python构建一个简易网页统计网页点击量,docker-compose进行发布
Step1:创建项目
Step2:创建Dockerfile文件
Step3:在docker-compose.yml中定义services
Step4:用Docker compose构建和运行app
Step5:绑定一个数据卷
将当前目录与容器的/code目录绑定,这样可以动态修改代码
Step6:重新构建和运行app
先docker-compose down停止服务,在构建
用YAML文件定义服务,默认文件是docker-compose.yml,包含4个顶级key,version、services、networks、volumes
参考compose-spec/spec.md at master· compose-spec/compose-spec· GitHub
指定本 yml依从的 compose版本
定义多个应用服务,包含环境配置、镜像构建等
指定构建镜像的路径
定义服务的block IO配置,参考compose-spec/spec.md at master· compose-spec/compose-spec· GitHub
指定自定义容器名称
定义服务间启动或关闭的依赖关系
覆盖容器启动的默认命令
domainname declares a custom domain name to use for the service container.
覆盖容器默认的entrypoint
从文件中添加环境变量到容器,可以是一个或多个文件
文件格式:
添加环境变量
暴露端口,但不映射到宿主机,只被连接的服务访问,仅可以指定内部端口
用于检测 docker服务是否健康运行。
指定容器运行的镜像
设置容器标签
连接到另一个容器的网络,简单将就是让容器相互连通
服务的日志记录配置,driver:指定服务容器的日志记录驱动程序,默认值为json-file。有以下三个选项
仅在 json-file驱动程序下,可以使用以下参数,限制日志得数量和大小。
syslog驱动程序下,可以使用 syslog-address指定日志接收地址。
设置网络模式,格式如下:
配置容器连接的网络
指定ip地址
端口映射,映射主机与容器端口,格式:Host:ontainer
容器重启策略
存储敏感数据,比如密码
将主机数据卷挂载到容器
覆盖容器工作目录
二、详解Docker——你需要知道的Docker进阶知识五
Dockerfile是一个文本文件,其中包含了构建 Docker镜像需要执行的命令序列。使用 docker build命令从 Dockerfile中读取指令来构建镜像。
构建镜像时,该过程的第一件事是将 Dockerfile文件所在目录下的所有内容发送给 Docker守护进程。所以大多数情况下,最好创建一个新的目录,在其中保存 Dockerfile,以及构建镜像所需的其它文件。Dockerfile文件所在目录也被称为构建上下文(context)。
使用 FROM指令指定一个基础镜像,后续指令将在此镜像基础上运行:
在 Dockerfile中可以指定一个用户,后续的 RUN, CMD以及 ENTRYPOINT指令都会使用该用户身份去执行,该用户必须已存在。
除了指定用户之外,还可以使用 WORKDIR指定当前工作目录(CWD), RUN, CMD, COPY, ADD指令将在指定的工作目录中执行。
RUN指令用于执行命令,该指令有两种形式:
例如我们执行更新命令:
CMD的使用方式跟 RUN类似,不过在一个 Dockerfile文件中只能有一个 CMD指令,如果有多个,则只有最后一个会生效。该指令指定了启动容器时要执行的命令,例如:
可以在 docker run时指定命令来覆盖默认的 CMD命令,比如 docker run image echo"hello shiyanlou"。
CMD指令还有一种特殊用法。在 Dockerfile中,如果使用 ENTRYPOINT指令指定了入口命令,则 CMD指令的内容会作为 ENTRYPOINT指令的参数:
ENTRYPOINT指令会覆盖 CMD指令作为容器运行时的默认指令,并且该指令不会被 docker run时指定的指令覆盖,如下示例:
上述文件构建出来的镜像,使用 docker run image等同于 docker run image ls-a-l。使用 docker run image-i-s等同于 docker run image ls-a-i-s。即 CMD指令的值会被当作 ENTRYPOINT指令的参数附加到 ENTRYPOINT指令的后面,只有 CMD指令可以被覆盖。
COPY和 ADD都用于将构建上下文中的文件,目录等**到镜像中。使用方式如下:
``可以指定多个,但是其路径不能超出构建上下文范围,即必须在 Dockerfile同级或子目录中。
不需要预先存在,不存在时会自动创建,如果使用相对路径,则为相对于工作目录的路径。
COPY和 ADD的不同之处在于,ADD可以添加远程文件,并且 ``可以是 gzip或 tar等格式的压缩文件,添加时会自动进行解压。
ENV指令用于设置环境变量:
VOLUME指令指定要创建的挂载路径,在容器运行时,将为每个挂载路径创建一个匿名卷并挂载上去:
上述指令将会在容器运行时,创建两个匿名卷,并分别挂载到容器中的/data1和/data2路径。
学习了上面这些常见的 Dockerfile指令之后,可以使用这些指令来构建一个镜像。如下所示,构建一个提供 ssh服务的镜像:
构建镜像
查看镜像
启动容器
查看已经启动的容器
测试远程登录
Compose是运行由多个容器组成的 Docker应用的工具,使用 Compose可以一次启动一组有关联的服务,每个服务由来自同一镜像的单个或多个容器组成。
在复杂应用中,应用一般由多个服务(service)组成,例如一个网站后台通常包含 Web服务、数据库服务、缓存服务、消息队列服务等。
使用 Compose的步骤如下:
目前有三种版本的 Compose文件格式:
下载 docker-compose-Linux-x86_64
下载成功后,为了方便使用,可以将其添加到 PATH路径下
执行完成后,就能够在终端下直接使用 docker-compose命令了:
接下来我们将创建一个 Web应用,该应用包含两个容器:
项目目录结构如下:
首先编辑 app/web/web.py文件,写入下面的内容:
上述代码创建了一个简单的 Web应用。该应用会连接 redis服务,在访问/页面时,自动将变量 number加 1。
编辑 app/web/requirements.txt文件,输入如下内容:
requirements.txt文件存放了 Web应用依赖的第三方库包的名称和版本信息。
编辑 app/web/Dockerfile文件,添加如下内容
上述 Dockerfile定义了 Web应用镜像,该镜像基于 python:2.7基础镜像,在其基础上安装了应用依赖的库包,并通过 CMD指令指定了应用的启动命令。
编辑 app/docker-compose.yml文件:
该 docker-compose.yml文件定义了两个服务,分别为 web和 redis服务,并且配置了 web服务的端口映射和挂载目录。 depends_on定义了依赖关系,被依赖的服会先启动。
进入 app目录,执行 docker-compose up命令来启动应用:
启动成功后,就可以打开网址 127.0.0.1:8001来访问 Web应用了。
另外一些命令:
三、Docker(2)——构建镜像命令解析
Dockerfile中包括 FROM、 MAINTAINER、 RUN、 CMD、 EXPOSE、 ENV、 ADD、 COPY、 ENTRYPOINT、 VOLUME、 USER、 WORKDIR、 ONBUILD、 LABEL等14个指令。
1.FROM
格式: FROM image或 FROM image:tag
含义:Dockerfile中第一条指令必须是FROM指令,且在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令。
docker17.05版本开始,dockerfile中允许使用多个FROM指令,主要是解决编译环境和运行环境分开的问题。 https://www.cnblogs.com/leoyang63/articles/13733967.html
2.MAINTAINER
格式: MAINTAINER user_name user_email
含义:指定维护者信息,作者以及作者的邮箱地址
3.RUN
支持两种格式:
RUN command
RUN ["EXECUTABLE","PARAM1","PARAM2".....]
含义:前者在shell终端中运行命令,/bin/sh-c command,例如:/bin/sh-c"echo hello";后者使用 exec执行,指定其他运行终端使用 RUN["/bin/bash","-c","echo hello"]。每条RUN指令将当前的镜像基础上执行指令,并提交为新的镜像,命令较长的时候可以使用 \来换行。
4.CMD
支持三种格式:
CMD ["executable","param1","param2"],使用exec执行,这是推荐的方式。
CMD command param1 param2,在/bin/sh中执行。
CMD ["param1","param2"],提供给 ENTERYPOINT的默认参数。
含义: CMD用于指定容器启动时执行的命令,每个 Dockerfile只能有一个 CMD命令,多个 CMD命令只执行最后一个。若容器启动时指定了运行的命令,则会覆盖掉 CMD中指定的命令。
5.EXPOSE
格式: EXPOSE port [port2,port3,...]
含义:例如 EXPOSE 80这条指令告诉Docker服务器暴露80端口,供容器外部连接使用。在启动容器的使用使用-P,Docker会自动分配一个端口和转发指定的端口,使用-p可以具体指定使用哪个本地的端口来映射对外开放的端口。
6.ENV
格式: EVN key value
含义:用于指定环境变量,这些环境变量,后续可以被 RUN指令使用,容器运行起来之后,也可以在容器中获取这些环境变量,例如:
ENV word hello
RUN echo$word
7.ADD
格式: ADD src dest
含义:该命令将**指定本地目录中的文件到容器中的 dest中, src可以是是一个绝对路径,也可以是一个 URL或一个 tar文件, tar文件会自动解压为目录。
8.COPY
格式为: COPY src desc
含义:**本地主机src目录或文件到容器的desc目录,desc不存在时会自动创建。
9.ENTRYPOINT
支持两种格式:
ENTRYPOINT ["executable","param1","param2"]
ENTRYPOINT command param1,param2
含义:后者会在shell中执行。用于配置容器启动后执行的命令,这些命令不能被 docker run提供的参数覆盖。和 CMD一样,每个Dockerfile中只能有一个 ENTRYPOINT,当有多个时最后一个生效。
10.VOLUME
格式: VOLUME ["/data"]
含义:作用是创建在本地主机或其他容器可以挂载的数据卷,用来存放数据。
11.USER
格式: USER username
含义:指定容器运行时的用户名或UID,后续的RUN也会使用指定的用户。要临时使用管理员权限可以使用sudo。在USER命令之前可以使用RUN命令创建需要的用户。
例如: RUN groupadd-r docker&& useradd-r-g docker docker
12.WORKDIR
格式: WORKDIR/path
含义:为后续的 RUN CMD ENTRYPOINT指定配置工作目录,可以使用多个 WORKDIR指令,若后续指令用得是相对路径,则会基于之前的命令指定路径。
13.ONBUILD
格式: ONBUILD [INSTRUCTION]
含义:该配置指定当所创建的镜像作为其他新建镜像的基础镜像时所执行的指令,例如下面的Dockerfile创建了镜像A:
ONBUILD ADD./app
ONBUILD RUN python app.py
基于镜像A创建新的镜像时,新的Dockerfile中使用 from A指定基镜像时,会自动执行 ONBBUILD指令内容,等价于在新的要构建镜像的Dockerfile中增加了两条指令:
FROM A
ADD./app
RUN python app.py
14.LABEL
格式: LABEL<label_name>="<label_value>"
含义:用来给镜像以键值对的形式添加一些元数据(metadata),如明镜像的作者、文档地址,commit ID。
docker覆盖镜像默认命令之docker entrypoint的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于详解Docker——你需要知道的Docker进阶知识五、docker覆盖镜像默认命令之docker entrypoint的信息别忘了在本站进行查找哦。