使用docker compose部署服务

谈到微服务的话题,技术上我们往往会涉及到多服务、多容器的部署与管理。
Docker 有三个主要的作用:Build, Ship和Run。使用docker compose我们可以在Run的层面解决很多实际问题,如:通过创建compose(基于YUML语法)文件,在这个文件上面描述应用的架构,如使用什么镜像、数据卷、网络、绑定服务端口等等,然后再用一条命令就可以管理所有的服务(如启动、停止、重启、日志监控等等)。
本文通过发布3个APP(App1,App2,App3),来演示Docker在服务发布、网络、共享分区以及信息隔离与连通方面的工作:
1.安装Compose:

[root@docker ~]# curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@docker ~]# docker-compose version
docker-compose version 1.9.0, build 2585387
docker-py version: 1.10.6
CPython version: 2.7.9
OpenSSL version: OpenSSL 1.0.1t  3 May 2016

2.服务物理框架

说明:
a.Container1和2共在一个network namespace(netName1)内,Container3独立network namespace(netName2)
b.Container1挂载了一个系统卷(/opt/conf)到/mnt
c.Container3挂载了一个系统卷(./app/web)到/usr/share/nginx/html
c.Container1,2,3 nginx监听端口分别为:8080,8081,8082

3.docker-compose.yml 内容

[[email protected] compose]# more docker-compose.yml 
version: ‘2‘
services:
  App1:
    image: nginx
    ports:
      - "8080:80"
    networks:
      - "netName1"
    volumes:
      - /opt/conf/:/mnt
  App2:
    image: nginx
    ports:
      - "8081:80"
    networks:
      - "netName1"
    volumes:
      - /opt/conf/:/mnt
  App3:
    image: nginx
    ports:
      - "8082:80"
    networks:
      - "netName2"
networks:
  netName1:
    driver: bridge
  netName2:
    driver: bridge

4.运行

[root@docker compose]# docker-compose up
Creating network "compose_netName1" with driver "bridge"
Creating network "compose_netName2" with driver "bridge"
Creating volume "compose_vol1" with local driver
Creating compose_App2_1
Creating compose_App1_1
Creating compose_App3_1

在后台运行:[[email protected] compose]# docker-compose up -d

5.查看容器运行状态

[[email protected] compose]# docker-compose ps
     Name              Command          State               Ports
-----------------------------------------------------------------------------
compose_App1_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:8080->80/tcp
compose_App2_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:8081->80/tcp
compose_App3_1   nginx -g daemon off;   Up      443/tcp, 0.0.0.0:8082->80/tcp

其他命令:

[root@docker compose]# docker-compose restart #重启所有容器
[root@docker compose]# docker-compose restart App1  #重启App1
[root@docker compose]# docker-compose stop #停止所有容器
[root@docker compose]# docker-compose stop App1  #停止App1

6.验证网络隔离:
a.到App1 ping App2

[[email protected] compose]# docker-compose exec App1 bash
[email protected]:/# ping App2
PING App2 (172.18.0.3): 56 data bytes
64 bytes from 172.18.0.3: icmp_seq=0 ttl=64 time=0.059 ms
64 bytes from 172.18.0.3: icmp_seq=1 ttl=64 time=0.108 ms
64 bytes from 172.18.0.3: icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from 172.18.0.3: icmp_seq=3 ttl=64 time=0.062 ms

成功ping通
b.到App2 ping App1和App3

[[email protected] compose]# docker-compose exec App2 bash
[email protected]1905b2a875e3:/# ping App1
PING App1 (172.18.0.2): 56 data bytes
64 bytes from 172.18.0.2: icmp_seq=0 ttl=64 time=0.043 ms
64 bytes from 172.18.0.2: icmp_seq=1 ttl=64 time=0.089 ms
64 bytes from 172.18.0.2: icmp_seq=2 ttl=64 time=0.085 ms

App2 to App3-成功

[root@docker compose]# docker-compose exec App3 bash
root@595f744e8634:/# ping App1
PING App1 (172.31.213.13): 56 data bytes
....#App3 to App1失败
root@595f744e8634:/# ping App2
PING App2 (172.31.213.13): 56 data bytes
....#App3 to App2失败

7.验证共享卷
a. 在host /opt/conf/ 目录下新建nginx.conf 文件

