ฉันสร้างภาพนักเทียบท่าจาก dockerfile ฉันเห็นภาพถูกสร้างเรียบร้อยแล้ว แต่ฉันจะทำอย่างไรกับมัน? มันจะไม่สามารถเรียกใช้เป็นคอนเทนเนอร์ได้หรือไม่
ฉันสร้างภาพนักเทียบท่าจาก dockerfile ฉันเห็นภาพถูกสร้างเรียบร้อยแล้ว แต่ฉันจะทำอย่างไรกับมัน? มันจะไม่สามารถเรียกใช้เป็นคอนเทนเนอร์ได้หรือไม่
คำตอบ:
วิธีการใช้งานที่เฉพาะเจาะจงนั้นขึ้นอยู่กับว่าคุณให้แท็ก / ชื่อภาพหรือไม่
$ docker images
REPOSITORY TAG ID CREATED SIZE
ubuntu 12.04 8dbd9e392a96 4 months ago 131.5 MB (virtual 131.5 MB)
ด้วยชื่อ (ลองใช้Ubuntu ):
$ docker run -i -t ubuntu:12.04 /bin/bash
ไม่มีชื่อให้ใช้ ID:
$ docker run -i -t 8dbd9e392a96 /bin/bash
โปรดดูการอ้างอิงการทำงานของนักเทียบท่าสำหรับข้อมูลเพิ่มเติม
docker ps
แสดงรายการคอนเทนเนอร์ไม่ใช่รูปภาพ docker commit
หากคุณต้องการที่จะสร้างภาพจากภาชนะที่คุณต้อง คุณสามารถใช้NAMEในกระทำ (เช่นdocker commit _NAME_ _imagename_
)
ทำตามขั้นตอนต่อไปนี้:
$ docker images
คุณจะได้รับรายการอิมเมจ Docker ท้องถิ่นทั้งหมดพร้อมแท็กที่ระบุ
$ docker run image_name:tag_name
หากคุณไม่ได้ระบุtag_name
มันจะเรียกใช้รูปภาพโดยอัตโนมัติด้วยแท็ก 'ล่าสุด'
แทนที่จะimage_name
คุณยังสามารถระบุรหัสภาพ (ไม่ tag_name)
ในการแสดงรายการภาพ Docker
$ docker images
หากแอปพลิเคชันของคุณต้องการเรียกใช้ด้วยพอร์ต 80 และคุณสามารถเปิดเผยพอร์ตอื่น ๆ เพื่อผูกภายในเครื่องให้พูด 8080:
$ docker run -d --restart=always -p 8080:80 image_name:version
คุณสามารถดูรูปภาพที่มีอยู่โดยใช้:
docker images
จากนั้นคุณสามารถเรียกใช้ในโหมดเดี่ยวดังนั้นเทอร์มินัลของคุณยังคงใช้งานได้ คุณมีหลายตัวเลือกในการรันโดยใช้ชื่อที่เก็บ (มีหรือไม่มีแท็ก) หรือรหัสรูปภาพ:
docker run -d repository
docker run -d repository:tag
docker run -d image_id
จากนั้นคุณสามารถตรวจสอบคอนเทนเนอร์ที่ใช้งานอยู่
docker ps
docker ps
ให้ ID คอนเทนเนอร์ คุณสามารถใช้มันหรือเพียงแค่ตัวอักษรแรก 2/3 เพื่อไปที่ภาชนะของคุณโดยใช้:
docker exec -it container_id /bin/bash
และคุณสามารถหยุดมันได้ใช้และdocker stop container_id
docker rm container_id
นอกจากนี้คุณยังสามารถเรียกใช้คอนเทนเนอร์ด้วย-rm
ข้อโต้แย้งดังนั้นหากคุณหยุดคอนเทนเนอร์ของคุณมันจะถูกลบโดยอัตโนมัติ
รับชื่อหรือรหัสของภาพที่คุณต้องการเรียกใช้โดยใช้คำสั่งนี้:
docker images
คำสั่งเรียกใช้ Docker ใช้วิธีดังต่อไปนี้:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
ด้านล่างฉันได้รวมตัวเลือกการจัดส่งชื่อเผยแพร่ปริมาณและเริ่มต้นใหม่ก่อนระบุชื่อภาพหรือรหัส:
docker run -d --name container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name
ที่ไหน:
--detach , -d Run container in background and print container ID
--name Assign a name to the container
--publish , -p Publish a container’s port(s) to the host
--volume , -v Bind mount a volume
--restart Restart policy to apply when a container exits
สำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบอย่างเป็นทางการหางอ้างอิงวิ่ง
นี่คือตัวอย่างการเรียกใช้บริการ webdev ใน Docker ชื่อภาพคือmorrisjobke / WebDAV คุณสามารถดึงมันออกมาจากหาง Hub
หลังจากที่คุณเรียกภาพเหล่านี้แล้วคุณสามารถเข้าถึงWebDAVhttp://localhost:8888/webdav
อินสแตนซ์ที่ ภายในโฟลเดอร์/var/webdav
จะใช้เป็นรูท WebDAV
คุณสามารถเรียกใช้คอนเทนเนอร์นี้ด้วยวิธีต่อไปนี้:
$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav
ผมมีปัญหาเดียวกัน. ฉันใช้อิมเมจ Docker และสร้างคอนเทนเนอร์ด้วย CONTAINER_ID เฉพาะ ฉันต้องการทำงานกับคอนเทนเนอร์เดียวกัน:
ขั้นแรกให้เรียกใช้อิมเมจ Docker ของคุณ:
docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning
จากนั้นทำรายการคอนเทนเนอร์ทั้งหมดที่คุณทำ:
sudo docker ps -a
และเลือกคอนเทนเนอร์ที่คุณต้องการใช้งาน (ฉันเป็น 167ddd6d7f15):
sudo docker start -ai 167ddd6d7f15
เนื่องจากคุณได้สร้างภาพจาก Dockerfile ภาพในปัจจุบันจึงไม่อยู่ในสถานะใช้งาน ในการทำงานคุณจำเป็นต้องเรียกใช้ภาพนี้ภายในคอนเทนเนอร์
$ docker images
คำสั่งอธิบายวิธีหลายภาพมีอยู่ในปัจจุบันในพื้นที่เก็บข้อมูลท้องถิ่น และ
docker ps -a
แสดงจำนวนตู้คอนเทนเนอร์ที่มีอยู่ในปัจจุบันเช่นรายการของภาชนะที่ใช้งานและออก
มีสองวิธีในการเรียกใช้อิมเมจในคอนเทนเนอร์:
$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]
ในโหมดเดี่ยว:
-d=false: Detached mode: Run container in the background, print new container id
ในโหมดโต้ตอบ:
-i :Keep STDIN open even if not attached
นี่คือคำสั่ง Run Docker
$ docker run image_name:tag_name
สำหรับคำชี้แจงเพิ่มเติมเกี่ยวกับการเทียบท่าวิ่งคุณสามารถเยี่ยมชมหางอ้างอิงวิ่ง
เป็นวัสดุที่ดีที่สุดในการเข้าใจนักเทียบท่า
ในการดูรายการภาพทั้งหมดบนโฮสต์ Docker ของคุณให้เรียกใช้:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
apache_snapshot latest 13037686eac3 22 seconds ago 249MB
ubuntu latest 00fd29ccc6f1 3 weeks ago 111MB
ตอนนี้คุณสามารถเรียกใช้อิมเมจ Docker เป็นคอนเทนเนอร์ในโหมดโต้ตอบ:
$ docker run -it apache_snapshot /bin/bash
หรือหากคุณไม่มีภาพในเครื่องให้ค้นหา Docker Hub เพื่อดาวน์โหลดภาพ:
$ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian... 6759 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openss... 141 [OK]
rastasheep/ubuntu-sshd Dockerized SSH ser... 114 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS w... 88 [OK]
ubuntu-upstart Upstart is an even... 80 [OK]
ดึงอิมเมจ Docker จากที่เก็บด้วยคำสั่ง puller:
$ docker pull ubuntu
เรียกใช้อิมเมจ Docker เป็นคอนเทนเนอร์:
$ docker run -it ubuntu /bin/bash
$ docker images
REPOSITORY TAG IMAGE ID CREATED
jamesmedice/marketplace latest e78c49b5f380 2 days ago
jamesmedice/marketplace v1.0.0 *e78c49b5f380* 2 days ago
$ docker run -p 6001:8585 *e78c49b5f380*
สำหรับผู้ที่มีปัญหาเดียวกันเช่นกัน แต่พบข้อผิดพลาดเช่น
rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"
ฉันเพิ่มจุดเริ่มต้นที่เหมาะกับฉัน:
docker run -it --entrypoint /bin/sh
สำหรับภาพที่ไม่มี Bash
ตัวอย่าง (จากตัวอย่างที่อนุมัติ):
run -it --entrypoint /bin/sh ubuntu:12.04
ข้อมูลอ้างอิง: https://gist.github.com/mitchwongho/11266726
docker ps -a
จึงไม่มีประโยชน์ใช่ไหม