Doker compose使用总结

10 篇文章 0 订阅

一、Docker compose介绍

官方:https://docs.docker.com/compose/overview/

在这里插入图片描述
翻译:compose是定义和运行多容器Docker应用程序的一个工具。您可以使用YAML文件来配置应用服务。然后,使用单个命令创建并启动配置中的所有服务。要了解更多有关Compose的所有特性,请参见特性列表。
在这里插入图片描述
Compose的特性如下:

  • 在单个主机上运行多个互相隔离的环境;
  • 创建容器时候维护了数据卷中的数据;
  • 容器发生改变时候重新创建容器;
  • 变量和在环境之间移动组合;

二、Compose快速入门

(1)Compose安装

#安装依赖工具
sudo apt-get install python-pip -y
#安装编排工具
sudo pip install docker-compose
#查看编排工具版本
sudo docker-compose version
#查看命令帮助
docker-compose --help

如果在安装python-pip时候出错:
在这里插入图片描述
解决办法:使用aptitude工具进行安装。

# 安装aptitude工具 
$ sudo apt-get install aptitude

# 安装 python-pip
# aptitude install python-pip

在安装python-pip过程中,会提示“是否接受该解决方案?[Y/n/q/?]”,这里选择“n”回车。
在这里插入图片描述
后面如果再有其他提示信息,选择“y”回车即可。

(2)配置Compose
第一步:新建并进入dockercompose文件夹。

$ mkdir ./docker/images/dockercompose
$ cd ./docker/images/dockercompose

第二步:创建docker-compose.yml文件。

version: '2'
  services:
    web1:
      image: nginx
      ports:
        - "9999:80"
      container_name: nginx-web1
    web2:
      image: nginx
      ports:
        - "8888:80"
      container_name: nginx-web2

由于yml文件对格式要求非常严格,冒号后面必须要有空格。所以,编写完该文件后,使用cat命令查看文件的格式是否正确。例如:
在这里插入图片描述
(3)运行容器。

# 后台启动容器
$ docker-compose up -d

启动完成后,可以通过docker ps命令查看已启动的容器。
在这里插入图片描述
也可以使用docker-compose ps命令查看。
在这里插入图片描述

三、Compose命令介绍

(1)服务启动、关闭、查看

# 后台启动所有服务
$ docker-compose up -d

# 启动服务
docker-compose start <服务名>

# 关闭和删除服务
$ docker-compose down

# 关闭服务
$ docker-compose stop <服务名>

# 删除服务
# 注意:由于rm命令不会删除应用的网络和数据卷,因此在工作中尽量不要用rm进行删除
$ docker-compose rm <服务名>

(2)查看服务信息

# 查看正在运行的服务
$ docker-compose ps

#查看服务运行的日志
# 指定-f参数可以持续跟踪服务产生的日志
docker-compose logs -f

#查看服务依赖的镜像
docker-compose images

#进入服务容器
docker-compose exec <服务名> <执行命令>

四、Compose配置文件详解

(1)配置文件的格式要求:

  • 版本号、服务标识符必须顶格写;
  • 属性名和属性值是以’: '(冒号+空格) 隔开;
  • 每一个层级使用两个空格隔开;
  • 如果服务属性有多个值,可以使用’ - '(空格空格-空格)列出每一个属性的值;
version: '2'
services: 
  web1:
    image: nginx 
    ports: 
      - "9999:80" 
    container_name: nginx-web1 
  web2:
    image: nginx 
    ports: 
      - "8888:80" 
    container_name: nginx-web2

(2)Compose配置文件的属性:

属性名作用
image服务依赖的镜像
container_name自定义容器名称
volumes把宿主机文件挂载到容器文件
ports指定宿主机和容器端口的映射
build构建镜像
depends_on指定本镜像依赖于哪个服务

五、Compose实战演练

需求:使用Compose实现项目的负载均衡。
在这里插入图片描述
当用户请求nginx服务的时候,nginx负责把请求转发给beego1和beego2中的任意一个服务。

