
در Docker ، ما فوق العاده به جامعه پر جنب و جوش ، متنوع و خلاق خود افتخار می کنیم. هر از چندگاهی ، ما در وبلاگ خود از کمک های جالبی از جامعه استفاده می کنیم تا برخی از کارهای عالی جامعه را برجسته کنیم. در زیر پست مهمان عضو انجمن دوکر گابریل دو مارمیس است. آیا در حال کار بر روی چیز جالب با داکر هستید؟ مشارکت های خود را به William Quiviger (william) در Docker Community Slack ارسال کنید و ما ممکن است کارهای شما را ارائه دهیم!
رایج ترین راه برای تماس و کنترل داکر استفاده از خط فرمان است.
با افزایش استفاده از داکر ، کاربران می خواهند از زبانهای برنامه نویسی غیر از پوسته با داکر تماس بگیرند. یکی از روش های محبوب استفاده از Docker از پایتون استفاده از docker-py بوده است. این کتابخانه چنان موفقیت کسب کرده است که حتی docker-compose
در پایتون نوشته شده است و از docker-py استفاده می کند.
هدف docker-py تکثیر مشتری Docker نیست (نوشته شده در Golang) ) ، اما برای صحبت با Docker Engine HTTP API. مشتری Docker بسیار پیچیده است و نسخه برداری از آن به زبان دیگر دشوار است. به همین دلیل ، بسیاری از ویژگی های موجود در سرویس گیرنده Docker نمی توانند در docker-py در دسترس باشند. بعضی اوقات گاهی اوقات کاربران ناامید می شدند زیرا docker-py دقیقاً مثل CLI رفتار نمی کرد.
امروز ، ما در حال ارائه پروژه جدیدی هستیم که توسط Gabriel de Marmiesse از جامعه Docker ساخته شده است: نهنگ های پایتون. هدف این پروژه تهیه نقشه 1 به 1 بین Docker CLI و کتابخانه پایتون است. ما این کار را با برقراری ارتباط با Docker CLI به جای تماس مستقیم با Docker Engine HTTP API انجام می دهیم.
اگر لازم است با خط فرمان Docker تماس بگیرید ، از نهنگ های پایتون استفاده کنید. و اگر لازم است مستقیماً با موتور داکر تماس بگیرید ، از docker-py استفاده کنید.
در این پست ، برخی از ویژگی هایی را که در docker-py موجود نیستند اما در Python-on موجود هستند ، بررسی خواهیم کرد. نهنگ ها:
- ساختمان با ساخت Docker
- استقرار در Swarm با docker stack
- استقرار در موتور محلی با نوشتن
شروع با بارگیری پایتون روی نهنگ ها با
نصب python- on-whales
و شما آماده سنگسار هستید!
Docker Buildx0
در اینجا ما یک تصویر Docker می سازیم. نهنگ های پایتون به طور پیش فرض از buildx استفاده می کنند و به شما در زمان واقعی خروجی می دهند.
>>> از python_on_whales docker وارد کنید
>>> my_image = docker.build ("." ، برچسب ها = "برخی_ نام")
[+] ساختمان 1.6s (17/17) به پایان رسید
=> [internal] تعریف ساخت بار از Dockerfile 0.0s
=> => انتقال dockerfile: 32B 0.0s
=> [internal] .dockerignore 0.0s را بارگیری کنید
=> => انتقال زمینه: 2B 0.0s
=> [internal] بارگذاری فراداده برای docker.io/library/python:3.6 1.4s
=> [python_dependencies 1/5] از docker.io/library/python:3.6@sha256:293 0.0s
=> [internal] 0.1s زمینه ساخت بار
=> => انتقال زمینه: 72.86 کیلوبایت 0.0 ثانیه
=> CACHED [python_dependencies 2/5] RUN pip نصب typeguard pydantic re 0.0s
=> CACHED [python_dependencies 3/5] COPY test / test-Requirements.txt / tmp 0.0s
=> CACHED [python_dependencies 4/5] COPY Requires.txt / tmp / 0.0s
=> CACHED [python_dependencies 5/5] RUN pip -r / tmp / test-needm 0.0s نصب کنید
=> CACHED [tests_ubuntu_install_without_buildx 1/7] RUN apt-get update && 0.0s
=> Cached [tests_ubuntu_install_without_buildx 2/7] RUN curl -fsSL https: 0.0s
=> Cached [tests_ubuntu_install_without_buildx 3/7] RUN add-apt-repositor 0.0s
=> Cached [tests_ubuntu_install_without_buildx 4/7] RUN apt-get update & 0.0s
=> Cached [tests_ubuntu_install_without_buildx 5/7] WORKDIR / پایتون روی wh 0.0s
=> کپی شده [tests_ubuntu_install_without_buildx 6/7] کپی. . 0.0s
=> Cached [tests_ubuntu_install_without_buildx 7/7] RUN نصب pip -e. 0.0s
=> صادر کردن به تصویر 0.1s
=> => صادرات لایه های 0.0s
=> => نوشتن تصویر sha256: e1c2382d515b097ebdac4ed189012ca3b34ab6be65ba0c 0.0s
=> => نامگذاری به docker.io/library/some_image_name
Docker Stacks
در اینجا ما یک پشته Swarmpit ساده را روی Swarm محلی مستقر می کنیم. شما یک شی St Stack دارید که دارای چندین روش است: remove ()، services ()، ps ().
>>> از python_on_whales import docker
>>> docker.swarm.init ()
>>> swarmpit_stack = docker.stack.deploy ("swarmpit" ، نوشتن_فایل ها = ["./docker-compose.yml"])
ایجاد شبکه swarmpit_net
ایجاد سرویس swarmpit_influxdb
ایجاد سرویس swarmpit_agent
ایجاد سرویس swarmpit_app
ایجاد سرویس swarmpit_db
>>> swarmpit_stack.services ()
[ ،
،
،
]
>>> swarmpit_stack.remove ()
Docker Compose
در اینجا نشان می دهیم كه چگونه می توانیم برنامه Docker Compose را با نهنگ های پایتون اجرا كنیم. توجه داشته باشید که در پشت صحنه ، از نسخه جدید Compose نوشته شده در Golang استفاده می کند. این نسخه از نوشتن هنوز آزمایشی است. اقدامات احتیاطی مناسب را انجام دهید.
$ git clone https://github.com/dockersamples/example-voting-app.git
$ cd example-vote-app
پایتون $
>>> از python_on_whales docker import
>>> docker.compose.up (جدا = درست)
شبکه "example-vote-app_back_ tier" در حال ایجاد
شبکه "example-vote-app_back-tier" ایجاد شد
شبکه "example-vote-app_front-tier" در حال ایجاد
شبکه "example-vote-app_front-tier" ایجاد شد
example-vote-app_redis_1 در حال ایجاد
example-vote-app_db_1 در حال ایجاد
example-vote-app_db_1 ایجاد شد
example-vote-app_result_1 در حال ایجاد
example-vote-app_redis_1 ایجاد شد
example-vote-app_worker_1 در حال ایجاد
example-vote-app_vote_1 در حال ایجاد
example-vote-app_worker_1 ایجاد شد
example-vote-app_result_1 ایجاد شد
example-vote-app_vote_1 ایجاد شد
>>> برای کانتینر در docker.compose.ps ():
... چاپ (کانتینر ، نام ، کانتینر. ایالت. وضعیت)
example-vote-app_vote_1 در حال اجرا است
example-vote-app_worker_1 در حال اجرا است
example-vote-app_result_1 در حال اجرا است
example-vote-app_redis_1 در حال اجرا است
example-vote-app_db_1 در حال اجرا است
>>> docker.compose.down ()
>>> چاپ (docker.compose.ps ())
[]
بخش پاداش: صفات اشیاock docker به عنوان صفات پایتون
تمام اطلاعاتی که می توانید با docker inspect
به آنها دسترسی داشته باشید به عنوان صفات Python در دسترس است:
>>> از python_on_whales docker import
>>> my_container = docker.run ("ubuntu" ، ["sleep", "infinity"] ، جدا = درست)
>>> my_container.state.started_at
datetime.datetime (2021 ، 2 ، 18 ، 13 ، 55 ، 44 ، 358235 ، tzinfo = datetime.timezone.utc)
>>> my_container.state.running
درست است، واقعی
>>> my_container.kill ()
>>> my_container.remove ()
>>> my_image = docker.image.inspect ("اوبونتو")
>>> چاپ (my_image.config.cmd)
['/bin/bash']
نهنگ های پایتون چه بعدی دارد؟
ما در حال بهبود ادغام نهنگ های پایتون روی نهنگ ها با نوشتن جدید در Docker CLI (در حال حاضر بتا) هستیم.
شما می توانید پایتون را در نظر بگیرید – نهنگ های روی بتا است. برخی از تغییرات کوچک API هنوز ممکن است.
ما جامعه را تشویق می کنیم که آن را امتحان کند و در مورد مسائل بازخورد بدهد!