石榴河 發表於 2019-5-15 12:36:00

docker-compose.yml的使用

<p>docker-compose.yml包含version、services、networks3大部分</p>
<p>&nbsp;</p>
<p>services的书写规则</p>
<p>1.iamge</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">services:
   web:                  # 服务名称,用户自定义
   image: busybox           # 镜像名称/镜像ID,如果本地不存在compose会拉取镜像</span>  <br><br># 以下格式都可<br>   images: redis<br>  images: mysql:latest<br>   images: example-registry.com:4000/postgresql        </pre>
</div>
<p>2.build-------基于Dockerfile,指定Dockerfile所在路径,Compose会利用它自动构建镜像,然后启动服务容器</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 绝对路径</span>
build: /path/<span style="color: rgba(0, 0, 0, 1)">build


</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 相对路径</span>
build:./<span style="color: rgba(0, 0, 0, 1)">build

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 设定上下文跟目录,以此目录指定Dockerfile</span>
<span style="color: rgba(0, 0, 0, 1)">build:
    context: ..</span>/<span style="color: rgba(0, 0, 0, 1)">
    dockerfile: path</span>/<span style="color: rgba(0, 0, 0, 1)">Dockerfile

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 给Dockerfile构建的镜像命名</span>
build: ./<span style="color: rgba(0, 0, 0, 1)">dir
images: nginx:latest

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 构建过程中指定环境变量,构建成功后取消</span>
<span style="color: rgba(0, 0, 0, 1)">build:
   context: .
   args:
      buildno: </span>1<span style="color: rgba(0, 0, 0, 1)">
      password: secret

</span><span style="color: rgba(0, 0, 255, 1)">or</span><span style="color: rgba(0, 0, 0, 1)">

build:
   context: .
   args:
      </span>- buildno=1
      - password=<span style="color: rgba(0, 0, 0, 1)">secret

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">#与ENV不同,ARG允许空值</span></pre>
</div>
<p>3.command-------覆盖容器启动后默认执行的命令</p>
<div class="cnblogs_code">
<pre>command: bundle <span style="color: rgba(0, 0, 255, 1)">exec</span> thin -p 3000

<span style="color: rgba(0, 0, 255, 1)">or</span><span style="color: rgba(0, 0, 0, 1)">写成dockerfile的格式

command: </pre>
</div>
<p>4.container_name-----容器名称</p>
<div class="cnblogs_code">
<pre>container_name: app</pre>
</div>
<p>5.depends_on-------容器依赖</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 基于redis和db服务启动web服务</span>
version: <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">2</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
services:
   web:
   build: .
   depends_on:
       </span>-<span style="color: rgba(0, 0, 0, 1)"> db
       </span>-<span style="color: rgba(0, 0, 0, 1)"> redis
   redis:
      image: redis
   db:
      image: postgres</span></pre>
</div>
<p>6.dns --------</p>
<div class="cnblogs_code">
<pre>dns: 8.8.8.8

<span style="color: rgba(0, 0, 255, 1)">or</span><span style="color: rgba(0, 0, 0, 1)">

dns:
    </span>- 8.8.8.8
    - 9.9.9.9<span style="color: rgba(0, 0, 0, 1)">

dns_search: example.com
dns_search:
    </span>-<span style="color: rgba(0, 0, 0, 1)"> xxxx
    </span>- xxxx</pre>
</div>
<p>7. tmpfs--------挂在临时目录到容器内部,与run参数效果一致</p>
<div class="cnblogs_code">
<pre>tmpfs: /<span style="color: rgba(0, 0, 0, 1)">run
tmpfs:
   </span>- /<span style="color: rgba(0, 0, 0, 1)">run
   </span>- /tmp</pre>
</div>
<p>8.entrypoint--------覆盖Dockerfile中ENTRYPOINTmingling</p>
<div class="cnblogs_code">
<pre>entrypoint: /code/entrypoint.sh<br><br># <br><code class="ruby"><span class="hljs-symbol">entrypoint:</span></code>&nbsp;<br>- php<br>- -d</pre>
</div>
<p>9.env_file--------指定配置文件,设置compose的变量(可通过docker-compose -f FILE指定配置文件)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">env_file: .env
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 若与environment指令冲突,以后者为准<br><br># 可设置多个<br>env_file:<br>-./xx.env<br>-xx.env<br><br># 此变量不对build构建过程生效</span></pre>
</div>
<p>10.environment--------设置镜像变量,启动后的容器会包含这些变量设置</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">environment:
   RACK_ENV: development
   SHOW: </span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">true</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">
   SESSION_SECRET:

environment:
   </span>- RACK_ENV=<span style="color: rgba(0, 0, 0, 1)">development
   </span>- SHOW=<span style="color: rgba(0, 0, 0, 1)">true
   </span>- SESSION_SECRE</pre>
</div>
<p>11.external_links-------------让compose项目里面的容器链接到项目配置外部的容器(外部容器中必须至少有一个容器链接到项目内服务的同一个网络里)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">external_links:
   </span>-<span style="color: rgba(0, 0, 0, 1)"> redis_1
   </span>-<span style="color: rgba(0, 0, 0, 1)"> project_db_1:mysql
   </span>- project_db_1:postgresql</pre>
