How can I structure my docker projects for easy de

2019-02-19 18:01发布

问题:

Right now I have multiple components of my application in the same folder linked together with a docker-compose

This works really well in development, but when I want to push to production it's kind of fuzzy. If I keep this structure I cannot use only dockerhub to host my images because the docker-compose which links them will be missing. If I use git to pull down my docker-compose, what would be the point of dockerhub? Why not just clone my whole repo and run docker-compose up each time?

I could alternatively store each component separately in separate github repos, pushing them up to dockerhub when pushed to master. Then, simply combine them from the hub with a dockercompose. This seems less than ideal too, since one would have to clone and push to several different repos to make a change which effects the system.

How do you do it?

回答1:

I have two parts: source code and config files (docker files, docker-compose files...)

I put Dockerfile and docker-compose in a folder with the struct like you and push it to a git repository. For source code (and other data), I have to manage it by hand, with separated git repositories for source code to push and pull each time it needs to update.

Be careful with the production server, just update small part instead of the whole server.



回答2:

Check out the new (still experimental) docker-app (June 2018)

It will allow you to push your docker-compose to DockerHub, as well as launch your app (through docker-compose) with settings variations between dev and prod.

See example:

You can create an Application Package based on this Compose file:

$ docker-app init --single-file hello
$ ls
docker-compose.yml
hello.dockerapp

The new new file hello.dockerapp contains three YAML documents:

  • metadatas
  • the Compose file
  • settings for your application

See "Sharing your application on the Hub"

You can push any application to the Hub using docker-app push:

$ docker-app push --namespace myHubUser --tag latest

This command will create an image named myHubUser/hello.dockerapp:latest on your local Docker daemon, and push it to the Hub.