Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I use Docker-Compose to create Networks without Containers

I've been playing with Docker-Compose for the last few days to see if it would simplify my Docker Container and Network building process.

I'm pretty happy with it, but ran into a problem when I wanted to create a few 'Networks' that didn't get used by any 'Services' (yet).

The reason I want this behavior was to have a Docker-Compose file to create my local fabric of 'Private' network and 'Public' Network. And a separate Docker-Compose for each of my projects that utilize those already created 'external' networks.

I noted that I was able to just specify a dummy container to initialize the creation of the Networks, but it seemed unnecessary. e.g..

version: '2'
services:
  # Dummy Service
  dummy:
    image: busybox
    container_name: dummy
    hostname: dummy
    networks:
      private:

networks:
  # Private Network for all Services (across Projects)
  private:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.18.0.0/24
        gateway: 172.18.0.1

Is there a setting/flag that I'm overlooking, or is there currently no way to use Docker-Compose to create Networks without Containers.

Additionally, am I just approaching this incorrectly?

Essentially I'd like to have a network that live on regardless of what containers join/leave it.

like image 932
Futile32 Avatar asked May 24 '17 00:05

Futile32


People also ask

Can docker compose create network?

By default Compose sets up a single network for your app. Each container for a service joins the default network and is both reachable by other containers on that network, and discoverable by them at a hostname identical to the container name.

What is a docker compose network?

Docker Compose sets up a single network for your application(s) by default, adding each container for a service to the default network. Containers on a single network can reach and discover every other container on the network.

Can I use docker compose instead of Dockerfile?

Docker Compose (herein referred to as compose) will use the Dockerfile if you add the build command to your project's docker-compose. yml . Your Docker workflow should be to build a suitable Dockerfile for each image you wish to create, then use compose to assemble the images using the build command.


2 Answers

All my docker images and networks etc.. files I like to run with docker-compose. So while my thought process is on docker-compose I just have docker-compose network files that spin up a hello-world image (many people already have the image, else it is like 2kb) and then it immediately exits the image of coarse but keeps the network.

version: '3.7'

services: 
    hello_world:
        image: hello-world:latest
        networks: 
            main_net:
                ipv4_address: 172.20.0.255
networks: 
    main_net:
        name: main_network
        ipam:
            config:
                - subnet: 172.20.0.0/16

This way I plan my network and lay it out nicely in docker-compose file with th minimum overhead...

like image 190
Alfa Bravo Avatar answered Nov 10 '22 21:11

Alfa Bravo


docker-compose-networks.yml:

version: '3.7'

services:
    works:
        image: scratch
        restart: always
        container_name: net_works
        deploy:
            placement:
                constraints:
                    - "node.hostname==scratch"
        networks:
            - mynet1
            - mynet2

networks:
    mynet1:
        name: mynet1
        driver: overlay
        attachable: false
    mynet2:
        name: mynet2
        driver: overlay
        attachable: true
like image 32
EthraZa Avatar answered Nov 10 '22 21:11

EthraZa