คำถามติดแท็ก docker

รูปภาพของ Docker, container, hub, และทุกอย่างที่เกี่ยวข้องกับแพลตฟอร์ม containerization

5
เหตุใดจึงแนะนำให้เรียกใช้กระบวนการเดียวเท่านั้นในคอนเทนเนอร์
ในการโพสต์บล็อกจำนวนมากและความคิดเห็นทั่วไปมีคำพูดที่ว่า "กระบวนการเดียวต่อคอนเทนเนอร์" ทำไมกฎนี้ถึงมีอยู่? ทำไมไม่เรียกใช้ ntp, nginx, uwsgi และกระบวนการอื่น ๆ ในคอนเทนเนอร์เดียวที่ต้องมีกระบวนการทั้งหมดเพื่อให้ทำงานได้? โพสต์บล็อกที่กล่าวถึงกฎนี้: "Single-process-per-container เป็นรูปแบบการออกแบบที่แนะนำสำหรับแอปพลิเคชัน Docker" "นักเทียบท่าใช้สำหรับสร้างคอนเทนเนอร์แบบกระบวนการเดียวหรือบริการเดียวเท่านั้น" "ดีกว่าที่จะใช้หนึ่งกระบวนการต่อคอนเทนเนอร์" "เรียกใช้บริการเดียวเป็นคอนเทนเนอร์" "หนึ่งกระบวนการต่อตู้คอนเทนเนอร์" "หนึ่งกระบวนการต่อคอนเทนเนอร์"

6
อะไรคือวิธีปฏิบัติที่ดีที่สุดและครอบคลุมในการพิจารณาเมื่อใช้นักเทียบท่าในการผลิต
ในที่สุดคุณก็หลงรัก Docker มากที่คุณต้องการย้ายระบบการผลิตที่สำคัญทางธุรกิจออนไลน์พร้อมข้อมูลลูกค้าที่สำคัญไปยัง Docker Swarm บางคนอาจทำไปแล้ว องค์กรอื่นไม่สามารถจ่ายได้โดยนโยบายห้ามกระบวนการผลิตที่ทำงานในโหมดรูท รายการตรวจสอบของ Building Block ที่ต้องพิจารณาสำหรับสภาพแวดล้อมการผลิต Docker คืออะไร หนึ่งไม่ต้องการทั้งหมดของพวกเขา แต่ทุกคนควรมีความสำคัญที่จะได้รับการประเมิน คำเตือน: ฉันรู้ว่ามีนโยบาย SE เพื่อหลีกเลี่ยง "รายการที่ไม่มีที่สิ้นสุดขนาดใหญ่" แต่ฉันคิดว่ารายการตรวจสอบนี้ไม่สามารถใหญ่มาก ... และไม่มีที่สิ้นสุดในตอนนี้ ตึกตึกเหล่านี้คืออะไร? หากยังไม่ได้ปรับใช้ให้ลองใช้ระบบโฮสต์ Linux ที่มีการตั้งค่าความปลอดภัยขั้นสูง - เคอร์เนลที่มีความแข็ง, SELinux เป็นต้น ลองใช้ภาพฐานขนาดเล็กของ Docker เช่นอัลไพน์ busybox หรือเริ่มต้นเช่นเริ่มต้นด้วยภาพฐานเปล่า ใช้การตั้งค่า USER นอกเหนือจากรูท ประเมินอย่างรอบคอบเพื่อลดชุดของความสามารถเคอร์เนลที่หดตัวไปแล้วให้กับคอนเทนเนอร์ พิจารณามีไบนารีที่ปฏิบัติการได้เพียงหนึ่งรายการต่อคอนเทนเนอร์เพื่อเริ่มกระบวนการของคุณเชื่อมโยงแบบคงที่ ผู้ที่ต้องการทำลายระบบของคุณเพื่อรับสิทธิ์การเข้าถึงเชลล์อาจสงสัยว่าพวกเขาพบว่าคอนเทนเนอร์ของคุณปิดการใช้งานเชลล์หรือไม่ เมานต์โวลุ่มอ่านอย่างเดียวที่ทำได้เท่านั้น คำถาม: มีอะไรอีกบ้าง?

