Network
The Network
resource allows you to create and manage Docker networks using Alchemy, enabling container-to-container communication.
Usage
typescript
import * as docker from "alchemy/docker";
const network = await docker.Network("app-network", {
name: "app-network"
});
Properties
Name | Type | Required | Description |
---|---|---|---|
name | string | Yes | Network name |
driver | "bridge" | "host" | "none" | "overlay" | "macvlan" | string | No | Network driver to use |
enableIPv6 | boolean | No | Enable IPv6 on the network |
labels | Record<string, string> | No | Network-scoped alias for containers |
Outputs
Name | Type | Description |
---|---|---|
id | string | Network ID |
createdAt | number | Time when the network was created |
Example
typescript
import * as docker from "alchemy/docker";
// Create a simple bridge network
const appNetwork = await docker.Network("app-network", {
name: "app-network"
});
// Create a custom network with driver
const overlayNetwork = await docker.Network("overlay-network", {
name: "overlay-network",
driver: "overlay",
enableIPv6: true,
labels: {
"com.example.description": "Network for application services"
}
});
// Create containers connected to the network
const service1 = await docker.Container("service1", {
image: "service1:latest",
name: "service1",
networks: [{ name: appNetwork.name }],
start: true
});
const service2 = await docker.Container("service2", {
image: "service2:latest",
name: "service2",
networks: [{ name: appNetwork.name }],
environment: {
// Service discovery using container names
SERVICE1_URL: `http://service1:8080`
},
start: true
});
Network Communication
When containers are connected to the same Docker network, they can communicate with each other using the container names as hostnames. This built-in DNS resolution simplifies service discovery in multi-container applications.
typescript
const service1 = await docker.Container("service1", {
image: "service1:latest",
name: "service1",
networks: [{ name: appNetwork.name }],
start: true
});
const service2 = await docker.Container("service2", {
image: "service2:latest",
name: "service2",
networks: [{ name: appNetwork.name }],
environment: {
// Service discovery using container names
SERVICE1_URL: `http://service1:8080`
},
start: true
});
Or, you can set aliases for the container to make it accessible by multiple names:
typescript
const service1 = await docker.Container("service1", {
image: "service1:latest",
name: "service1",
networks: [{ name: appNetwork.name, aliases: ["api"] }],
start: true
});
const service2 = await docker.Container("service2", {
image: "service2:latest",
name: "service2",
networks: [{ name: appNetwork.name }],
environment: {
// Service discovery using container names
SERVICE1_URL: `http://api:8080`
},
start: true
});