docker compose快速入门
docker compose 简单理解就是一件管理多个相关联的docker容器的工具
例子使用技术
golang+gin+redigo+redis
- 拉取redis镜像
docker pull redis
- go web 服务端
package main
import (
"log"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/gomodule/redigo/redis"
)
var (
r *gin.Engine
conn redis.Conn
)
type RedisMes struct {
Key string `json:"key"`
Value string `json:"value"`
}
func init() {
p := redis.Pool{
MaxIdle: 100,
MaxActive: 100,
IdleTimeout: time.Duration(30),
Dial: func() (redis.Conn, error) {
//这里可以通过服务器名字连接
return redis.Dial("tcp", "redis01:6378")
},
}
conn = p.Get()
}
func StrGet(c *gin.Context) {
rk := RedisMes{}
c.ShouldBindJSON(&rk)
s, err := redis.String(conn.Do("get", rk.Key))
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, gin.H{"400": err})
return
}
c.JSON(http.StatusOK, gin.H{rk.Key: s})
}
func StrSet(c *gin.Context) {
rk := RedisMes{}
c.ShouldBindJSON(&rk)
_, err := conn.Do("set", rk.Key, rk.Value)
if err != nil {
log.Println(err)
c.JSON(http.StatusOK, gin.H{"400": err})
return
}
c.JSON(http.StatusOK, gin.H{"200": "seccess"})
}
func Router() {
r = gin.Default()
r.POST("/docker/get", StrGet)
r.POST("/docker/set", StrSet)
r.Run(":9099")
}
func main() {
Router()
}
- Dockerfile
#使用镜像版本
FROM golang:alpine
#golang环境配置,不然可能无法编译
ENV GO111MODULE=on \
GOPROXY=https://goproxy.cn\
CGO_ENABLED=0 \
GOOS=linux \
GOARCH=amd64
#定义工作路径
WORKDIR /gindir
#复制代码
COPY . .
#执行命令,编译golang
RUN go build -o gin .
#执行程序
ENTRYPOINT ["/gindir/gin"]
- docker-compose.yml
#版本
version: '3'
#定义服务
services:
#服务器名字
gin:
#使用当前路径下的Dockerfile文件创建镜像
build: .
#镜像名字
image: gin:v1
#容器名字
container_name: gin1
#依赖,docker compose运行时,先启动所依赖的容器服务,再启动本服务
depends_on:
- redis1
#端口映射
ports: 9099:9099
#加入局域网络
networks: gin_net
#以上可等价于:docker run --name gin1 -p 9099:9099 --net gin_net gin:v1
#另一个服务器名字,被gin服务器所依赖
redis1:
#使用的镜像
image: redis:latest
#容器名字
container_name: redis01
#端口映射
ports: 6378:6379
#加入局域网络
networks: gin_net
#以上可等价于:docker run --name redis01 -p 6378:6379 --net gin_net redis
#局域网络定义
networks:
gin_net:
- 启动docker compose
docker-compose up -d --build #启动docker compose服务,-d:后台运行,--build:运行容器前,先构建镜像