5
ดาวน์โหลด Docker Images จาก Docker Hub โดยไม่ต้องใช้ Docker
ฉันต้องการดาวน์โหลด Docker Image จากDocker Hubด้วยตนเอง โดยเฉพาะอย่างยิ่งฉันต้องการดาวน์โหลดภาพ Docker จาก Docker Hub บนเครื่องในสภาพแวดล้อมที่ จำกัด ซึ่งไม่มี (และไม่สามารถ) ติดตั้งซอฟต์แวร์ไคลเอ็นต์ Docker ได้ ฉันคิดว่าอาจเป็นไปได้ที่จะใช้API อย่างเป็นทางการแต่นี่ไม่ใช่กรณี - ดูการสนทนาต่อไปนี้: ดึงภาพนักเทียบท่าโดยไม่มีคำสั่งนักเทียบท่า เช่นกับ wget เป็นจริงหรือไม่ที่ API ไม่รองรับการดาวน์โหลดภาพ? มีวิธีแก้ไขไหม อัปเดต 1: ฉันเจอโพสต์ ServerFault ต่อไปนี้: กำลังดาวน์โหลดอิมเมจ docker สำหรับถ่ายโอนไปยังเครื่องที่ไม่ได้เชื่อมต่ออินเทอร์เน็ต โซลูชั่นที่ได้รับการยอมรับใช้docker saveคำสั่งซึ่งไม่ได้ช่วยในสถานการณ์ของฉัน แต่โซลูชันอื่นที่โพสต์มีอ้างอิงโพสต์ StackOverflow ต่อไปนี้: การดึงภาพนักเทียบท่า หนึ่งในวิธีแก้ปัญหานั้นอ้างถึงเครื่องมือบรรทัดคำสั่งที่เรียกว่าdocker-registry-debugซึ่งสามารถสร้างcurlคำสั่งสำหรับดาวน์โหลดรูปภาพได้ นี่คือสิ่งที่ฉันได้รับ: user@host:~$ docker-registry-debug curlme docker ubuntu # …
32 docker  dockerhub 

3
ทำความเข้าใจกับเลเยอร์นักเทียบท่า
เรามีบล็อกต่อไปนี้ในของเราDockerfile: RUN yum -y update RUN yum -y install epel-release RUN yum -y groupinstall "Development Tools" RUN yum -y install python-pip git mysql-devel libxml2-devel libxslt-devel python-devel openldap-devel libffi-devel openssl-devel ฉันได้รับแจ้งว่าเราควรรวมRUNคำสั่งเหล่านี้เพื่อลดเลเยอร์นักเทียบท่าที่สร้างขึ้น: RUN yum -y update \ && yum -y install epel-release \ && yum -y groupinstall "Development Tools" \ && yum …

2
การส่งผ่านความลับไปยังคอนเทนเนอร์นักเทียบท่า
ฉันมีภาพนักเทียบท่าฐานซึ่งใช้เรียกใช้ซอฟต์แวร์วิเคราะห์ภาพ สำหรับแต่ละคอนเทนเนอร์ที่สร้างจากอิมเมจมีชุดของการตั้งค่าคอนฟิเกอเรชันซึ่งบางส่วนเป็นความลับ (คีย์เข้ารหัสข้อมูลลูกค้า ฯลฯ ) ที่ซอฟต์แวร์ใช้เพื่อวิเคราะห์และแจกจ่ายอิมเมจที่ประมวลผล ฉันจะส่งต่อความลับเหล่านี้ไปยังคอนเทนเนอร์ได้อย่างไร

