ساخت کانتینر
دستور create برای ساخت تعریف یک کانتینر استفاده میشود. این دستور کانتینر را اجرا نمیکند، فقط کانفیگ آن را آماده میکند که بعداً بتوان کانتینر را با دستور start اجرا کرد.
🧩 دستور کلی
k3 container create [options] <containerId> <imageName:imageTag>
آرگومانها:
containerId: شناسهی دلخواه برای کانتینر که توسط کاربر تعیین میشودimageName:imageTag: نام و تگ ایمیجی که کانتینر از روی آن ساخته میشود
⚙️ گزینهها (Options)
🔧 گزینههای پیکربندی پایهای
| گزینه | توضیح |
|---|---|
--console-socket <SOCK> | مسیر سوکتی که انتهای ptmx ترمینال کانتینر به آن متصل میشود |
-f, --config <FILE> | مسیر فایل کانفیگ OCI جایگزین برای تنظیمات کانتینر (فقط فایلهای OCI پذیرفته میشوند) |
--pid-file <FILE> | مسیر فایلی که شناسهی فرآیند (PID) کانتینر در آن ذخیره میشود |
--hostname <HOSTNAME> | تنظیم نام میزبان (hostname) برای کانتینر |
--args <string> | دستور یا برنامهای که بهعنوان فرآیند اصلی کانتینر اجرا میشود در صورتی که داده نشود از دیفالت خود ایمیج استفاده میکند |
🔐 گزینههای امنیتی
| گزینه | توضیح |
|---|---|
--privileged | دادن دسترسیهای گستردهتر (privileged mode) به کانتینر (درحال توسعه) |
--cap-add [CAP...] | اضافه کردن قابلیتهای خاص لینوکس به کانتینر (میتواند چند بار استفاده شود) |
--cap-drop [CAP...] | حذف قابلیتهای پیشفرض لینوکس از کانتینر (میتواند چند بار استفاده شود) |
--no-new-keyring | استفاده از session key قبلی (برای تنظیمات امنیتی خاص) |
--no-pivot | غیرفعال کردن تغییر ریشهی فایلسیستم (pivot_root) |
--no-subreaper | غیرفعال کردن ساخت فرآیند subreaper (در حال حاضر نادیده گرفته میشود) |
💾 گزینههای منابع سیستمی
| گزینه | توضیح |
|---|---|
--cpus <NUM> | محدود کردن تعداد CPU قابل استفاده برای کانتینر |
--no-shared | استفاده از CPUهای اختصاصی به جای CPUهای مشترک (به صورت پیشفرض CPUهای مشترک استفاده میشود) |
--memory <SIZE> | محدود کردن میزان حافظهی قابل استفاده برای کانتینر |
--diskLimit <NUM> | محدود کردن استفاده از دیسک کانتینر (بر حسب مگابایت - به صورت پیشفرض از دیسک میزبان استفاده میکند) |
--mount <mount...> | تعریف نقاط mount برای کانتینر (میتواند چند بار استفاده شود) |
-v, --volume [item...] | تعریف volume برای کانتینر |
🔄 گزینههای ریستارت
| گزینه | توضیح |
|---|---|
--restart <POLICY> | سیاست ریستارت کانتینر: none, always, unless-stopped, on-failure |
--restartDelay <NUM> | مدت زمان تأخیر (بر حسب ثانیه) بین هر تلاش برای ریستارت کانتینر |
--restartWindow <NUM> | بازهی زمانی (بر حسب ثانیه) برای بررسی تعداد تلاشهای ریستارت |
--maxAttempts <NUM> | حداکثر تعداد تلاش برای ریستارت کانتینر |
🌍 گزینههای شبکه
| گزینه | توضیح |
|---|---|
-n, --network <Network> | اضافه کردن کانتینر به شبکه مشخص (میتوان نام شبکه یا شناسه شبکه را استفاده کرد) |
--ip <IPv4> | اختصاص یک آدرس IP ثابت به کانتینر |
--mac <MAC> | اختصاص یک آدرس MAC خاص به کانتینر |
-p, --publish [hostPort:containerPort...] | نگاشت پورتهای میزبان به پورتهای کانتینر (میتواند چند بار استفاده شود) |
🔤 گزینههای محیطی و دیگری
| گزینه | توضیح |
|---|---|
-e, --env [KEY=VALUE...] | تنظیم متغیرهای محیطی (میتواند چند بار استفاده شود) |
--debug | حالت دیباگ برای ایجاد کانتینر |
-h, --help | نمایش راهنمای کامل دستور |
📥 مثالهای کاربردی
مثال ۱: کانتینر ساده با متغیرهای محیطی و mount
k3 container create \
mycontainer \
alpine:latest \
--hostname myhost \
--args "tail -f /dev/null" \
-e DATABASE_URL=postgres://localhost \
-e LOG_LEVEL=debug \
--mount type=bind,source=/host/data,target=/app/data
مثال ۲: کانتینر با محدودیت منابع (CPU، حافظه، دیسک)
k3 container create \
limited-container \
ubuntu:22.04 \
--cpus 2 \
--memory 1GB \
--diskLimit 5000 \
--args "sleep 3600"
مثال ۳: کانتینر با CPU اختصاصی (بدون اشتراک)
k3 container create \
dedicated-cpu-container \
nginx:latest \
--cpus 4 \
--no-shared \
--args "nginx -g 'daemon off;'"
مثال ۴: کانتینر با تنظیمات شبکهای
k3 container create \
web-container \
nginx:latest \
-n mynetwork \
--ip 192.168.1.10 \
--mac 02:42:ac:11:00:02 \
-p 8080:80 \
-p 8443:443
مثال ۵: کانتینر با سیاست ریستارت
k3 container create \
persistent-container \
alpine:latest \
--restart always \
--restartDelay 5 \
--restartWindow 60 \
--maxAttempts 5 \
--args "while true; do echo 'Running'; sleep 10; done"
مثال ۶: کانتینر با قابلیتهای امنیتی خاص
k3 container create \
secure-container \
alpine:latest \
--cap-add NET_ADMIN \
--cap-add SYS_TIME \
--cap-drop SETUID \
--args "sleep 3600"
مثال ۷: کانتینر با تنظیمات ترکیبی (واقعگرایانه)
k3 container create \
app-container \
python:3.11 \
--hostname app-server \
--cpus 2 \
--no-shared \
--memory 2GB \
--diskLimit 10000 \
-e APP_ENV=production \
-e DATABASE_HOST=db.local \
-e CACHE_REDIS=redis:6379 \
-n app-network \
--ip 192.168.100.5 \
-p 5000:5000 \
--mount type=bind,source=/host/app,target=/app \
--mount type=bind,source=/host/logs,target=/var/log/app \
--restart unless-stopped \
--restartDelay 10 \
--maxAttempts 3 \
--args "python /app/main.py"
نکات مهم
-
CPU و دیسک: به صورت پیشفرض کانتینر میتواند CPUهای مشترک استفاده کند و دیسک محدودیتی ندارد. برای اختصاصی کردن، از
--no-sharedاستفاده کنید. -
متغیرهای محیطی: برای جلوگیری از جایگزینی متغیرهای شل، باید از تککوتیشن (single quotes) استفاده کنید:
--args 'echo $HOME' # $HOME داخل کانتینر چاپ میشود -
Mount کردن: فرمت mount باید بهصورت
type=bind,source=<hostPath>,target=<containerPath>باشد. -
سیاست ریستارت:
none: کانتینر ریستارت نمیشودalways: کانتینر همیشه ریستارت میشودunless-stopped: کانتینر تا زمانی که توقف داده نشود، ریستارت میشودon-failure: کانتینر فقط در صورت خطا ریستارت میشود
-
Config فایل: گزینه
--configتنها فایلهای OCI را میپذیرد. -
قابلیتهای لینوکس: گزینههای
--cap-addو--cap-dropدسترسیهای دقیقتری را برای کانتینر فراهم میکنند.
تست جامع
#!/bin/bash
echo "Starting k3 container create tests..."
echo "[1] Creating basic container"
sudo k3 container create basic-cont alpine:latest --args 'tail -f /dev/null'
echo
echo "[2] Creating container with environment variables"
sudo k3 container create env-cont alpine:latest \
-e VAR1=value1 \
-e VAR2=value2 \
--args 'sleep 60'
echo
echo "[3] Creating container with CPU and memory limits"
sudo k3 container create resource-cont alpine:latest \
--cpus 2 \
--memory 512MB \
--args 'sleep 60'
echo
echo "[4] Creating container with dedicated CPU (no-shared)"
sudo k3 container create dedicated-cont alpine:latest \
--cpus 1 \
--no-shared \
--args 'sleep 60'
echo
echo "[5] Creating container with disk limit"
sudo k3 container create disk-cont alpine:latest \
--diskLimit 1000 \
--args 'sleep 60'
echo
echo "[6] Creating container with network configuration"
sudo k3 container create net-cont alpine:latest \
-n mynetwork \
--ip 192.168.1.50 \
-p 8080:80 \
--args 'sleep 60'
echo
echo "[7] Creating container with mount points"
sudo k3 container create mount-cont alpine:latest \
--mount type=bind,source=/tmp,target=/data \
--args 'sleep 60'
echo
echo "[8] Creating container with capabilities"
sudo k3 container create cap-cont alpine:latest \
--cap-add NET_ADMIN \
--cap-drop SETUID \
--args 'sleep 60'
echo
echo "[9] Creating container with restart policy"
sudo k3 container create restart-cont alpine:latest \
--restart always \
--restartDelay 5 \
--maxAttempts 3 \
--args 'sleep 60'
echo
echo "[10] Creating complex container"
sudo k3 container create complex-cont ubuntu:22.04 \
--hostname complex-host \
--cpus 2 \
--memory 1GB \
--diskLimit 5000 \
-e APP_ENV=production \
-e DEBUG=false \
-n prod-network \
--ip 192.168.100.10 \
-p 3000:3000 \
--mount type=bind,source=/app,target=/var/app \
--restart unless-stopped \
--restartDelay 10 \
--maxAttempts 5 \
--args 'sleep 3600'
echo
echo "All container creation tests completed."
🆘 دریافت راهنما
برای مشاهدهی راهنمای کامل این دستور در خط فرمان:
k3 container create -h