Docker
Docker is an open-source platform that allows developers to automate the deployment, scaling, and management of applications by using containerization. It provides a way to package and run an application and its dependencies in a standardized and isolated environment called a container.
Networking
Compose
Volumes
You can set up external volumes for your docker container.
volumes:network_name:name: my_external_network_nameexternal: true
Networking
Docker compose sets up a default network called appname_default.
Specify an external network.
networks:my_network:name: my-pre-existing-networkexternal: true
Kompose
- Translate
docker-compose.ymlto kubernetes withkompose convert -f docker-compose.yml - Filter to use specific services with
kompose convert -f docker-compose.yml --filter service=app
src/docker.py
"""Module for docker classes and functions."""import subprocess as supfrom hax import logfrom pathlib import Pathfrom typing import Optionalclass Container:"""The container class provides methods for working with docker containers."""# TODO: Move this module to cicd.py@staticmethoddef run(repo: Path,container: str,ports: Optional[tuple[int, int]] = None,command: Optional[str] = None,detached: bool = False):"""Start up container.Arguments:- repo: Path to repository.- container: Name of container.- ports: Tuple of ports to expose.- command: Command to run in container."""if detached:log.info(f"Starting container '{container}' at {ports[0]}:{ports[1]} in repo '{repo}' with command '{command}'")sup.run(f"cd {repo} && docker-compose run -d --rm -p {ports[0]}:{ports[1]} {container} {command}", shell=True)elif command and ports:log.info(f"Starting container '{container}' at {ports[0]}:{ports[1]} in repo '{repo}' with command '{command}'")sup.run(f"cd {repo} && docker-compose run -it --rm -p {ports[0]}:{ports[1]} {container} {command}", shell=True)elif command and not ports:log.info(f"Starting container '{container}' in repo '{repo}' with command '{command}'")sup.run(f"cd {repo} && docker-compose run -it --rm {container} {command}", shell=True)elif not command and ports: # This case will probably never happen.log.info(f"Starting container '{container}' at port '{ports[0]}:{ports[1]}' in repo '{repo}'.")sup.run(f"cd {repo} && docker-compose run -it -p {ports[0]}:{ports[1]} {container}", shell=True)else:log.info(f"Starting container '{container}' in repo '{repo}' in detached mode.")sup.run(f"cd {repo} && docker-compose up {container} -d", shell=True)