[root@docker conf]# pwd
/opt/conf
[root@docker conf]# touch nginx.conf 

b.登录到App1 和App2查看

[root@docker compose]# docker-compose exec App1 bash
root@49d702fc8606:/# cd /mmt
root@49d702fc8606:/mnt# ls
nginx.conf#成功挂载
[root@docker compose]# docker-compose exec App2 bash
root@1d161428d4dd:/# cd /mnt
root@1d161428d4dd:/mnt# ls
nginx.conf#成功挂载

c. 在App3中挂载文件到nginx
修改docker-compose.yml App3:

App3:
    image: nginx
    volumes:
      - ./app/web/:/usr/share/nginx/html
    ports:
      - "8082:80"
    networks:
      - "netName2"

在host ./app/web 中添加 app3.html

[[email protected] web]# app3.html
[[email protected] web]# ls
app3.html
[[email protected] web]# more app3.html
<!DOCTYPE html>
<html>
    <head>
         <meta charset="utf-8">
         <title>Welcome to leonyan‘s home, this is app3</title>
     </head>
   <body>
   Welcome to leonyan‘s home, this is app3!
   </body>
</html>

[[email protected] compose]# cd app/web/

访问App3 nginx:

8.总结
本文演示了通过 Docker Compose进行多容器创建,以及容器间服务的管理,如网络隔离、卷数据共享。以及对容器的日常管理。

原文地址:https://www.cnblogs.com/php-linux/p/10806791.html

时间: 2024-08-02 02:01:27

使用docker compose部署服务的相关文章

Docker(八)用docker compose部署服务

用docker compose部署服务 docker compose可以方便我们快捷高效地管理容器的启动.停止.重启等操作,它类似linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什么镜像.数据卷.网络模式.监听端口等信息.我们可以在一个compose文件中定义一个多容器的应用,然后通过该compose来启动这个应用. 下载安装docker-compose # curl -L https://github.com/docker/compose/release

Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

使用Docker Compose部署SpringBoot应用

使用Docker Compose部署SpringBoot应用 原创: 梦想de星空 macrozheng 6月19日 Docker Compose是一个用于定义和运行多个docker容器应用的工具.使用Compose你可以用YAML文件来配置你的应用服务,然后使用一个命令,你就可以部署你配置的所有服务了. 安装 下载Docker Compose: curl -L https://get.daocloud.io/docker/compose/releases/download/1.24.0/doc

使用Docker Compose 部署Nexus后初次登录账号密码不正确,并且在nexus-data下没有admin,password

场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101111611 在上面已经实现部署Nexus后,初次登录的默认账户密码: admin admin123 但是在进行登录时却提示 密码不正确后者没权限,根据提示密码文件的位置在nexus-data/admin.password下. 因为上面在docker-compose.yml文件

Docker Compose部署Nexus3时的docker-compose,yml代码

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

使用Docker Compose 部署Nexus后提示:Unable to create directory /nexus-data/instance

场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/101111611 在上面部署好Nexus后,启动后日志提示: Unable to create directory /nexus-data/instance 注: 博客:https://blog.csdn.net/badao_liumang_qizhi关注公众号霸道的程序猿获取编程

Docker Compose 部署Nginx服务实现负载均衡

Compose简介: Compose是Docker容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器,使用Docker Compose,不再需要使用shell脚本来启动容器.Compose通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用.docker-compose默认的模板文件是 docker-compose.yml,其中定义的每个服务都必须通过image 指令指定镜

阿里云上Docker Compose部署wordpress

先上官方文档: https://docs.docker.com/compose/wordpress/ 我的环境: [[email protected] ~]# cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) [[email protected] ~]# uname -r 3.10.0-123.9.3.el7.x86_64 可以使用Docker Compose可以利用容器,在隔离环境下轻松运行WordPress. 1.安装C

Idea使用docker插件部署服务到远程服务器

一.docker部署单个服务 1.Idea安装docker插件 首先给Idea安装docker插件,方式为:File ——> Settings ——> Plugins,安装后重启IDE 2.配置远程docker主机 1)首先登陆远程docker主机,修改配置文件 /usr/lib/systemd/system/docker.service #vim /usr/lib/systemd/system/docker.service 打开文件,找到 ExecStart=/usr/bin/dockerd