Docker系列学习(19) -- 初识Docker Compose

1,409 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第19天,点击查看活动详情

生命不息,学习不止

题外话

今天又是阳光明媚的一天,今天是周一,可能是没睡醒,早上地铁坐过站了,真是令人头大,而且今天的风也很大,头就更大了。

废话不多说,上货!

正文

在这里插入图片描述

上一回说了docker网络的几种模式,今天来说说docker常用的项目编排工具docker compose。

docker compose 简介

docker compose 是docker官方的项目,是docker官方提供的一个负责管理项目中容器编排的工具

在使用时我们会通过配置文件去设定容器的一些参数,从而进行对容器的批量操控

主要适用于docker容器较多的情况下,可以进行批量的运行,停止,重启,拉取版本,删除旧版本等

缺点:只能操控单一主机的docker容器,不可操控其他主机上的docker容器

docker compose 使用演示

docker compose 的安装也比较简单,有pip的可以直接使用pip安装,没有的可以直接linux主机上下载二进制包,从官网git直接找即可

使用时要注意两个文件,第一个是在创建镜像前,项目中的Dockerfile文件和docker conmpose中的docker-compose.yml

首先我们使用go语言做了个web服务,如下

main.go

package main

import (
   "log"
   "net/http"
   "time"
)

func main() {
   // 创建路由器
   mux := http.NewServeMux()
   // 设置路由规则
   mux.HandleFunc("/hello", sayHello)

   // 创建服务器
   server := &http.Server{
      Addr:         ":8080",
      WriteTimeout: time.Second * 30,
      Handler:      mux,
   }

   // 监听端口并提供服务
   log.Println("starting httpserver at http:localhost:8080")
   log.Fatal(server.ListenAndServe())
}

func sayHello(w http.ResponseWriter, r *http.Request) {
   time.Sleep(1 * time.Second)
   w.Write([]byte("hello , this is httpserver"))
}

然后我们便可着手写Dockerfile文件了,示例如下

Dickerfile


# FROM 基于 golang:1.18-alpine
FROM golang:1.18-alpine AS builder

# ENV 设置环境变量
ENV GOPATH=/opt/repo
ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.io,direct

# RUN 设置 Asia/Beijing 时区
RUN apk --no-cache add tzdata  && \
    ln -sf /usr/share/zoneinfo/Asia/Beijing /etc/localtime && \
    echo "Asia/Beijing" > /etc/timezone

# COPY 源路径 目标路径 从镜像中 COPY
COPY --from=builder /opt /opt

# EXPOSE 设置端口映射
EXPOSE 8080/tcp

# WORKDIR 设置工作目录
WORKDIR /opt

# CMD 设置启动命令
CMD ["./main.go", "run"]

然后便可在主机的docker compose目录下去创建docker-compose.yml 文件并进行编写了,示例如下

# yaml 配置  
version: '1.18'  
services:  
  web:  
    build: ./main.go  
    ports:  
     - "8080:8080"  

然后便可通过docker-compose up 命令将项目启动并生成容器

和docker命令一样, 可加-d使其处于守护进程的方式运行

下一篇我们来讲Dockerfile与docker-compose.ymal的配置

在这里插入图片描述

大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划! 在这里插入图片描述