持续创作,加速成长!这是我参与「掘金日新计划 · 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的配置
大家看完发现有什么错误,写在下面吧!跟我黑虎阿福比划比划!