2
ทำไมต้องใช้ EXPOSE ใน Dockerfile - เนื่องจากคุณสามารถผูกเข้ากับพอร์ตทั้งหมดได้
ฉันสามารถทำได้docker run -p 3000:3000 image โดยไม่ต้อง EXPOSEพอร์ตที่อยู่ในภาชนะ (ดูด้านล่าง) หากเป็นจริงแล้วทำไมต้องกังวลกับการวาง EXPOSE ไว้ใน Dockerfile มันเป็นเพียงการสื่อสารกับผู้ใช้ภาพ? เพราะฉันไม่รู้เหตุผลที่ใช้งานได้ของพอร์ต EXPOSE หากพวกมันถูกผูกมัดอยู่ดี นี่คือขั้นตอนที่แสดงการเชื่อมโยงพอร์ตในคอนเทนเนอร์แม้ว่าจะไม่ใช่ EXPOSEd ก็ตาม $ cat Dockerfile FROM alpine RUN apk add nodejs npm vim COPY webserver /webserver CMD [ "node", "/webserver/index.js" ] $ docker build . Sending build context to Docker daemon 1.931MB Step …

1
ทำไมนักเทียบท่า in-Docker ถึงไม่ดี?
ในเดือนสิงหาคม 2013 Jérôme Petazzoni ได้สร้าง Docker in Docker dindเป็นระยะเวลาสั้น ๆ ทำให้ภาชนะบรรจุ Docker นั้นถูกสร้างขึ้นภายใน Docker Containers การทำงานนี้ได้รับความนิยมอย่างมากทำให้GitHub Repository ของJérômeได้รับดาวนับพันและสามร้อยส้อม ตั้งแต่วันที่ 1.8 ของ Docker ซึ่งวางจำหน่ายสองปีต่อมาในเดือนสิงหาคม 2558 Docker in Docker ได้รับการสนับสนุนโดยตรงจาก Docker อย่างไรก็ตามการใช้ Docker ใน Docker นั้นมาพร้อมกับคำเตือนดูเหมือนว่าจะเกี่ยวข้องกับโพสต์ของJérôme: การใช้ Docker-in-Docker สำหรับ CI หรือสภาพแวดล้อมการทดสอบของคุณหรือไม่ คิดสองครั้ง ซึ่งมุ่งเน้นไปที่เหตุผลที่นักเทียบท่าใน Docker ไม่ใช่ตัวเลือกที่ยอดเยี่ยมสำหรับการรวมอย่างต่อเนื่อง ทำไมการใช้งาน Docker ใน Docker จึงถือว่าไม่ดี มันเป็นเพียงแค่กรณีที่หลีกเลี่ยงเต่าตลอดทาง? หรือข้อควรพิจารณาด้านประสิทธิภาพ?

2
วิธีการมีสตรีมบันทึกหลายรายการในนักเทียบท่า
เรามีแอปพลิเคชันที่เขียนบันทึกสามประเภทลงในไฟล์ที่แยกต่างหากสามไฟล์: บันทึกการเข้าถึงบันทึกแอปพลิเคชันทั่วไปและบันทึกระบบ รูปแบบ (และวัตถุประสงค์) ของบันทึกเหล่านี้แตกต่างกันมาก และเรามี logforwarders แยกต่างหากที่ส่งแยกต่างหากไปยังระบบบันทึกข้อมูลส่วนกลางของเรา ตามบันทึกการรักษาเป็นหลักการสตรีมเหตุการณ์เรากำลังคิดเกี่ยวกับการย้ายจากการใช้ไฟล์ไปยัง stdout ในขณะที่เรารู้ถึงประโยชน์บางประการของวิธีการนี้สิ่งนี้ก็หมายความว่าเราจะได้รับกระแสข้อมูลที่ผสานของรูปแบบบันทึกที่แตกต่างกันซึ่งเราจะต้องแยกอีกครั้งก่อนที่เราจะสามารถส่งพวกเขาไปยังระบบกลางของเรา (Kibana / Splunk / ฯลฯ ) หรือด้านใน เราสงสัยว่ามีเครื่องมือหรือคำแนะนำเกี่ยวกับวิธีที่เราควรเข้าหาสถานการณ์นี้หรือไม่
21 docker  logging 