</div>
<p>12.exra_hosts-----------添加主机名标签(向/etc/hosts文件中添加纪录)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">extra_hosts:
   </span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">mysql:ip</span><span style="color: rgba(128, 0, 0, 1)">"</span>
   - <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">nginx:ip</span><span style="color: rgba(128, 0, 0, 1)">"</span>


<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 启动容器后查看内部hosts</span>
<span style="color: rgba(0, 0, 0, 1)"> ip mysql
ip nginx</span></pre>
</div>
<p>13.links-----------链接到其它服务器中的容器</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">links:
</span>-<span style="color: rgba(0, 0, 0, 1)"> db
</span>-<span style="color: rgba(0, 0, 0, 1)"> db:mysql
</span>- redis<br># 使用的别名会自动在容器的/etc/hosts里创建<br>ip db<br>ip mysql<br>ip redis</pre>
</div>
<p>14.logging--------配置日志服务</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">logging:
driver: syslog
options:
      syslog</span>-address: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">tcp://ip</span><span style="color: rgba(128, 0, 0, 1)">"<br><br># 默认的dirver是json-file,可通过docker-compose logs显示日志</span></pre>
</div>
<p>15.ports---------映射端口(HOST:CONTAINER)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">ports:
   </span>- <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">3000</span><span style="color: rgba(128, 0, 0, 1)">"</span>
   - <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">8000:80</span><span style="color: rgba(128, 0, 0, 1)">"</span>
   - <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2222:22</span><span style="color: rgba(128, 0, 0, 1)">"</span>
   - <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">127.0.0.1:8080:8080</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p>16.volumes-------挂载一个目录或者已经存在的数据卷容器(HOST:CONTAINER/HOST:CONTAINER:ro,后者设定数据卷只读,可保护宿主机器的文件系统)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">volumes:
</span>//<span style="color: rgba(0, 0, 0, 1)"> 只是指定一个路径,Docker 会自动在创建一个数据卷(这个路径是容器内部的)。
</span>- /var/lib/<span style="color: rgba(0, 0, 0, 1)">mysql

</span>//<span style="color: rgba(0, 0, 0, 1)"> 使用绝对路径挂载数据卷
</span>- /opt/data:/var/lib/<span style="color: rgba(0, 0, 0, 1)">mysql

</span>//<span style="color: rgba(0, 0, 0, 1)"> 以 Compose 配置文件为中心的相对路径作为数据卷挂载到容器。
</span>- ./cache:/tmp/<span style="color: rgba(0, 0, 0, 1)">cache

</span>// 使用用户的相对路径(~/ 表示的目录是 /home/&lt;用户目录&gt;/ 或者 /root/<span style="color: rgba(0, 0, 0, 1)">)。
</span>- ~/configs:/etc/configs/<span style="color: rgba(0, 0, 0, 1)">:ro

</span>//<span style="color: rgba(0, 0, 0, 1)"> 已经存在的命名的数据卷。
</span>- datavolume:/var/lib/mysql<br><br># 从其他容器或者服务挂在数据卷<br>volumes_from:<br>- service_name<br>- service_name: ro<br>- container: container_name<br>- container: container_name:rw&nbsp;</pre>
</div>
<p>17.network_mode-------网络模式:</p>
<div class="cnblogs_code">
<pre>network_mode: <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">bridge</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
network_mode: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">host</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
network_mode: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">none</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
network_mode: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">service:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">
network_mode: </span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">container:</span><span style="color: rgba(128, 0, 0, 1)">"</span></pre>
</div>
<p>18.networks----------加入指定网络</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">services:
some</span>-<span style="color: rgba(0, 0, 0, 1)">service:
    networks:
   </span>- some-<span style="color: rgba(0, 0, 0, 1)">network
   </span>- other-network</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>docker compose常用命令</p>
<p>docker-compose up -d&nbsp; # 在后台启动服务</p>
<p>docker-compose ps&nbsp; &nbsp;# 查看启动的服务</p>
<p>docker-compose stop #停止服务</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查看帮助</span>
docker-compose -<span style="color: rgba(0, 0, 0, 1)">h

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> -f指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定。</span>
docker-compose -f docker-compose.yml up -<span style="color: rgba(0, 0, 0, 1)">d

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">启动所有容器,-d 将会在后台启动并运行所有的容器</span>
docker-compose up -<span style="color: rgba(0, 0, 0, 1)">d

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">停用移除所有容器以及网络相关</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose down

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">查看服务容器的输出</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose logs

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">列出项目中目前的所有容器</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose ps

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">构建(重新构建)项目中的服务容器。服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。可以随时在项目目录下运行 docker-compose build 来重新构建服务</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose build

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">拉取服务依赖的镜像</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose pull

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">重启项目中的服务</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose restart

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">删除所有(停止状态的)服务容器。推荐先执行 docker-compose stop 命令来停止容器。</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose rm

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">在指定服务上执行一个命令。</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose run ubuntu ping docker.com

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">设置指定服务运行的容器个数。通过 service=num 的参数来设置数量</span>
docker-compose scale web=3 db=2

<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">启动已经存在的服务容器。</span>
docker-<span style="color: rgba(0, 0, 0, 1)">compose start

</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器。</span>
docker-compose stop</pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/ray-mmss/p/10868754.html
頁: [1]
查看完整版本: docker-compose.yml的使用