1
0
mirror of https://github.com/beego/bee.git synced 2024-11-22 05:00:54 +00:00

Expose more than one port

This adds the ability to expose more than one port inside the Docker
container.
This commit is contained in:
Faissal Elamraoui 2016-12-22 22:53:45 +01:00
parent 699d76bc95
commit 4ea1715df6

View File

@ -29,6 +29,9 @@ var cmdDockerize = &Command{
Short: "Generates a Dockerfile for your Beego application", Short: "Generates a Dockerfile for your Beego application",
Long: `Dockerize generates a Dockerfile for your Beego Web Application. Long: `Dockerize generates a Dockerfile for your Beego Web Application.
The Dockerfile will compile, get the dependencies with {{"godep"|bold}}, and set the entrypoint. The Dockerfile will compile, get the dependencies with {{"godep"|bold}}, and set the entrypoint.
{{"Example:"|bold}}
$ bee dockerize -expose="3000,80,25"
`, `,
PreRun: func(cmd *Command, args []string) { ShowShortVersionBanner() }, PreRun: func(cmd *Command, args []string) { ShowShortVersionBanner() },
Run: dockerizeApp, Run: dockerizeApp,
@ -56,6 +59,7 @@ RUN CGO_ENABLED=0 godep go build -ldflags '-d -w -s'
EXPOSE {{.Expose}} EXPOSE {{.Expose}}
` `
// Dockerfile holds the information about the Docker container.
type Dockerfile struct { type Dockerfile struct {
BaseImage string BaseImage string
Appdir string Appdir string
@ -70,13 +74,15 @@ var (
func init() { func init() {
fs := flag.NewFlagSet("dockerize", flag.ContinueOnError) fs := flag.NewFlagSet("dockerize", flag.ContinueOnError)
fs.StringVar(&baseImage, "image", "library/golang", "Sets the base image of the Docker container.") fs.StringVar(&baseImage, "image", "", "Sets the base image of the Docker container.")
fs.StringVar(&expose, "expose", "8080", "Port to expose in the Docker container.") fs.StringVar(&expose, "expose", "8080", "Port(s) to expose in the Docker container.")
cmdDockerize.Flag = *fs cmdDockerize.Flag = *fs
} }
func dockerizeApp(cmd *Command, args []string) int { func dockerizeApp(cmd *Command, args []string) int {
cmd.Flag.Parse(args) if err := cmd.Flag.Parse(args); err != nil {
logger.Fatalf("Error parsing flags: %v", err.Error())
}
logger.Info("Generating Dockerfile...") logger.Info("Generating Dockerfile...")
@ -84,9 +90,19 @@ func dockerizeApp(cmd *Command, args []string) int {
dir, err := filepath.Abs(".") dir, err := filepath.Abs(".")
MustCheck(err) MustCheck(err)
if len(baseImage) == 0 {
baseImage = "library/golang:latest"
}
appdir := strings.Replace(dir, gopath, "", 1) appdir := strings.Replace(dir, gopath, "", 1)
// TODO: Check if the base image exists in Docker Hub // In case of multiple ports to expose inside the container,
// replace all the commas with whitespaces.
// See the verb EXPOSE in the Docker documentation.
if strings.Contains(expose, ",") {
expose = strings.Replace(expose, ",", " ", -1)
}
_, entrypoint := path.Split(appdir) _, entrypoint := path.Split(appdir)
dockerfile := Dockerfile{ dockerfile := Dockerfile{
BaseImage: baseImage, BaseImage: baseImage,