7
วิธีสร้างอิมเมจที่เล็กที่สุดในการทำงานทุกครั้ง?
มุ่ง:เพื่อสร้างอิมเมจที่เล็กที่สุดในการทำงานทุกครั้ง ปัจจุบัน REPOSITORY TAG IMAGE ID CREATED SIZE a-docker-image latest x 42 minutes ago 1.92 GB พยายาม การเพิ่มขั้นตอนการล้างข้อมูลในตอนท้ายของ Dockerfile: #clean RUN apt-get purge -y wget RUN rm -r a-build-dir RUN apt-get purge -y a-package ลดขนาดภาพลงเล็กน้อย: REPOSITORY TAG IMAGE ID CREATED SIZE a-docker-image latest y 2 minutes ago 1.86 GB อภิปรายผล …
19 docker 

4
ข้อดีของการเทียบท่า nginx และ php ในตู้คอนเทนเนอร์ที่แตกต่างกันคืออะไร?
ฉันเพิ่งเริ่มทำงานกับ Docker และ Kubernetes และฉันได้ดูสแต็คจำนวนมากซึ่งบางคนสร้าง nginx + php ในภาพเดียวและบางคนสร้างภาพด้วย nginx และอีกคนหนึ่งที่มี php (ติดตั้งเส้นทางเดียวกันและล้อมรอบ คอนเทนเนอร์ทั้งสองในการปรับใช้เดียวกันใน Kubernetes) อะไรคือข้อดีของการสร้างอิมเมจเทียบท่าสองชิ้นแทนที่จะติดตั้งทั้ง nginx + php ในอันเดียวกัน

