9、Docker Compose

前面学习过了Dockerfile文件,使用 docker build、docker run 等命令操作容器。
今天学习了Docker Compose,理解上它是管理容器的工具。
为什么这么说呢?首先Docker Compose 将所管理的容器分为三层,分别是工程(project)、服务(service)、容器(container)。
Docker Compose 运行目录下的所有文件(docker-compose.yml)组成一个工程,一个工程包含多个服务,一个服务可包括多个容器实例。
用来做什么呢?现在我们开发时系统都采用微服务,所以就会有很的服务jar包需要部署。每个微服务都要手动启停,很难运维;这就需要docker提前配置好,然后一键启动和关闭。

实例

这里简单对同一个jar包,启动两个服务。

  • 安装 Docker Compose
    安装 Docker Compose 可以通过下面命令自动下载适应版本的 Compose,并为安装脚本添加执行权限
curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

查看安装是否成功

[root@localhost home]# docker-compose -v
docker-compose version 1.21.2, build a133471

已经事先上传好jar文件到宿主机上

[root@localhost home]# ls
eureka-server-0.0.1-SNAPSHOT.jar

创建并编辑Dockerfile,因为文件里jar文件是相对地址,所以Dockerfile要与jar文件放到同一目录

touch Dockerfile 
vi Dockerfile 
FROM java:8
ADD eureka-server-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8761
ENTRYPOINT ["sh","-c","java -jar /app.jar"]

创建文件 docker-compose.yml

version: '3' # 表示该 Docker-Compose 文件使用的是 Version 2 file
services:
  docker-demo:  # 指定服务名称
    build: .  # 指定 Dockerfile 所在路径
    ports:    # 指定端口映射
      - "9000:8761"
  docker-demo2:  # 指定服务名称
    build: .  # 指定 Dockerfile 所在路径
    ports:    # 指定端口映射
      - "9001:8761"

在docker-compose.yml目录下执行

docker-compose up -d  // 后台启动并运行容器

此时查看docker进程,可以看到新启动两个容器

[root@localhost home]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e2fe5298b668        home_docker-demo2   "sh -c 'java -jar /a…"   About an hour ago   Up 4 seconds        0.0.0.0:9001->8761/tcp              home_docker-demo2_1
3f5f46ebd5b4        home_docker-demo    "sh -c 'java -jar /a…"   About an hour ago   Up About an hour    0.0.0.0:9000->8761/tcp              home_docker-demo_1

同时查看镜像

[root@localhost home]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
home_docker-demo2   latest              956acfca80ff        About an hour ago   694MB
home_docker-demo    latest              956acfca80ff        About an hour ago   694MB

以上表示docker-compose up 命令会自动构建镜像并使用镜像启动容器

常用命令

这里的命令都是基于docker-compose.yml里配置的services服务来执行的。

version: '3' # 表示该 Docker-Compose 文件使用的是 Version 2 file
services:
  docker-demo:  # 指定服务名称
    build: .  # 指定 Dockerfile 所在路径
    ports:    # 指定端口映射
      - "9000:8761"
  docker-demo2:  # 指定服务名称
    build: .  # 指定 Dockerfile 所在路径
    ports:    # 指定端口映射
      - "9001:8761"
  • ps:列出所有运行容器
[root@localhost home]# docker-compose ps
       Name                   Command            State           Ports         
-------------------------------------------------------------------------------
home_docker-demo2_1   sh -c java -jar /app.jar   Up      0.0.0.0:9001->8761/tcp
home_docker-demo_1    sh -c java -jar /app.jar   Up      0.0.0.0:9000->8761/tcp

  • port:列出绑定的公共端口,
##列出docker-demo服务的8761的对外端口
[root@localhost home]# docker-compose port docker-demo 8761
0.0.0.0:9000
##列出docker-demo2服务的8761的对外端口
[root@localhost home]# docker-compose port docker-demo2 8761
0.0.0.0:9001

  • stop:停止已运行的服务的容器
##停止docker-demo服务
[root@localhost home]# docker-compose stop docker-demo
Stopping home_docker-demo_1 ... done
##查看运行容器,发现home_docker-demo_1已停
[root@localhost home]# docker-compose ps
       Name                   Command             State             Ports         
----------------------------------------------------------------------------------
home_docker-demo2_1   sh -c java -jar /app.jar   Up         0.0.0.0:9001->8761/tcp
home_docker-demo_1    sh -c java -jar /app.jar   Exit 137    
##查看docker进程,容器home_docker-demo_1已停                    
[root@localhost home]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                               NAMES
e2fe5298b668        home_docker-demo2   "sh -c 'java -jar /a…"   About an hour ago   Up 15 minutes                 0.0.0.0:9001->8761/tcp              home_docker-demo2_1
3f5f46ebd5b4        home_docker-demo    "sh -c 'java -jar /a…"   About an hour ago   Exited (137) 28 seconds ago                                       home_docker-demo_1

  • start:启动指定服务已存在的容器
##启动docker-demo服务
[root@localhost home]# docker-compose start docker-demo
Starting docker-demo ... done
##查看运行容器,发现home_docker-demo_1运行中
[root@localhost home]# docker-compose ps
       Name                   Command            State           Ports         
-------------------------------------------------------------------------------
home_docker-demo2_1   sh -c java -jar /app.jar   Up      0.0.0.0:9001->8761/tcp
home_docker-demo_1    sh -c java -jar /app.jar   Up      0.0.0.0:9000->8761/tcp
##查看docker进程,容器home_docker-demo_1运行中      
[root@localhost home]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e2fe5298b668        home_docker-demo2   "sh -c 'java -jar /a…"   2 hours ago         Up 19 minutes       0.0.0.0:9001->8761/tcp              home_docker-demo2_1
3f5f46ebd5b4        home_docker-demo    "sh -c 'java -jar /a…"   2 hours ago         Up 8 seconds        0.0.0.0:9000->8761/tcp              home_docker-demo_1

  • kill 直接停止并删除容器 ,类似 stop + rm
##kill掉服务
[root@localhost home]# docker-compose kill docker-demo
Killing home_docker-demo_1 ... done
##查看容器已经被删除
[root@localhost home]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
e2fe5298b668        home_docker-demo2   "sh -c 'java -jar /a…"   2 hours ago         Up 27 minutes       0.0.0.0:9001->8761/tcp              home_docker-demo2_1
e1d3b10e5b87        mysql:5.7           "docker-entrypoint.s…"   18 hours ago        Up 2 minutes        0.0.0.0:3306->3306/tcp, 33060/tcp   test-mysql
[root@localhost home]# docker-compose ps
       Name                   Command             State             Ports         
----------------------------------------------------------------------------------
home_docker-demo2_1   sh -c java -jar /app.jar   Up         0.0.0.0:9001->8761/tcp
home_docker-demo_1    sh -c java -jar /app.jar   Exit 137   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值