mirror of
https://github.com/IceWhaleTech/CasaOS.git
synced 2025-11-06 22:59:44 +00:00
wip
This commit is contained in:
parent
441f26ba56
commit
4b0d2d7d3d
@ -1,24 +0,0 @@
|
|||||||
package docker_base
|
|
||||||
|
|
||||||
import "github.com/IceWhaleTech/CasaOS/model"
|
|
||||||
|
|
||||||
//过滤mysql关键字
|
|
||||||
func MysqlFilter(c MysqlConfig, envs model.EnvArray) model.EnvArray {
|
|
||||||
for i := 0; i < len(envs); i++ {
|
|
||||||
switch envs[i].Value {
|
|
||||||
case "$MYSQL_HOST":
|
|
||||||
envs[i].Value = c.DataBaseHost
|
|
||||||
case "$MYSQL_PORT":
|
|
||||||
envs[i].Value = c.DataBasePort
|
|
||||||
case "$MYSQL_USERNAME":
|
|
||||||
envs[i].Value = c.DataBaseUser
|
|
||||||
case "$MYSQL_PASSWORD":
|
|
||||||
envs[i].Value = c.DataBasePassword
|
|
||||||
case "$MYSQL_DBNAME":
|
|
||||||
envs[i].Value = c.DataBaseDB
|
|
||||||
case "$MYSQL_HOST_AND_PORT":
|
|
||||||
envs[i].Value = c.DataBaseHost + ":" + c.DataBasePort
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return envs
|
|
||||||
}
|
|
||||||
@ -1,9 +0,0 @@
|
|||||||
package docker_base
|
|
||||||
|
|
||||||
type MysqlConfig struct {
|
|
||||||
DataBaseHost string `json:"database_host"`
|
|
||||||
DataBasePort string `json:"database_port"`
|
|
||||||
DataBaseUser string `json:"database_user"`
|
|
||||||
DataBasePassword string `json:"data_base_password"`
|
|
||||||
DataBaseDB string `json:"data_base_db"`
|
|
||||||
}
|
|
||||||
@ -1,93 +0,0 @@
|
|||||||
package docker_base
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/docker/docker/api/types"
|
|
||||||
"github.com/docker/docker/api/types/container"
|
|
||||||
"github.com/docker/docker/api/types/filters"
|
|
||||||
"github.com/docker/docker/api/types/network"
|
|
||||||
client2 "github.com/docker/docker/client"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
//创建一个mysql数据库
|
|
||||||
func MysqlCreate(mysqlConfig MysqlConfig, dbId string, cpuShares int64, memory int64) (string, error) {
|
|
||||||
const imageName = "mysql"
|
|
||||||
const imageVersion = "8"
|
|
||||||
const imageNet = "oasis"
|
|
||||||
|
|
||||||
cli, err := client2.NewClientWithOpts(client2.FromEnv)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
defer cli.Close()
|
|
||||||
_, err = cli.ImagePull(context.Background(), imageName+":"+imageVersion, types.ImagePullOptions{})
|
|
||||||
|
|
||||||
isExist := true
|
|
||||||
//检查到镜像才继续
|
|
||||||
for isExist {
|
|
||||||
filter := filters.NewArgs()
|
|
||||||
filter.Add("before", imageName+":"+imageVersion)
|
|
||||||
list, e := cli.ImageList(context.Background(), types.ImageListOptions{Filters: filter})
|
|
||||||
if e == nil && len(list) > 0 {
|
|
||||||
isExist = false
|
|
||||||
}
|
|
||||||
time.Sleep(time.Second)
|
|
||||||
}
|
|
||||||
|
|
||||||
var envArr = []string{"MYSQL_ROOT_PASSWORD=" + mysqlConfig.DataBasePassword, "MYSQL_DATABASE=" + mysqlConfig.DataBaseDB}
|
|
||||||
|
|
||||||
res := container.Resources{}
|
|
||||||
if cpuShares > 0 {
|
|
||||||
res.CPUShares = cpuShares
|
|
||||||
}
|
|
||||||
if memory > 0 {
|
|
||||||
res.Memory = memory << 20
|
|
||||||
}
|
|
||||||
|
|
||||||
rp := container.RestartPolicy{}
|
|
||||||
|
|
||||||
rp.Name = "always"
|
|
||||||
|
|
||||||
config := &container.Config{
|
|
||||||
Image: imageName,
|
|
||||||
Labels: map[string]string{"version": imageVersion, "author": "official"},
|
|
||||||
Env: envArr,
|
|
||||||
}
|
|
||||||
hostConfig := &container.HostConfig{Resources: res, RestartPolicy: rp, NetworkMode: container.NetworkMode(imageNet)}
|
|
||||||
|
|
||||||
containerCreate, err := cli.ContainerCreate(context.Background(),
|
|
||||||
config,
|
|
||||||
hostConfig,
|
|
||||||
&network.NetworkingConfig{EndpointsConfig: map[string]*network.EndpointSettings{imageNet: {NetworkID: ""}}},
|
|
||||||
nil,
|
|
||||||
dbId)
|
|
||||||
|
|
||||||
containerId := containerCreate.ID
|
|
||||||
|
|
||||||
//启动容器
|
|
||||||
err = cli.ContainerStart(context.Background(), dbId, types.ContainerStartOptions{})
|
|
||||||
if err != nil {
|
|
||||||
return containerId, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return containerId, nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func MysqlDelete(dbId string) error {
|
|
||||||
|
|
||||||
cli, err := client2.NewClientWithOpts(client2.FromEnv)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
defer cli.Close()
|
|
||||||
err = cli.ContainerStop(context.Background(), dbId, nil)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = cli.ContainerRemove(context.Background(), dbId, types.ContainerRemoveOptions{})
|
|
||||||
return err
|
|
||||||
|
|
||||||
}
|
|
||||||
Loading…
x
Reference in New Issue
Block a user