Docker APIs đ â
āĻĄāĻāĻžāϰ āĻļā§āϧā§āĻŽāĻžāϤā§āϰ āĻāĻāĻāĻŋ āĻāĻŽāĻžāύā§āĻĄ āϞāĻžāĻāύ āĻā§āϞ āύā§, āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻļāĻā§āϤāĻŋāĻļāĻžāϞ⧠RESTful API āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻĒāύāĻŋ āϝā§āĻā§āύ⧠āĻĒā§āϰā§āĻā§āϰāĻŽāĻŋāĻ āϞā§āϝāĻžāĻā§āĻā§ā§ā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻĄāĻāĻžāϰ āĻāĻā§āĻāĻŋāύāĻā§ āĻāύā§āĻā§āϰā§āϞ āĻāϰāϤ⧠āĻĒāĻžāϰā§āύāĨ¤
ā§§. āĻĄāĻāĻžāϰ āĻāĻā§āĻāĻŋāύ API āĻāĻŋ? â
āĻĄāĻāĻžāϰ āĻā§āϞāĻžā§ā§āύā§āĻ (CLI) āĻāĻŦāĻ āĻĄāĻāĻžāϰ āĻĄā§āϝāĻžāĻŽāύ (Daemon) āĻāĻā§ āĻ
āĻĒāϰā§āϰ āϏāĻžāĻĨā§ āĻāĻĨāĻž āĻŦāϞāĻžāϰ āĻāύā§āϝ āĻāĻāĻāĻŋ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰā§āĨ¤ āĻāĻĒāύāĻŋ āϝāĻāύāĻ docker run āĻāĻŽāĻžāύā§āĻĄ āĻĻā§āύ, āϤāĻāύ CLI āĻŽā§āϞāϤ āĻĄāĻāĻžāϰ āĻāĻā§āĻāĻŋāύā§āϰ āĻāĻāĻāĻŋ API āĻāύā§āĻĄāĻĒā§ā§āύā§āĻā§ āϰāĻŋāĻā§ā§ā§āϏā§āĻ āĻĒāĻžāĻ āĻžā§āĨ¤
- āĻāĻāĻŋ āĻāĻāĻāĻŋ HTTP REST APIāĨ¤
- āĻāĻāĻŋ JSON āĻĢāϰāĻŽā§āϝāĻžāĻā§ āĻĄā§āĻāĻž āϰāĻŋāĻāĻžāϰā§āύ āĻāϰā§āĨ¤
- āĻĄāĻŋāĻĢāϞā§āĻāĻāĻžāĻŦā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻāĻāύāĻŋāĻā§āϏ āϏāĻā§āĻ (
/var/run/docker.sock) āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻāĻžāĻ āĻāϰā§āĨ¤
⧍. āϰāĻŋāĻŽā§āĻ API āĻāĻā§āϏā§āϏ (Remote Access) â
āĻāĻĒāύāĻŋ āϝāĻĻāĻŋ āĻ āύā§āϝ āĻŽā§āĻļāĻŋāύ āĻĨā§āĻā§ āĻĄāĻāĻžāϰ āĻāĻā§āĻāĻŋāύ āĻāύā§āĻā§āϰā§āϞ āĻāϰāϤ⧠āĻāĻžāύ, āϤāĻŦā§ āĻāĻĒāύāĻžāĻā§ TCP āϏāĻā§āĻ āĻāύāĻžāĻŦāϞ āĻāϰāϤ⧠āĻšāĻŦā§āĨ¤
CAUTION
āϏāϰāĻžāϏāϰāĻŋ TCP āĻĒā§āϰā§āĻ āĻāĻĒā§āύ āĻāϰāĻž āĻ āϤā§āϝāύā§āϤ āĻā§āĻāĻāĻŋāĻĒā§āϰā§āĻŖāĨ¤ āϏāĻŦ āϏāĻŽā§ TLS (SSL) āϏāĻžāϰā§āĻāĻŋāĻĢāĻŋāĻā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰ⧠āĻāĻžāύā§āĻāĻļāύ āϏāĻŋāĻāĻŋāĻāϰ āĻāϰā§āύāĨ¤
ā§Š. Docker SDKs â
āĻĄāĻāĻžāϰ āϏāϰāĻžāϏāϰāĻŋ API āĻāϞ āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻŦāϰā§āϤ⧠āĻĄā§āĻāϞāĻĒāĻžāϰāĻĻā§āϰ āĻāύā§āϝ āĻ āĻĢāĻŋāϏāĻŋā§āĻžāϞ āϞāĻžāĻāĻŦā§āϰā§āϰāĻŋ āĻŦāĻž SDK āĻĒā§āϰāĻĻāĻžāύ āĻāϰā§āĨ¤ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻā§āĻĄ āϞā§āĻāĻž āĻ āύā§āĻ āϏāĻšāĻ āĻšā§āĨ¤
- Python SDK:
pip install docker - Go SDK:
go get github.com/docker/docker/client
Python āĻāĻĻāĻžāĻšāϰāĻŖ: â
import docker
client = docker.from_env()
# āύāϤā§āύ āĻāύā§āĻā§āĻāύāĻžāϰ āϰāĻžāύ āĻāϰāĻž
container = client.containers.run("nginx", detach=True)
print(f"Container {container.id} is running!")
# āĻāύā§āĻā§āĻāύāĻžāϰ āϞāĻŋāϏā§āĻ āĻĻā§āĻāĻž
for c in client.containers.list():
print(c.name)ā§Ē. API āĻāĻžāϰā§āϏāύāĻŋāĻ (Versioning) â
āĻĄāĻāĻžāϰ āĻāĻā§āĻāĻŋāύā§āϰ āϏāĻžāĻĨā§ āϏāĻžāĻĨā§ āĻāϰ API-āĻāϰāĻ āĻāĻžāϰā§āϏāύ āĻāĻĒāĻĄā§āĻ āĻšā§āĨ¤
- āĻāĻĒāύāĻŋ
docker versionāĻāĻŽāĻžāύā§āĻĄ āĻĻāĻŋāϞ⧠API āĻāĻžāϰā§āϏāύ āĻĻā§āĻāϤ⧠āĻĒāĻžāĻŦā§āύāĨ¤ - āϏāĻŦ āϏāĻŽā§ āϞā§āĻā§āϏā§āĻ āĻŦāĻž āϏā§āĻā§āĻŦāϞ āĻāĻžāϰā§āϏāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻžāϰ āĻā§āώā§āĻāĻž āĻāϰā§āύāĨ¤
- āĻāĻāĻāϰāĻāϞ āĻĢāϰāĻŽā§āϝāĻžāĻ:
http://localhost/v1.43/containers/json
ā§Ģ. āĻĒā§āϰā§āĻā§āϰāĻžāĻŽā§āϝāĻžāĻāĻŋāĻ āĻāύā§āĻā§āϰā§āϞ (Programmatic Control) â
āĻā§āύ āĻāĻĒāύāĻŋ API āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻāϰāĻŦā§āύ?
- Automation: āĻĄāĻāĻžāϰ āĻāύā§āĻā§āĻāύāĻžāϰ āĻ āĻā§āĻŽā§āĻļāύ āϏā§āĻā§āϰāĻŋāĻĒā§āĻ āϤā§āϰāĻŋ āĻāϰāϤā§āĨ¤
- Cloud Management: āĻāĻžāϏā§āĻāĻŽ āĻĄā§āϝāĻžāĻļāĻŦā§āϰā§āĻĄ āĻŦāĻž āĻāύā§āĻā§āĻāύāĻžāϰ āĻŽā§āϝāĻžāύā§āĻāĻŽā§āύā§āĻ āĻĒā§āϞā§āϝāĻžāĻāĻĢāϰā§āĻŽ āĻŦāĻžāύāĻžāϤā§āĨ¤
- CI/CD Build: āĻĒāĻžāĻāĻĒāϞāĻžāĻāύā§āϰ āĻā§āϤāϰ⧠āĻāĻžāϏā§āĻāĻŽ āĻāύā§āĻĄāĻŋāĻļāύā§āϰ āĻāĻĒāϰ āĻāĻŋāϤā§āϤāĻŋ āĻāϰ⧠āĻāύā§āĻā§āĻāύāĻžāϰ āĻšā§āϝāĻžāύā§āĻĄā§āϞ āĻāϰāϤā§āĨ¤
āϏāĻžāϰāϏāĻāĻā§āώā§āĻĒ (Summary) â
āĻĄāĻāĻžāϰ API āĻŦā§āĻāϤ⧠āĻĒāĻžāϰāĻž āĻŽāĻžāύ⧠āĻšāϞ⧠āĻĄāĻāĻžāϰā§āϰ āĻāĻā§āϰ⧠āĻĒā§āϰāĻŦā§āĻļ āĻāϰāĻžāĨ¤ āĻāĻāĻŋ āĻāĻĒāύāĻžāĻā§ āϏāĻžāϧāĻžāϰāĻŖ āĻāĻāĻāĻžāϰā§āϰ āĻāĻŖā§āĻĄāĻŋ āĻĒā§āϰāĻŋā§ā§ āĻāĻāĻāύ āĻāύāĻĢā§āϰāĻžāϏā§āĻā§āϰāĻžāĻāĻāĻžāϰ āĻ āĻĨāĻŦāĻž āĻā§āϞāϏ āĻĄā§āĻāϞāĻĒāĻžāϰ āĻšāĻŋāϏā§āĻŦā§ āĻā§ā§ āϤā§āϞāϤ⧠āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§āĨ¤
IMPORTANT
āĻĒā§āϰā§āĻĄāĻžāĻāĻļāύ āĻāύāĻāĻžā§āϰāύāĻŽā§āύā§āĻā§ āĻĄāĻāĻžāϰ āϏāĻā§āĻ (docker.sock) āĻāĻā§āϏāĻĒā§āĻ āĻāϰāĻžāϰ āϏāĻŽā§ āĻ
āϤā§āϝāύā§āϤ āϏāϤāϰā§āĻ āĻĨāĻžāĻā§āύ, āĻāĻžāϰāĻŖ āĻāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āĻĒā§āϰ⧠āĻšā§āϏā§āĻā§āϰ āĻāĻā§āϏā§āϏ āĻĒāĻžāĻā§āĻž āϏāĻŽā§āĻāĻŦāĨ¤