In dieser Übung werden wir einen Docker Container nach Azure Container Instances (ACI) deployen. ACI ist eine gute Option, um Container-Workloads schnell in der Cloud bereitzustellen.
- Ein neues Pulumi Azure-Native Typescript Projektmit Namen
lab5
erstellen. Bei Auswahl der Azure-Region wie bisherWestEurope
verwenden. - Einen neuen Stack
dev
hinzufügen.
- Zuerst eine ResourceGroup analog Lab3 erstellen.
- ACI kennt auf oberster Ebene nur eine ContainerGroup, also potentiell mehr als einen Container (man kann es sich vage als ein docker-compose in der Cloud vorstellen). Deshalb erstellen wir eine
azure.containerinstance.ContainerGroup
. - Als Startpunkt könnt Ihr neben der Doku auch das folgende Gerüst verwenden, und dabei folgende Anforderungen berücksichtigen: a. Die Container-Group soll natürlich Teil unserer zuvor erstellten ResourceGroup sein. b. Wir wollen das Docker-Image ealen/echo-server deployen. c. Im ersten Schritt ist nur wichtig, den Container zu deployen. Um die Konnektivität mit dem Container kümmern wir uns später.
const containerGroup = new azure.containerinstance.ContainerGroup("???", {
containerGroupName: "???",
containers: [{
command: [],
environmentVariables: [],
image: "???",
name: "???",
}],
osType: "Linux", // den String hier mit einem Enum ersetzen
resourceGroupName: ???
});
Der zuvor gestartete Container ist nicht über das Internet erreichbar. Deshalb definieren wir für den Container selbst einen Port 80 und für die ContainerGroup
eine ipAddress
:
const containerGroup = new azure.containerinstance.ContainerGroup("???", {
containerGroupName: "???",
containers: [{
command: [],
environmentVariables: [],
image: "???",
name: "???",
ports: [{
port: 80,
}],
}],
ipAddress: {
type: azure.containerinstance.ContainerGroupIpAddressType.Public,
ports: [
{
port: 80,
protocol: azure.containerinstance.ContainerGroupNetworkProtocol.TCP,
}
]
},
osType: "Linux", // den String hier mit einem Enum ersetzen
resourceGroupName: ???
});
Zu guter Letzt fragen wir die IP Adresse der ContainerGroup ab und exportieren diese als Output:
const containerGroupInfo = pulumi.all([containerGroup.name, resourceGroup.name]).apply(([cgn, rgn]) =>
azure.containerinstance.getContainerGroup({
containerGroupName: cgn,
resourceGroupName: rgn
}
));
export const containerPublicIp = containerGroupInfo.ipAddress?.apply(x => x?.ip);
Nach Ausführung von pulumi up
können wir unter der containerPublicIp
unseren Echo-Server erreichen.