ສ້າງຄອນເທນເນີດ້ວຍ Containerfile
ການສ້າງ Containerfile
ຖ້າຫາກຍັງບໍ່ມີຄອນເທນເນີສຳລັບແອັບພລິເຄຊັນຂອງທ່ານ, ທ່ານສາມາດສ້າງມັນຂຶ້ນມາສຳລັບອຸປະກອນຂອງທ່ານໄດ້.
ໂດຍທົ່ວໄປແລ້ວແມ່ນຈະສ້າງອິເມຈ (image) ຈາກໄດເຣັກທໍຣີເຮັດວຽກທີ່ບັນຈຸ Containerfile ແລະ ໄຟລ໌ເສີມຕ່າງໆ. ນີ້ອາດຈະເປັນໄດເຣັກທໍຣີທີ່ມີການຄວບຄຸມເວີຊັນ (version controlled) ເພື່ອໃຫ້ງ່າຍຕໍ່ການແບ່ງປັນ.
$ mkdir container-demo && cd container-demo
ມີຕົວຢ່າງຫຼາຍຢ່າງໃນການສ້າງຄອນເທນເນີໂດຍໃຊ້ Containerfile. Containerfile ແບບພື້ນຖານຈະປະກອບມີບາງອົງປະກອບດັ່ງຕໍ່ໄປນີ້:
-
ແຖວ FROM ຈະລະບຸຖານ (base) ຫຼື ຈຸດເລີ່ມຕົ້ນຂອງຄອນເທນເນີ, ເຊັ່ນ ອິເມຈ Fedora ລຸ້ນຫຼ້າສຸດ. ອິເມຈນີ້ຈະຖືກດຶງ (pull) ລົງມາ ຖ້າຍັງບໍ່ມີຢູ່ໃນເຄື່ອງ. ການລະບຸລາຍລະອຽດຂອງອິເມຈແມ່ນໃຊ້ຮູບແບບດຽວກັນກັບຄຳສັ່ງ
podman pull. -
ສ້າງເລເຢີ (layer) ດ້ວຍແຕ່ລະຄຳສັ່ງ RUN. ພະຍາຍາມຫຼຸດຈຳນວນເລເຢີໂດຍການໃຊ້ຫຼາຍຄຳສັ່ງໃນແຖວດຽວກັນດ້ວຍການໃຊ້ && ລະຫວ່າງຄຳສັ່ງ. ນອກຈາກນີ້ຄວນລວມເອົາຄຳສັ່ງທຳຄວາມສະອາດ ເຊັ່ນ
dnf clean allເພື່ອຫຼຸດຂະໜາດຂອງອິເມຈສຸດທ້າຍ. -
ຄັດລອກເນື້ອຫາຈາກໄດເຣັກທໍຣີເຮັດວຽກເຂົ້າໄປໃນຄອນເທນເນີ.
-
ລະບຸພອດ (port) ທີ່ຕ້ອງການໃຫ້ລໍຖ້າການເຊື່ອມຕໍ່ດ້ວຍ EXPOSE
-
ເລີ່ມຕົ້ນແອັບພລິເຄຊັນຂອງທ່ານ
-
CMD ສາມາດຖືກຂຽນທັບໄດ້ດ້ວຍຄຳສັ່ງ podman run
-
ENTRYPOINT ມັກຈະເປັນຄຳສັ່ງຫຼັກ ແລະ ຕົວເລືອກເລີ່ມຕົ້ນ. ສາມາດໃຊ້ຮ່ວມກັບ CMD ສຳລັບຕົວເລືອກເພີ່ມເຕີມ.
-
ຕົວຢ່າງ: ເວັບແອັບພລິເຄຊັນ
ສ້າງໄດເຣັກທໍຣີເຮັດວຽກພ້ອມກັບເນື້ອຫາບາງຢ່າງສຳລັບເວັບເຊີເວີ:
$ mkdir demo-httpd && cd demo-httpd && echo 'sample container' > index.html
ເລີ່ມຕົ້ນ Containerfile ດ້ວຍຄຳສັ່ງ FROM ເພື່ອລະບຸອິເມຈພື້ນຖານ:
$ echo 'FROM fedora:latest' >> Containerfile
ເພີ່ມຄຳສັ່ງ RUN ເພື່ອອັບເດດອິເມຈ ແລະ ເພີ່ມແອັບພລິເຄຊັນ ຫຼື ເຄື່ອງມືຕ່າງໆ:
$ echo 'RUN dnf -y update && dnf -y install httpd git && dnf clean all' >> Containerfile
ຕົວຢ່າງຂ້າງເທິງແມ່ນການຕິດຕັ້ງ git. ຖ້າເນື້ອຫາເວັບຂອງທ່ານຖືກເກັບໄວ້ໃນລະບົບຄວບຄຸມເວີຊັນ, ທ່ານສາມາດເພີ່ມຄຳສັ່ງ RUN ເພື່ອໂຄລນ (clone) ຂໍ້ມູນນັ້ນລົງໃນຄອນເທນເນີໄດ້. ຖ້າເນື້ອຫາຂອງທ່ານມີຢູ່ໃນໄດເຣັກທໍຣີເຮັດວຽກແລ້ວ, ທ່ານສາມາດໃຊ້ຄຳສັ່ງ COPY ເພື່ອເພີ່ມມັນເຂົ້າໃນຄອນເທນເນີ.
ຄັດລອກໄຟລ໌ຕົວຢ່າງ index.html ເຂົ້າໄປໃນຄອນເທນເນີ:
$ echo 'COPY index.html /var/www/html/index.html' >> Containerfile
ແຖວ EXPOSE ຈະລະບຸວ່າຄອນເທນເນີລໍຖ້າການເຊື່ອມຕໍ່ຜ່ານພອດເຄືອຂ່າຍໃດແດ່. ມັນຖືກນຳໃຊ້ໂດຍຕົວເລືອກ --publish-all ໃນຄຳສັ່ງ podman run.
ລະບຸວ່າພອດໃດແດ່ທີ່ພ້ອມສຳລັບການເຜີຍແຜ່ (publish):
$ echo 'EXPOSE 80' >> Containerfile
ລະບຸຄຳສັ່ງທີ່ຈະໃຫ້ເຮັດວຽກເມື່ອຄອນເທນເນີເລີ່ມຕົ້ນ:
$ echo 'ENTRYPOINT /usr/sbin/httpd -DFOREGROUND' >> Containerfile
| ການເຊື່ອມພອດ (Port bindings) ຍັງບໍ່ຮອງຮັບໃນຄອນເທນເນີແບບ rootless. ຖ້າຄອນເທນເນີຂອງທ່ານຈຳເປັນຕ້ອງໃຊ້ງານຜ່ານເຄືອຂ່າຍ, ໃຫ້ສ້າງມັນໃນ root namespace. ການເຊື່ອມພອດສຳລັບ rootless ແມ່ນມີໃຫ້ທົດລອງແລ້ວໃນ podman 1.1.0 ພ້ອມກັບ slirp4netns v0.3.0. |
ສ້າງອິເມຈພ້ອມກັບຕັ້ງແທັກ (tag) ທີ່ອະທິບາຍຊັດເຈນ:
$ sudo podman build --tag fedora:myhttpd -f ./Containerfile
ອິເມຈຈະປະກົດຂຶ້ນໃນເລຈິດທຣີ (registry) ພາຍໃນເຄື່ອງ:
$ sudo podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/fedora myhttpd 223534b48a9c 3 minutes ago 474MB docker.io/library/fedora latest 8b38e3af7237 4 weeks ago 315MB
ເພື່ອເຮັດໃຫ້ພອດຂອງແອັບພລິເຄຊັນສາມາດເຂົ້າເຖິງໄດ້ຈາກເຄື່ອງໂຮສ (host), ໃຫ້ໃຊ້ຕົວເລືອກ --publish ຫຼື -p ຕາມດ້ວຍໝາຍເລກ hostPort:containerPort. ທ່ານສາມາດລະບຸ IP ຫຼື ລະດັບຂອງພອດໄດ້ເຊັ່ນກັນ. ເບິ່ງລາຍລະອຽດເພີ່ມເຕີມໄດ້ທີ່ [man page].
ສັ່ງໃຫ້ຄອນເທນເນີເຮັດວຽກ ແລະ ເຜີຍແຜ່ພອດ:
$ sudo podman run -p 8080:80 --name myhttpd --rm fedora:myhttpd
ເບິ່ງຂໍ້ມູນຂອງພອດ:
$ sudo podman port myhttpd 80/tcp -> 0.0.0.0:8080
ເຂົ້າເຖິງໜ້າເວັບຈາກເຄື່ອງໂຮສ:
$ curl localhost:8080
ເຂົ້າເຖິງໜ້າເວັບຈາກທາງໄກໂດຍການໃຊ້ IP address ຂອງເຄື່ອງໂຮສ ແລະ ໝາຍເລກພອດທີ່ເຜີຍແຜ່ໄວ້.
ເປີດພອດໄຟວໍ (firewall), ບໍລິການ ຫຼື ແຫຼ່ງຂໍ້ມູນຕາມທີ່ຕ້ອງການ. ອິເມຈ Fedora IoT ຈະຕັ້ງຄ່າເລີ່ມຕົ້ນໃຫ້ອະນຸຍາດທຸກແຫຼ່ງຂໍ້ມູນໃນເຄືອຂ່າຍດຽວກັນຜ່ານຕົວເລືອກ interfaces:
$ sudo firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: eth0 sources: services: dhcpv6-client mdns ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
ເພີ່ມພອດດ້ວຍຄຳສັ່ງ:
$ sudo firewall-cmd --add-port 8080/tcp
ສຶກສາຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບຄຳສັ່ງ firewall-cmd ໄດ້ທີ່ firewalld.org.
ຕົວຢ່າງ: ການໂຕ້ຕອບກັບອິນເຕີເຟສ GPIO
ເພື່ອໂຕ້ຕອບກັບອິນເຕີເຟສ GPIO, ໃຫ້ເພີ່ມແພັກເກດ libgpiod-utils ເຂົ້າໃນອິເມຈທີ່ມີຢູ່ ຫຼື ໃຊ້ຮ່ວມກັບຄອນເທນເນີ.
ວິທີການເພີ່ມແພັກເກດ:
$ sudo rpm-ostree install libgpiod-utils python3-libgpiod $ sudo gpiodetect
ການສ້າງຄອນເທນເນີສຳລັບແອັບພລິເຄຊັນທີ່ເຮັດວຽກຮ່ວມກັບອິນເຕີເຟສ GPIO ໃນ root namespace.
ເລີ່ມຕົ້ນ Containerfile ດ້ວຍຄຳສັ່ງ FROM ເພື່ອລະບຸອິເມຈພື້ນຖານ:
$ echo 'FROM fedora:latest' >> Containerfile
ເພີ່ມຄຳສັ່ງ RUN ເພື່ອອັບເດດອິເມຈ ແລະ ເພີ່ມແອັບພລິເຄຊັນ ຫຼື ເຄື່ອງມືຕ່າງໆ:
$ echo 'RUN dnf -y update && dnf -y install git libgpiod-utils python3-libgpiod && dnf clean all' >> Containerfile
ອິເມຈ fedora:latest ມີ bash ມາໃຫ້ນຳແລ້ວ ດັ່ງນັ້ນພວກເຮົາສາມາດສ້າງຄອນເທນເນີໄດ້ໂດຍບໍ່ຕ້ອງລະບຸແອັບພລິເຄຊັນທີ່ຈະເລີ່ມ ຫຼື ພອດທີ່ຈະເປີດ. ພວກເຮົາສາມາດລະບຸຄຳສັ່ງໄດ້ໃນຕອນທີ່ສັ່ງໃຫ້ຄອນເທນເນີເຮັດວຽກ.
ສ້າງອິເມຈພ້ອມກັບຕັ້ງແທັກ (tag) ທີ່ອະທິບາຍຊັດເຈນ:
$ sudo podman build --tag fedora:gpio -f ./Containerfile
ອິເມຈຈະປະກົດຂຶ້ນໃນ localhost registry ສຳລັບ root namespace:
$ sudo podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/fedora gpio 655abf78e6b9 4 minutes ago 542MB docker.io/library/fedora latest 8b38e3af7237 4 weeks ago 315MB
ເພື່ອເຂົ້າເຖິງອຸປະກອນ GPIO ຂອງເຄື່ອງໂຮສຈາກຄອນເທນເນີ, ໃຫ້ໃຊ້ຕົວເລືອກ --device ເມື່ອເລີ່ມຄອນເທນເນີ:
$ sudo podman run -it --name demo-gpio --device=/dev/gpiochip0 localhost/fedora:gpio /bin/bash
ກວດສອບວ່າທ່ານສາມາດເຫັນອຸປະກອນ GPIO ຫຼື ບໍ່:
[root@167f31750fdb /]# gpiodetect gpiochip0 [pinctrl-bcm2835] (54 lines)
ເມື່ອອຸປະກອນສາມາດໃຊ້ງານໄດ້ຈາກຄອນເທນເນີແລ້ວ, ທ່ານສາມາດໃຊ້ເຄື່ອງມືທີ່ຕິດຕັ້ງໄວ້ ຫຼື ເພີ່ມແອັບພລິເຄຊັນອື່ນໆໄດ້.
ຕົວຢ່າງການນຳໃຊ້ gpioset ສາມາດເບິ່ງໄດ້ຈາກບົດຄວາມໃນ Fedora Magazine ປີ 2018: [ວິທີເປີດໄຟ LED ດ້ວຍ Fedora IoT]
ເຮັດໃຫ້ຂັ້ນຕອນເພີ່ມເຕີມເປັນແບບອັດຕະໂນມັດໂດຍການແກ້ໄຂ Containerfile ແລະ ສ້າງຄອນເທນເນີໃໝ່.
ອິເມຈບໍ່ຈຳເປັນຕ້ອງສ້າງຈາກຄອນເທນເນີ Fedora ສະເໝີໄປ. Containerfile ນີ້ໃຊ້ raspbian image ແລະ ໂຄລນໂປຣເຈັກ lightshowpi:
$ cat Containerfile FROM raspbian/stretch:latest RUN apt-get -y update && apt-get -y install git-core && apt-get -y clean WORKDIR / RUN git clone https://togiles@bitbucket.org/togiles/lightshowpi.git && \ cd lightshowpi && git fetch && git checkout stable
ເອກະສານຂອງ Docker ຍັງໄດ້ລວມເອົາ [ແນວທາງການປະຕິບັດທີ່ດີທີ່ສຸດສຳລັບ Containerfile].
ການນຳມາໃຊ້ຄືນ ແລະ ການແບ່ງປັນຄອນເທນເນີ
ເມື່ອສ້າງຄອນເທນເນີອິເມຈແລ້ວ, ມັນສາມາດຖືກນຳໄປຕິດຕັ້ງໃນຫຼາຍອຸປະກອນໄດ້ໂດຍການອັບໂຫຼດມັນຂຶ້ນເລຈິດທຣີ.
ເລຈິດທຣີສ່ວນໃຫຍ່ຕ້ອງການໃຫ້ຕັ້ງຊື່ຕາມຮູບແບບ 'useraccount/description:tag' ແລະ ຄຳສັ່ງ pull ສ່ວນໃຫຍ່ຈະຊອກຫາແທັກ 'latest' ເປັນຄ່າເລີ່ມຕົ້ນ. ອິເມຈໜຶ່ງສາມາດມີໄດ້ຫຼາຍແທັກ ເຊິ່ງແທັກເຫຼົ່ານີ້ຈະຊ່ວຍລະບຸຄວາມເຂົ້າກັນໄດ້ຂອງສະຖາປັດຕະຍະກຳ ແລະ ການຄວບຄຸມເວີຊັນ.
ວິທີການປ່ຽນຊື່ ຫຼື ເພີ່ມແທັກໃຫ້ກັບອິເມຈພາຍໃນເຄື່ອງ:
$ podman tag fedora:myhttpd testuser/fedora-myhttpd:latest $ podman tag fedora:myhttpd quay.io/testuser/fedora-myhttpd:latest
ທັງສອງຊື່ຈະປະກົດຢູ່ໃນລາຍຊື່ອິເມຈ ແຕ່ລະຫັດອິເມຈ (image ID) ຈະເປັນອັນດຽວກັນ:
$ podman images REPOSITORY TAG IMAGE ID CREATED SIZE localhost/fedora myhttpd d52cbe4136e8 24 hours ago 428 MB localhost/testuser/fedora-myhttpd latest d52cbe4136e8 24 hours ago 428 MB quay.io/testuser/fedora-myhttpd latest d52cbe4136e8 24 hours ago 428 MB docker.io/library/fedora latest 26ffec5b4a8a 4 weeks ago 283 MB
ຈາກນັ້ນທ່ານສາມາດສົ່ງ (push) ອິເມຈໄປຍັງເລຈິດທຣີໄດ້ດ້ວຍຄຳສັ່ງ podman push imageID destination.
ວິທີການແຍກອິເມຈອອກໄປຍັງໄດເຣັກທໍຣີພາຍໃນເຄື່ອງໃນຮູບແບບ docker:
$ podman push quay.io/testuser/fedora-myhttpd dir:/tmp/fedora-myhttpd
ສຳລັບຕົວເລືອກການສົ່ງອອກອື່ນໆ, ໃຫ້ເບິ່ງທີ່ man page ຂອງ podman-push.
Want to help? Learn how to contribute to Fedora Docs ›