5.1 实现流程

  • 创建beego文件
  • 配置nginx服务
  • 定义docker镜像:该镜像负责配置beego所需要的运行环境。
  • docker compose任务编排: 启动nginx服务、构建docker镜像、使用构建出来的镜像启动beego服务。

5.2 实现过程

第一步:创建并进入compose基础目录。

$ mkdir ~/docker/images/composetest
$ cd docker/images/composetest

第二步:创建一个目录,存放nginx配置文件。

$ mkdir nginx
$ cd nginx
$ vim nginx-beego.conf

文件内容如下:

upstream beegos {
	server 192.168.31.20:10086;
	server 192.168.31.20:10087;
}
server {
	listen 80;
	server_name _;
	location / {
		proxy_pass http://beegos;
		index index.html index.htm;
	}
}

第三步:创建go的基础镜像。

$ cd ~/docker/images/composetest
$ mkdir go-base
$ cd go-base
$ vim Dockerfile

文件内容如下:

# 基础镜像
FROM ubuntu
# 镜像作者
MAINTAINER ZhongLiwen 896337156@qq.com
# 修改国内源
RUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
RUN sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list
# 执行命令
RUN apt-get update
RUN apt-get install gcc libc6-dev git lrzsz -y
# 安装Go环境
RUN apt-get install golang -y
# 定制环境变量
ENV GOROOT=/usr/lib/go        
ENV PATH=$PATH:/usr/lib/go/bin
ENV GOPATH=/root/go
ENV PATH=$GOPATH/bin/:$PATH
# 下载项目
RUN go get github.com/astaxie/beego
# 增加文件
COPY test.go /root/go/src/myTest/
# 定制工作目录
WORKDIR /root/go/src/myTest/
# 对外端口
EXPOSE 8080
# 运行项目
ENTRYPOINT ["go","run","test.go"]

第四步:添加test.go文件。

package main

import (
    "github.com/astaxie/beego"
)
type MainController struct {
    beego.Controller
}
func (this *MainController) Get() {
    this.Ctx.WriteString("hello world\n")
}
func main() {
    beego.Router("/", &MainController{})
    beego.Run()
}

第五步:创建go任务依赖文件。

$ cd ~/docker/images/composetest
$ mkdir beego1 beego2

然后在这两个目录下分别创建一个test.go文件,代码如下:

package main

import (
    "github.com/astaxie/beego"
)
type MainController struct {
    beego.Controller
}
func (this *MainController) Get() {
    //this.Ctx.WriteString("hello beego1\n")
    this.Ctx.WriteString("hello beego2\n")
}
func main() {
    beego.Router("/", &MainController{})
    beego.Run()
}

第六步:定义compose配置文件。

$ cd ~/docker/images/composetest
$ vim docker-compose.yml

文件内容如下:

version: '2'
services:
  nginx-web1:
    image: nginx
    ports:
      - "9999:80"
    volumes:
      - ./nginx/nginx-beego.conf:/etc/nginx/conf.d/default.conf
    container_name: nginx-web1
  go-base:
    build: ./go-base/
    image: go-base:v0.1
  beego-web1:
    image: go-base:v0.1
    volumes:
      - ./beego1/test.go:/root/go/src/myTest/test.go
    ports:
      - "10086:8080"
    container_name: beego-web1
    depends_on:
      - go-base
   beego-web2:
      image: go-base:v0.1
      volumes:
        - ./beego2/test.go:/root/go/src/myTest/test.go
      ports:
        - "10087:8080"
      container_name: beego-web2
      depends_on:
        - go-base

构建完成后,~/docker/images/composetest目录结构如下图所示:
在这里插入图片描述

第七步:测试。

# 构建镜像
$ docker-compose build

# 启动任务
$ docker-compose up -d

# 查看效果
$ docker-compose ps

最后在浏览器上输入192.168.31.20:9999,不断刷新页面时候,可以看到页面输出“hello beego1”和“hello beego2”。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值