3
ประเภทนักเทียบท่าที่ไม่ถูกต้องควรเป็นสตริง
ฉันมีตัวแปรสภาพแวดล้อมต่อไปนี้ได้รับการกำหนดค่าในไฟล์ docker-compose.yml: version: '3' services: server: ports: - 13045:3000 environment: - NODE_CONFIG: '{"DATABASE_URL":"http://db:5984"}' เมื่อพยายามเรียกใช้docker-compose upฉันได้รับข้อผิดพลาดนี้: services.server.environment contains {"NODE_CONFIG": "{\"DATABASE_URL\":\"http://db:5984\"}"}, which is an invalid type, it should be a string ฉันต้องการตัวแปรสภาพแวดล้อมที่จะตั้งเป็นสตริง JSON (ดูhttps://github.com/lorenwest/node-config/wiki/Environment-Variables#node_config ) ฉันกำลังทำอะไรผิดที่นี่? ฉันจะทำให้มันทำงานได้ไหม?

2
ฉันควรจะกำหนดค่าแอพพลิเคชั่นของฉันที่ไหน?
ฉันได้อ่านเมื่อเร็ว ๆ นี้การอภิปรายเกี่ยวกับ " คุณสมบัติที่ควรขึ้นอยู่กับสภาพแวดล้อมที่ถูกเก็บไว้? " วิธีแบบคลาสสิกคือการมีไฟล์คุณสมบัติหลายไฟล์หนึ่งไฟล์ต่อสภาพแวดล้อมและขึ้นอยู่กับตัวแปรสภาพแวดล้อม (DEV, PROD ... ) คุณเลือกตำแหน่งที่จะอ่านเมื่อเริ่มต้นแอปพลิเคชัน (เช่นเดียวกับโปรไฟล์สปริง) ในทางกลับกันถ้าคุณใช้คอนเทนเนอร์เพื่อปรับใช้แอปพลิเคชันของคุณกล่าวว่าการกำหนดค่าประเภทนี้ควรมาจากสภาพแวดล้อมของตัวเอง (โดยใช้ตัวแปรสภาพแวดล้อมที่แอปพลิเคชันอ่าน) ดังนั้นภาพจะไม่เปลี่ยนแปลงระหว่างสภาพแวดล้อม ข้อดีและข้อเสียของแต่ละวิธีคืออะไร มีวิธี "ดีที่สุด" สำหรับสถานการณ์จำลองคอนเทนเนอร์หรือไม่

3
ไม่มี Oracle JDK สำหรับนักเทียบท่าหรือไม่?
REPOSITORY TAG IMAGE ID CREATED SIZE an-image 1 X 26 seconds ago 279 MB เมื่อภาพนักเทียบท่าจะทำงานข้อความต่อไปนี้จะปรากฏขึ้น: No java installations was detected. Please go to http://www.java.com/getjava/ and download เมื่อปรับใช้ Oracle JDK ขนาดภาพของนักเทียบท่าจะเพิ่มขึ้นเป็นสองเท่า! REPOSITORY TAG IMAGE ID CREATED SIZE an-image 2 X 26 seconds ago 666 MB อภิปรายผล เมื่อ "ไม่มี Oracle JDK สำหรับนักเทียบท่า" …

4
มีข้อเสียของการใช้แพคเกจ deb ราวกับว่ามันเป็นภาชนะในการปรับใช้โปรแกรมประยุกต์หรือไม่?
ทีมของฉันกำลังพยายามตัดสินใจว่าเราควรปรับใช้แอป Nodejs ของเราเป็นแพ็คเกจ deb แทนที่จะพยายามเรียกใช้ในคอนเทนเนอร์เช่น Docker ฉันได้รับแนวคิดนี้จากการอ่านบล็อกนี้ที่นี่ซึ่งทำให้ข้อโต้แย้งที่ดีสำหรับการใช้แพคเกจ deb สำหรับแอพพลิเคชั่นที่มีอยู่แล้ว ประเด็นหลักจากบล็อกนี้ที่น่าสนใจสำหรับเราคือปัญหาของการรักษาระบบนิเวศของนักเทียบท่า (การแชร์พอร์ต, การอนุญาต, การโฮสต์ของ Docker Images ฯลฯ ) ดูเหมือนว่า "dep-packages เป็นคอนเทนเนอร์ดั้งเดิม" เหมาะสมสำหรับบริการขนาดเล็กที่ไม่ต้องกังวลเกี่ยวกับความขัดแย้งของพอร์ตและการพึ่งพาทั้งหมดได้รับการดูแลภายในสภาพแวดล้อมเสมือน อย่างไรก็ตามลำไส้ของฉันกำลังบอกฉันว่าถ้าแพ็คเกจ deb เหมาะสมดีมันจะเป็นเรื่องธรรมดามากขึ้นและนักโฆษณาจะได้รับการโฆษณาว่าเป็นวิธีแก้ปัญหาภาษาเฉพาะเพิ่มเติม มีข้อเสียของการใช้บางอย่างเช่นแพคเกจ deb เพื่อปรับใช้บริการของเราแทนที่จะใช้ระบบเต็มรูปแบบเช่นนักเทียบท่า?

2
ความแตกต่างระหว่าง chroot และ Docker
ฉันไม่เข้าใจความแตกต่างระหว่างนักเทียบท่าและ chroot ใช่มันเป็นเรื่องที่ดีในแง่ของบรรจุภัณฑ์รีจิสทรี แต่อย่างใดฉันได้รับความรู้สึกมัน chroot เพียงกับระฆังและนกหวีดพิเศษ ฉันรู้ว่าฉันขาดอะไรไป มันคงจะดีถ้าได้รู้ว่าพวกมันแตกต่างและต้องการนักเทียบท่าถ้า chroot สามารถทำอะไรที่คล้ายกันได้ ฉันไม่สามารถหาChroot Vs Docker ได้ชัดเจนพอ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.