docker-compose 的使用
Dockerfile 记录单个镜像的构建过程, docker-compse.yml 记录一个项目(project, 一般是多个镜像)的构建过程。
一、Dockerfile
一些特殊说明
1)docker build [选项] 上下文路径
docker build的构建原理:
Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 DockerRemote API,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举。
当我们进行镜像构建的时候,并非所有定制都会通过 RUN 指令完成,经常会需要将一些本地文件复制进镜像,比如通过 COPY 指令、 ADD 指令等。而 docker build 命令构建镜像,其实并非在本地构建,而是在服务端,也就是 Docker 引擎中构建的。那么在这种客户端/服务端的架构中,如何才能让服务端获得本地文件呢?
这就引入了上下文的概念。当构建的时候,用户会指定构建镜像上下文的路径, docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样Docker 引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。
如docker build -t nginx:v3 . 这里的. 实际上是在指定上下文的目录, docker build 命令会将该目录下的内容打包交给 Docker 引擎以帮助构建镜像
一般来说,应该将Dockerfile置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来;如果目录下有些东西确实不需要构建时传给Docker引擎,那么可以写一个.dockerignore文件,该文件用于剔除不需要作为上下文传递给Docker引擎的。
2)FROM 镜像名(即base镜像) 中有CMD 且之后的Dockerfile中也有CMD,那么base镜像中的CMD不会执行,只会执行Dockerfile中的最后一个CMD
可在dockerhub查看base 镜像的构建步骤

Dockerfile指令
FROM 镜像名(特别地,除了选择现有镜像为基础镜像外,Docker 还存在一个特殊的镜像,名为 scratch 。这个镜像是虚拟的概念,并不实际存在,它表示一个空白的镜像)
WORKDIR 路径 :相当于cd
ADD :从build context复制文件到镜像,如果src是归档文件会被自动解压到dest,官方推荐使用copy
COPY: src dest 将sr(只能指定build context中的文件或目录)复制到镜像
RUN:是在 docker build时运行,等同于在终端操作的 shell 命令
CMD:在docker run 时运行,如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
ENTRYPOINT:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,使用说明详见如下链接
https://www.runoob.com/docker/docker-dockerfile.html
ENV:设置环境变量
VOLUME:
ARG:
EXPOSE:
二、docker-compse
1.安装docker-compose,参考官方教程:https://docs.docker.com/compose/install/
#可在github上查看Docker Compose的所有发行版本(https://github.com/docker/compose/releases),要安装其他版本的 Compose,请替换下述命令中的1.24.1
[chenjl@ipha-dev71- ~]$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[chenjl@ipha-dev71- ~]$ cd /usr/local/bin
[chenjl@ipha-dev71- bin]$ ll
total
-rw-r--r-- root root Sep : docker-compose
[chenjl@ipha-dev71- bin]$ sudo chmod +x /usr/local/bin/docker-compose # 赋予所有用户可执行权限
[chenjl@ipha-dev71- bin]$ docker-compose version # 查看docker-compose版本
docker-compose version 1.24., build 4667896b
docker-py version: 3.7.
CPython version: 3.6.
OpenSSL version: OpenSSL 1.1.0j Nov

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
在此过程中遇到一个问题:我是使用chenjl安装的docker-compose,执行docker-compose version能正确显示docker-compose版本,但是用切换到root执行docker-compose version,却提示“docker-compose: command not found”,然后我执行 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose 后,该问题就解决了(我也不明白是什么原因,这里先记录一下)
2.卸载docker-compose

3.使用实例
源码:https://github.com/wmm0165/composetest

