تسعى مجموعة الوثائق لهذا المنتج جاهدة لاستخدام لغة خالية من التحيز. لأغراض مجموعة الوثائق هذه، يتم تعريف "خالية من التحيز" على أنها لغة لا تعني التمييز على أساس العمر، والإعاقة، والجنس، والهوية العرقية، والهوية الإثنية، والتوجه الجنسي، والحالة الاجتماعية والاقتصادية، والتمييز متعدد الجوانب. قد تكون الاستثناءات موجودة في الوثائق بسبب اللغة التي يتم تشفيرها بشكل ثابت في واجهات المستخدم الخاصة ببرنامج المنتج، أو اللغة المستخدمة بناءً على وثائق RFP، أو اللغة التي يستخدمها منتج الجهة الخارجية المُشار إليه. تعرّف على المزيد حول كيفية استخدام Cisco للغة الشاملة.
ترجمت Cisco هذا المستند باستخدام مجموعة من التقنيات الآلية والبشرية لتقديم محتوى دعم للمستخدمين في جميع أنحاء العالم بلغتهم الخاصة. يُرجى ملاحظة أن أفضل ترجمة آلية لن تكون دقيقة كما هو الحال مع الترجمة الاحترافية التي يقدمها مترجم محترف. تخلي Cisco Systems مسئوليتها عن دقة هذه الترجمات وتُوصي بالرجوع دائمًا إلى المستند الإنجليزي الأصلي (الرابط متوفر).
يصف هذا المستند عملية التكوين من أجل إنشاء التطبيقات المستندة إلى Docker ونشرها وإدارتها على الأجهزة القادرة على IOx من Cisco.
لا توجد متطلبات خاصة لهذا المستند.
تستند المعلومات الواردة في هذا المستند إلى إصدارات البرامج والمكونات المادية التالية:
تم إنشاء المعلومات الواردة في هذا المستند من الأجهزة الموجودة في بيئة معملية خاصة. بدأت جميع الأجهزة المُستخدمة في هذا المستند بتكوين ممسوح (افتراضي). إذا كانت شبكتك مباشرة، فتأكد من فهمك للتأثير المحتمل لأي أمر.
يمكن أن يستضيف IOx أنواعا مختلفة من الحزم بشكل رئيسي Java و Python و LXC و Virtual Machine (VM) وما إلى ذلك، كما يمكنه تشغيل حاويات Docker. تقدم Cisco صورة أساسية ومستودع مركز توثيق كامل: https://devhub.cisco.com/artifactory/webapp/#/artifacts/browse/tree/General/iox-docker يمكن إستخدامه لإنشاء حاويات Docker.
هذا دليل مفصل خطوة بخطوة حول كيفية بناء حاوية إرساء بسيطة باستخدام نظام لينكس الألب. إن Alpine Linux هو صورة صغيرة من Linux (حوالي 5 ميغابايت)، والتي غالبا ما تستخدم كقاعدة لحاويات المرساة. في هذه المقالة، يمكنك البدء من جهاز تم تكوينه IOx وجهاز CentOS 7 Linux فارغ وبناء خادم ويب Python صغير وحزمه في حاوية Docker ونشر ذلك على جهاز IOx.
1. قم بتثبيت عميل IOx وإعداده على مضيف Linux.
عميل IOx هو الأداة التي يمكنها حزم التطبيقات والتواصل مع الجهاز المزود بتقنية IOx لإدارة تطبيقات IOx.
بعد تنزيل حزمة تثبيت عميل iXP، يمكن تثبيتها على النحو التالي:
[jedepuyd@db ~]$ ll ioxclient_1.3.0.0_linux_amd64.tar.gz
-rw-r--r--. 1 jedepuyd jedepuyd 4668259 Jun 22 09:19 ioxclient_1.3.0.0_linux_amd64.tar.gz
[jedepuyd@db ~]$ tar -xvzf ioxclient_1.3.0.0_linux_amd64.tar.gz
ioxclient_1.3.0.0_linux_amd64/ioxclient
ioxclient_1.3.0.0_linux_amd64/README.md
[jedepuyd@db ~]$ ./ioxclient_1.3.0.0_linux_amd64/ioxclient --version
Config file not found : /home/jedepuyd/.ioxclientcfg.yaml
Creating one time configuration..
Your / your organization's name : Cisco
Your / your organization's URL : www.cisco.com
Your IOx platform's IP address[127.0.0.1] : 10.48.43.197
Your IOx platform's port number[8443] :
Authorized user name[root] : admin
Password for admin :
Local repository path on IOx platform[/software/downloads]:
URL Scheme (http/https) [https]:
API Prefix[/iox/api/v2/hosting/]:
Your IOx platform's SSH Port[2222]:
Activating Profile default
Saving current configuration
ioxclient version 1.3.0.0
[jedepuyd@db ~]$ ./ioxclient_1.3.0.0_linux_amd64/ioxclient --version
ioxclient version 1.3.0.0
كما ترى، يمكن إنشاء ملف تعريف لجهاز IOx عند بدء تشغيل عميل IOx لأول مرة، والذي يمكنك إدارته مع عميل IOx. في حالة رغبتك في تنفيذ ذلك لاحقا أو إذا أردت إضافة/تغيير الإعدادات، يمكنك تشغيل هذا الأمر لاحقا:إنشاء ملفات تعريف IOXCLIENT
2. قم بتركيب وإعداد Docker على مضيف Linux.
يتم إستخدام Docker لإنشاء حاوية واختبار تنفيذ نموذج التطبيق الخاص بنا.
تعتمد خطوات التثبيت لتثبيت Docker بشكل كبير على نظام تشغيل Linux الذي قمت بتثبيته عليه. بالنسبة لهذه المقالة، يمكنك إستخدام CentOS 7. للحصول على تعليمات التثبيت لمختلف التوزيعات، راجع https://docs.docker.com/engine/installation/.
تثبيت المتطلبات الأساسية:
[jedepuyd@db ~]$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ... Complete!
إضافة رسالة اعتماد Docker:
[jedepuyd@db ~]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo Loaded plugins: fastestmirror adding repo from: https://download.docker.com/linux/centos/docker-ce.repo grabbing file https://download.docker.com/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo
تثبيت Docker (قبول التحقق من مفتاح GPG عند التثبيت):
[jedepuyd@db ~]$ sudo yum install docker-ce ... Complete!
بدء تشغيل Docker:
[jedepuyd@db ~]$ sudo systemctl start docker
[jedepuyd@db iox_docker_pythonweb]$ vi Dockerfile [jedepuyd@db iox_docker_pythonweb]$ cat Dockerfile FROM alpine:3.3 RUN apk add --no-cache python COPY webserver.py /webserver.py
لكي تتمكن من الوصول إلى/تشغيل Docker كمستخدم عادي، أضف هذا المستخدم إلى مجموعة Docker وقم بتحديث عضوية المجموعة:
[jedepuyd@db ~]$ sudo usermod -a -G docker jedepuyd [jedepuyd@db ~]$ newgrp docker
تسجيل الدخول إلى مركز الإرساء:
يحتوي Docker Hub على صورة قاعدة جبال الألب التي يمكنك إستخدامها. في حالة عدم وجود معرف Docker لديك بعد، تحتاج إلى التسجيل على: https://hub.docker.com/.
[jedepuyd@db ~]$ docker login Log in with your Docker ID to push and pull images from Docker Hub. If you do not have a Docker ID, head over to https://hub.docker.com to create one. Username: jensdepuydt Password: Login Succeeded
3. قم بإنشاء خادم ويب Python.
الآن بعد أن تم التحضير، يمكنك البدء في إنشاء التطبيق الفعلي الذي يمكن تشغيله على جهاز تمكين IOx.
[jedepuyd@db ~]$ mkdir iox_docker_pythonweb [jedepuyd@db ~]$ cd iox_docker_pythonweb/ [jedepuyd@db iox_docker_pythonweb]$ vi webserver.py [jedepuyd@db iox_docker_pythonweb]$ cat webserver.py #!/usr/bin/env python from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import SocketServer import os class S(BaseHTTPRequestHandler): def _set_headers(self): self.send_response(200) self.send_header('Content-type', 'text/html') self.end_headers() def do_GET(self): self._set_headers() self.wfile.write("<html><body><h1>IOX python webserver</h1></body></html>") def run(server_class=HTTPServer, handler_class=S, port=80): server_address = ('', port) httpd = server_class(server_address, handler_class) print 'Starting webserver...' log_file_dir = os.getenv("CAF_APP_LOG_DIR", "/tmp") log_file_path = os.path.join(log_file_dir, "webserver.log") logf = open(log_file_path, 'w') logf.write('Starting webserver....\n') logf.close() httpd.serve_forever() if __name__ == "__main__": from sys import argv if len(argv) == 2: run(port=int(argv[1])) else: run()
هذا الرمز هو خادم ويب Python صغير جدا، والذي تقوم بإنشائه في WebServer.py. يقوم خادم الويب ببساطة بإرجاع IOx Python Web Server بمجرد طلب GET. يمكن أن يكون المنفذ الذي يبدأ عليه خادم الويب إما منفذ 80 أو أول وسيطة تعطى إلى WebServer.py.
يحتوي هذا الرمز أيضا، في دالة التشغيل، على كتابة إلى ملف سجل. يتوفر ملف السجل للاستشارة من عميل IOx أو المدير المحلي.
4. إنشاء Dockerfile وحاوية Docker.
الآن بعد أن أصبح لديك التطبيق (WebServer.py) الذي يجب تشغيله في الحاوية الخاصة بك، حان الوقت لإنشاء حاوية Docker. يتم تعريف الحاوية في Dockerfile:
[jedepuyd@db iox_docker_pythonweb]$ vi Dockerfile [jedepuyd@db iox_docker_pythonweb]$ cat Dockerfile FROM alpine:3.3 RUN apk add --no-cache python COPY webserver.py /webserver.py
كما ترى، يتم أيضا الاحتفاظ بالملف Dockerfile ببساطة. تبدأ بصورة قاعدة جبال الألب، ثم قم بتثبيت Python وانسخ خادم الويب الخاص بك.py إلى جذر الحاوية.
بمجرد أن تصبح Dockerfile جاهزا، يمكنك إنشاء حاوية Docker:
jedepuyd@db iox_docker_pythonweb]$ docker build -t ioxpythonweb:1.0 . Sending build context to Docker daemon 3.584 kB Step 1/3 : FROM alpine:3.3 3.3: Pulling from library/alpine 10462c29356c: Pull complete Digest: sha256:9825fd1a7e8d5feb52a2f7b40c9c4653d477b797f9ddc05b9c2bc043016d4819 Status: Downloaded newer image for alpine:3.3 ---> 461b3f7c318a Step 2/3 : RUN apk add --no-cache python ---> Running in b057a8183250 fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/main/x86_64/APKINDEX.tar.gz fetch http://dl-cdn.alpinelinux.org/alpine/v3.3/community/x86_64/APKINDEX.tar.gz (1/10) Installing libbz2 (1.0.6-r4) (2/10) Installing expat (2.1.1-r1) (3/10) Installing libffi (3.2.1-r2) (4/10) Installing gdbm (1.11-r1) (5/10) Installing ncurses-terminfo-base (6.0-r6) (6/10) Installing ncurses-terminfo (6.0-r6) (7/10) Installing ncurses-libs (6.0-r6) (8/10) Installing readline (6.3.008-r4) (9/10) Installing sqlite-libs (3.9.2-r0) (10/10) Installing python (2.7.12-r0) Executing busybox-1.24.2-r1.trigger OK: 51 MiB in 21 packages ---> 81e98c806ee9 Removing intermediate container b057a8183250 Step 3/3 : COPY webserver.py /webserver.py ---> c9b7474b12b2 Removing intermediate container 4705922100e6 Successfully built c9b7474b12b2 [jedepuyd@db iox_docker_pythonweb]$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ioxpythonweb 1.0 c9b7474b12b2 11 seconds ago 43.4 MB alpine 3.3 461b3f7c318a 2 days ago 4.81 MB
يقوم أمر بناء Docker بتنزيل الصورة الأساسية وتثبيت Python والتبعيات، كما طلبت في ملف Dockerfile. الأمر الأخير هو للتحقق.
5. قم باختبار حاوية Docker التي تم إنشاؤها.
هذه الخطوة إختيارية ولكن من الجيد التحقق من أن حاوية Docker التي تم إنشاؤها للتو جاهزة للعمل كما هو متوقع.
[jedepuyd@db iox_docker_pythonweb]$ docker run -ti ioxpythonweb:1.0 / # python /webserver.py 9000 & / # Starting webserver... / # netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 7/python / # exit
كما ترى في مخرجات Netstat، بعد بدء تشغيل WebServer.py، فإنه يستمع على المنفذ 9000.
6. قم بإنشاء حزمة IOx باستخدام حاوية Docker.
الآن بعد التحقق من صحة وظائف خادم الويب في الحاوية، حان الوقت لإعداد حزمة IOx وإنشائها للنشر. بما أن Dockerfile يوفر إرشادات لبناء حاوية Docker، فإن package.yaml يوفر تعليمات لعميل IOx لبناء حزمة IOx الخاصة بك.
jedepuyd@db iox_docker_pythonweb]$ vi package.yaml [jedepuyd@db iox_docker_pythonweb]$ cat package.yaml descriptor-schema-version: "2.2" info: name: "iox_docker_pythonweb" description: "simple docker python webserver on port 9000" version: "1.0" author-link: "http://www.cisco.com" author-name: "Jens Depuydt" app: cpuarch: "x86_64" type: docker resources: profile: c1.small network: - interface-name: eth0 ports: tcp: [9000] startup: rootfs: rootfs.tar target: ["python","/webserver.py","9000"]
يمكن العثور على مزيد من المعلومات حول محتويات الحزمة.yaml هنا: https://developer.cisco.com/media/iox-dev-guide-3-10-16/concepts/package_descriptor/.
بعد إنشاء الحزمة.yaml، يمكنك البدء في بناء حزمة IOx.
تتمثل الخطوة الأولى في تصدير FS الجذر لصورة Docker:
[jedepuyd@db iox_docker_pythonweb]$ docker save -o rootfs.tar ioxpythonweb:1.0
بعد ذلك، يمكنك إنشاء الحزمة.tar:
[jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient package . Currently active profile: default Command Name: package Checking if package descriptor file is present. Validating descriptor file /home/jedepuyd/iox_docker_pythonweb/package.yaml with package schema definitions Parsing descriptor file. Found schema version 2.2 Loading schema file for version 2.2 Validating package descriptor file.. File /home/jedepuyd/iox_docker_pythonweb/package.yaml is valid under schema version 2.2 Created Staging directory at : /tmp/700740789 Copying contents to staging directory Checking for application runtime type Couldn't detect application runtime type Creating an inner envelope for application artifacts Generated /tmp/700740789/artifacts.tar.gz Calculating SHA1 checksum for package contents.. Parsing Package Metadata file : /tmp/700740789/.package.metadata Wrote package metadata file : /tmp/700740789/.package.metadata Root Directory : /tmp/700740789 Output file: /tmp/335805072 Path: .package.metadata SHA1 : 55614e72481a64726914b89801a3276a855c728a Path: artifacts.tar.gz SHA1 : 816c7bbfd8ae76af451642e652bad5cf9592370c Path: package.yaml SHA1 : ae75859909f6ea6947f599fd77a3f8f04fda0709 Generated package manifest at package.mf Generating IOx Package.. Package generated at /home/jedepuyd/iox_docker_pythonweb/package.tar
تتمثل نتيجة البناء في حزمة IOx (package.tar)، التي تحتوي على حاوية Docker، الجاهزة للنشر على IOx.
ملاحظة: يمكن ل IOxclient تنفيذ أمر حفظ الإرساء في خطوة واحدة أيضا. في CentOS، يؤدي ذلك إلى التصدير إلى ROOTFS.img الافتراضي بدلا من ROOTFS.tar، مما يؤدي إلى حدوث مشكلة في وقت لاحق من العملية. يمكن القيام بالخطوة الأولى التي سيتم إنشاؤها باستخدام حزمة إرساء عميل IOx IOxpythonweb:1.0.
8. نشر الحزمة وتنشيطها وبدء تشغيلها على جهاز IOx.
تتمثل الخطوات الأخيرة في نشر حزمة IOx إلى جهاز IOx وتنشيطها وبدء تشغيلها. يمكن تنفيذ هذه الخطوات باستخدام عميل IOx أو المدير المحلي أو مدير الشبكة الضبابية. بالنسبة لهذه المقالة، يمكنك إستخدام عميل IOx.
من أجل نشر الحزمة إلى جهاز IOx، أستخدم الاسم python_web:
[jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient app install python_web package.tar Currently active profile: default Command Name: application-install Installation Successful. App is available at: https://10.48.43.197:8443/iox/api/v2/hosting/apps/python_web Successfully deployed
قبل أن تتمكن من تنشيط التطبيق، يجب تحديد كيفية تكوين الشبكة. للقيام بذلك، تحتاج إلى إنشاء ملف JSON. عند التنشيط، يمكن إرفاقه بطلب التنشيط.
[jedepuyd@db iox_docker_pythonweb]$ vi activate.json [jedepuyd@db iox_docker_pythonweb]$ cat activate.json { "resources": { "profile": "c1.small", "network": [{"interface-name": "eth0", "network-name": "iox-nat0","port_map": {"mode": "1to1"},"ports":{"tcp":9000}}] } } [jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient app activate python_web --payload activate.json Currently active profile : default Command Name: application-activate Payload file : activate.json. Will pass it as application/json in request body.. App python_web is Activated
الإجراء الأخير هنا هو بدء تشغيل التطبيق الذي قمت بنشره وتنشيطه للتو:
[jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient app start python_web Currently active profile : default Command Name: application-start App python_web is Started
بما أنك قمت بتكوين تطبيق IOx الخاص بك للاستماع على المنفذ 9000 لطلبات HTTP الحالية، فما زلت بحاجة إلى إعادة توجيه ذلك المنفذ من جهاز IOx الخاص بك إلى الحاوية حيث إن الحاوية خلف NAT. قم بإجراء هذا على برنامج Cisco IOS® للقيام بذلك.
BRU-IOT-809-1#sh iox host list det | i IPV4 IPV4 Address of Host: 192.168.1.2 BRU-IOT-809-1#conf t Enter configuration commands, one per line. End with CNTL/Z. BRU-IOT-809-1(config)#ip nat inside source static tcp 192.168.1.2 9000 interface GigabitEthernet0 9000 BRU-IOT-809-1(config)#exit
يسرد الأمر الأول عنوان IP الداخلي لنظم التشغيل (المسؤول عن بدء/إيقاف/تشغيل حاويات IOx).
يقوم الأمر الثاني بتكوين منفذ ساكن إستاتيكي للأمام للمنفذ 9000 على واجهة Gi0 من جانب IOS إلى OS. في حالة اتصال الجهاز الخاص بك عبر منفذ L2 (والذي هو على الأرجح الحالة على IR829)، يلزمك إستبدال واجهة Gi0 بشبكة VLAN الصحيحة التي تحتوي على جملة IP nat الخارجية المكونة.
استخدم هذا القسم لتأكيد عمل التكوين بشكل صحيح.
للتحقق من تشغيل خادم الويب والاستجابة بشكل صحيح، يمكنك محاولة الوصول إلى خادم الويب باستخدام هذا الأمر.
[jedepuyd@db iox_docker_pythonweb]$ curl http://10.48.43.197:9000/ <html><body><h1>IOX python webserver</h1></body></html>
أو، من متصفح حقيقي كما هو موضح في الصورة.
يمكنك أيضا التحقق من حالة التطبيق من واجهة سطر الأوامر (CLI) ل IOxclient:
[jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient app status python_web Currently active profile : default Command Name: application-status Saving current configuration App python_web is RUNNING
كما يمكنك أيضا التحقق من حالة التطبيق من واجهة المستخدم الرسومية (GUI) الخاصة بالمدير المحلي كما هو موضح في الصورة.
من أجل أن تلقي نظرة على ملف السجل الذي تكتب إليه في WebServer.py:
[jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient app logs info python_web Currently active profile : default Command Name: application-logs-info Log file information for : python_web Size_bytes : 711 Download_link : /admin/download/logs?filename=python_web-watchDog.log Timestamp : Thu Jun 22 08:21:18 2017 Filename : watchDog.log Size_bytes : 23 Download_link : /admin/download/logs?filename=python_web-webserver.log Timestamp : Thu Jun 22 08:21:23 2017 Filename : webserver.log Size_bytes : 2220 Download_link : /admin/download/logs?filename=python_web-container_log_python_web.log Timestamp : Thu Jun 22 08:21:09 2017 Filename : container_log_python_web.log
يوفر هذا القسم معلومات يمكنك إستخدامها لاستكشاف أخطاء التكوين وإصلاحها.
لاستكشاف أخطاء التطبيق و/أو الحاوية وإصلاحها، فإن أسهل طريقة هي الاتصال بوحدة التحكم الخاصة بالتطبيق الذي يتم تشغيله:
[jedepuyd@db iox_docker_pythonweb]$ ../ioxclient_1.3.0.0_linux_amd64/ioxclient app console python_web Currently active profile: default Command Name: application-console Console setup is complete.. Running command: [ssh -p 2222 -i python_web.pem appconsole@10.48.43.197] The authenticity of host '[10.48.43.197]:2222 ([10.48.43.197]:2222)' can't be established. ECDSA key fingerprint is 1d:e4:1e:e1:99:8b:1d:d5:ca:43:69:6a:a3:20:6d:56. Are you sure you want to continue connecting (yes/no)? yes / # netstat -tlpn Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:9000 0.0.0.0:* LISTEN 19/python / # ps aux | grep python 19 root 0:00 python /webserver.py 9000