linux 学习笔记-104-docker-用 docker compose 部署服务,docker compose 示例

发布于 2018-06-06  212 次阅读


用 docker compose 部署服务

docker compose 可以方便我们快捷高效地管理容器的启动、停止、重启等操作,它类似于 linux 下的 shell 脚本,基于 yaml 语法,在该文件里我们可以描述应用的架构,比如用什么镜像、数据卷、网络模式、监听端口等信息。我们可以在一个 compose 文件中定义一个多容器的应用(比如 jumpserver),然后通过该 compose 来启动这个应用

安装 compose

[root@am-01:~#] curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100   617    0   617    0     0     74      0 --:--:--  0:00:08 --:--:--   163

100 8649k  100 8649k    0     0  35845      0  0:04:07  0:04:07 --:--:-- 68373

[root@am-01:~#] chmod 755 /usr/local/bin/docker-compose

[root@am-01:~#] docker-compose version

docker-compose version 1.17.0-rc1, build a0f95af

docker-py version: 2.5.1

CPython version: 2.7.13

OpenSSL version: OpenSSL 1.0.1t  3 May 2016

#从远程仓库下载 docker-compose,并放到/usr/local/bin 目录下,给予 755 权限,查看一下版本

#Compose 区分 Version 1 和 Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。Version 2 支持更多的指令。Version 1 没有声明版本默认是"version 1"。Version 1 将来会被弃用

docker compose 示例

例子样本:

https://coding.net/u/aminglinux/p/yuanke_centos7/git/blob/master/25docker/docker-compose.yml

docker-compose 语法参考文档:

http://www.web3.xin/index/article/182.html

通过一个例子学习 docker-compose

[root@am-01:~#] vim docker-compose.yml

version: "2"

#声明版本

services:

#说明接下来需要针对某些容器进行操作

  app1:

#第一个容器的名称

    image: centos_nginx

#指定镜像

    ports:

      - "8888:80"

#类似-p 参数,做端口映射

    networks:

      - "net1"

#指定使用哪种网络模式,在下面的 networks 模块有做声明

    volumes:

      - /data/:/data

#类似-v 选项,做目录映射

#centos_nginx 镜像包含了"entrypoint: tail -f /etc/passwd",所以运行起来后是可以保持运行的

  app2:

    image: centos

    networks:

      - "net2"

    volumes:

      - /data/:/data1

    entrypoint: tail -f /etc/passwd

#这里的"entrypoint: tail -f /etc/passwd"能使容器保持运行,要不然容器运行完上面的指令后就会停止运行

networks:

  net1:

    driver: bridge

  net2:

    driver: bridge

注释掉 app2 的"entrypoint: tail -f /etc/passwd"

[root@am-01:~#] vim docker-compose.yml

#    entrypoint: tail -f /etc/passwd

[root@am-01:~#] docker-compose up -d

Creating root_app2_1 ...

Creating root_app1_1 ...

Creating root_app1_1

Creating root_app2_1 ... done

[root@am-01:~#] docker-compose ps

   Name                  Command               State           Ports       

----------------------------------------------------------------------------

root_app1_1   /bin/sh -c /usr/local/ngin ...   Up       0.0.0.0:8888->80/tcp

root_app2_1   /bin/bash                        Exit 0                      

#运行 docker-compose,可以见到,注释掉"entrypoint: tail -f /etc/passwd"会使 app2 运行完之后就停止

#"docker-compose up -d"运行容器

#"docker-compose ps"查看所有容器

不注释 app2 的"entrypoint: tail -f /etc/passwd"

[root@am-01:~#] docker-compose stop

Stopping root_app1_1 ... done

[root@am-01:~#] docker-compose rm -f

Going to remove root_app2_1, root_app1_1

Removing root_app2_1 ... done

Removing root_app1_1 ... done

[root@am-01:~#] vim docker-compose.yml

    entrypoint: tail -f /etc/passwd

[root@am-01:~#] docker-compose up -d

Creating root_app2_1 ...

Creating root_app1_1 ...

Creating root_app2_1

Creating root_app1_1 ... done

[root@am-01:~#] docker-compose ps

   Name                  Command               State          Ports       

---------------------------------------------------------------------------

root_app1_1   /bin/sh -c /usr/local/ngin ...   Up      0.0.0.0:8888->80/tcp

root_app2_1   tail -f /etc/passwd              Up 

#"docker-compose stop"停止运行容器

#"docker-compose rm -f"删除所有的容器

#可以见到,不注释 app2 的"entrypoint: tail -f /etc/passwd",app2 可以一直运行