docker-compose 的使用的更多相关文章
- Docker compose学习笔记
一.compose compose 作用 你的应用可能需要很多个服务,比如web服务,数据库服务,缓存服务等等.我们可以把这些服务放到单独的容器里面,如果手工去配置这些服务会有些麻烦,docker c ...
- docker compose 笔记
https://www.youtube.com/watch?v=Uez88TWOECg 是基于这个视频做的笔记. Docker Compose: Compose is a tool for defin ...
- 利用docker compose启动gitlab及runner
添加docker compose配置文件 新建文件docker-compose.yml,输入如下内容: gitlab: image: 'gitlab/gitlab-ce:latest' contain ...
- Docker Compose to CoreOS
taken from https://docs.docker.com/compose/install/ the only thing is that /usr is read only, but /o ...
- Docker Compose—简化复杂容器应用的利器
Compose是用于定义和运行复杂Docker应用的工具.你可以在一个文件中定义一个多容器的应用,然后使用一条命令来启动你的应用,然后所有相关的操作都会被自动完成. 1. 安装Docker和Compo ...
- .NET遇上Docker - 使用Docker Compose组织Ngnix和.NETCore运行
本文工具准备: Docker for Windows Visual Studio 2015 与 Visual Studio Tools for Docker 或 Visual Studio 2017 ...
- Docker Compose容器编排
Compose是Docker官方的开源项目,可以实现对Docker容器集群的快速编排.Compose 中有两个重要的概念:服务(service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实 ...
- Docker(四):Docker 三剑客之 Docker Compose
前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...
- Spring Boot 2.0(五):Docker Compose + Spring Boot + Nginx + Mysql 实践
我知道大家这段时间看了我写关于 docker 相关的几篇文章,不疼不痒的,仍然没有感受 docker 的便利,是的,我也是这样认为的,I know your felling . 前期了解概念什么的确实 ...
- Docker学习笔记 - Docker Compose 脚本命令
Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...
随机推荐
- Docker在IDEA中的使用以及如何部署到服务器
IDEA中实现一键部署到服务器 点击运行自动部署到服务器: 服务器上安装docker 1,添加yum源 # yum install epel-release –y# yum clean all# yu ...
- 微信小程序删除数组(删除对应指定下标数组中的元素)
.js 使用arr.splice(id,1)删除 // 删除数组中指定下标 dele_time: function (e) { console.log('删除') console.log(e.curr ...
- Sentinel Core流程分析
上次介绍了Sentinel的基本概念,并在文章的最后介绍了基本的用法.这次将对用法中的主要流程和实现做说明,该部分主要涉及到源码中的sentinel-core模块. 1.token获取 如上为t ...
- Spring 梳理-el表达式和jstl
JSP中有这么几种元素 1: Scriptlet <% ... %> 2: 声明元素 <%! ... %> 3: Java表达式 <%= ... %> 4: 指令元 ...
- mysql replace into使用
使用mysql插入数据时,我们通常使用的是insert into来处理,replace into有时可以替代insert into功能,但replace into也有自己的用法 准备一张测试表: CR ...
- unzip 命令指定解压路径
在使用unzip进行文件包解压,可以用来解压zip/jar/war包类型,有时解压时需要解压到指定路径时可以使用参数 -d 来指定,例如: unzip services-bak.jar -d ./we ...
- 阿里云服务器CentOS6.9安装Mysql
上篇讲了CentOS6.9安装tomcat,这篇来讲mysql的安装 1.查看CentOS是否安装了MySQL yum list installed | grep mysql //查看CentOS是否 ...
- 阿里云服务器CentOS6.9安装SVN
1.安装SVN yum -y install subversion 出现Complete表明安装成功 2.创建SVN仓库目录 mkdir -p /data/svn/repositories/yyksv ...
- 学 Java 网络爬虫,需要哪些基础知识?
说起网络爬虫,大家想起的估计都是 Python ,诚然爬虫已经是 Python 的代名词之一,相比 Java 来说就要逊色不少.有不少人都不知道 Java 可以做网络爬虫,其实 Java 也能做网络爬 ...
- Docker 为非root用户授权
Docker 为非root用户授权: 当运行docker pull busybox时候,会提示sky用户无法调用docker. 那么应该把sky用户加入docker用户组,不过在添加的时候,又提示了如 ...