Chạy một hình ảnh Docker như một container


604

Tôi đã xây dựng một hình ảnh Docker từ một dockerfile. Tôi thấy hình ảnh được xây dựng thành công, nhưng tôi phải làm gì với nó? Không phải nó có thể chạy như một container?

Câu trả lời:


855

Cách cụ thể để chạy nó phụ thuộc vào việc bạn đã cho hình ảnh một thẻ / tên hay không.

$ docker images
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        4 months ago        131.5 MB (virtual 131.5 MB)

Với một cái tên (hãy sử dụng Ubuntu ):

$ docker run -i -t ubuntu:12.04 /bin/bash

Không có tên, chỉ cần sử dụng ID:

$ docker run -i -t 8dbd9e392a96 /bin/bash

Vui lòng xem Docker chạy tham khảo để biết thêm thông tin.


4
Vì vậy, những cái tên thân thiện với con người được in dưới 'NAME' in docker ps -akhông hữu ích ở đây?
ThorSummoner

11
docker psliệt kê các container, không phải hình ảnh. Nếu bạn muốn tạo một hình ảnh từ một container, bạn phải docker commit. Bạn có thể sử dụng TÊN trong cam kết (ví dụ docker commit _NAME_ _imagename_)
Andy

8
@Andy Tại sao chúng ta sử dụng / bin / bash ở cuối? Tôi cũng mới
Raheel

6
@RaheelKhan Trở thành hình ảnh docker của bạn cần một cái gì đó để chạy. Bạn có thể thay thế nó bằng một chương trình mà bạn đã cài đặt. / bin / bash chỉ là một vỏ tiện dụng đã được cài đặt.
Ryan Shillington

Nếu bạn cần thêm một biến môi trường, bạn có thể thực hiện docker run -i -t -e ROOT_PASSWORD = root ub Ubuntu: 12.04
Balaji Radhakrishnan

70

Thực hiện các bước sau:

  1. $ docker images

    Bạn sẽ nhận được một danh sách tất cả các hình ảnh Docker cục bộ với các thẻ được chỉ định.

  2. $ docker run image_name:tag_name

    Nếu bạn không chỉ định, tag_namenó sẽ tự động chạy một hình ảnh với thẻ 'mới nhất'.

    Thay vì image_name, bạn cũng có thể chỉ định ID hình ảnh (không có tag_name).


35
  • Để liệt kê các hình ảnh Docker

    $ docker images
    
  • Nếu ứng dụng của bạn muốn chạy với cổng 80 và bạn có thể hiển thị một cổng khác để liên kết cục bộ, hãy nói 8080:

    $ docker run -d --restart=always -p 8080:80 image_name:version
    

21

Bạn có thể xem hình ảnh có sẵn của mình bằng cách sử dụng:

docker images

Sau đó, bạn có thể chạy trong chế độ tách rời để thiết bị đầu cuối của bạn vẫn có thể sử dụng được. Bạn có một số tùy chọn để chạy nó bằng tên kho lưu trữ (có hoặc không có thẻ) hoặc ID hình ảnh:

docker run -d repository
docker run -d repository:tag
docker run -d image_id

Sau đó, bạn có thể kiểm tra container của bạn đang chạy bằng

docker ps

docker pscung cấp cho bạn một ID container. Bạn có thể sử dụng nó hoặc chỉ 2/3 ký tự đầu tiên để đi vào thùng chứa của bạn bằng cách sử dụng:

docker exec -it container_id /bin/bash

Và bạn có thể dừng nó bằng cách sử dụng docker stop container_iddocker rm container_id.

Bạn cũng có thể chạy container của mình với các -rmđối số để nếu bạn dừng container của nó, nó sẽ tự động bị xóa.


1
Tùy chọn --rm (lưu ý: 2 dấu gạch ngang không đơn) là vàng !!!, hệ thống của tôi nằm rải rác với các thùng chứa đã dừng (chết).
Johan Snowgoose

13

Lấy tên hoặc id của hình ảnh bạn muốn chạy, bằng lệnh này:

docker images

Lệnh chạy Docker được sử dụng theo cách sau:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Dưới đây tôi đã bao gồm các tùy chọn công văn, tên, xuất bản, khối lượng và khởi động lại trước khi chỉ định tên hình ảnh hoặc id:

docker run -d --name  container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name

Ở đâu:

--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

Để biết thêm thông tin, vui lòng xem tham khảo chạy Docker chính thức .


5

Dưới đây là một ví dụ để chạy dịch vụ webdev trong Docker. Tên của hình ảnh là morrisjobke / webdav . Bạn có thể kéo nó từ Docker Hub .

Sau khi bạn chạy những hình ảnh này, bạn có thể truy cập vào phiên bản WebDAV tại http://localhost:8888/webdav. Bên trong thư mục /var/webdavđược sử dụng như root WebDAV.

Bạn có thể chạy container này theo cách sau:

$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav

Re "chạy dịch vụ webdev" : Ý bạn là "chạy dịch vụ WebDAV" ? Hoặc "chạy một dịch vụ phát triển web" ?
Peter Mortensen

5

Tôi đã từng gặp vấn đề tương tự. Tôi đã chạy hình ảnh Docker của mình và nó đã tạo ra một thùng chứa với CONTAINER_ID cụ thể. Tôi muốn làm việc với cùng một container:

Đầu tiên chạy hình ảnh Docker của bạn:

docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

Sau đó liệt kê tất cả các container bạn đã thực hiện:

sudo docker ps -a

Và chọn vùng chứa mà bạn muốn làm việc (của tôi là 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

Vì bạn đã tạo một hình ảnh từ Dockerfile, nên hình ảnh hiện không ở trạng thái hoạt động. Để làm việc, bạn cần chạy hình ảnh này trong một thùng chứa.

Các $ docker imageslệnh mô tả bao nhiêu hình ảnh hiện đang có sẵn trong kho địa phương. và

docker ps -a

hiển thị có bao nhiêu container hiện đang có sẵn, tức là danh sách các container đang hoạt động và đã thoát.

Có hai cách để chạy hình ảnh trong container:

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

Trong chế độ tách ra:

-d=false: Detached mode: Run container in the background, print new container id

Trong chế độ tương tác:

-i :Keep STDIN open even if not attached

Đây là lệnh chạy Docker

$ docker run image_name:tag_name

Để làm rõ hơn về chạy Docker, bạn có thể truy cập tham chiếu chạy Docker .

Đó là tài liệu tốt nhất để hiểu Docker.


2

Để xem danh sách tất cả hình ảnh trên máy chủ Docker của bạn, hãy chạy:

  $ docker images
   REPOSITORY          TAG           IMAGE ID            CREATED             SIZE
   apache_snapshot     latest        13037686eac3        22 seconds ago      249MB
   ubuntu              latest        00fd29ccc6f1        3 weeks ago         111MB

Bây giờ bạn có thể chạy hình ảnh Docker dưới dạng một thùng chứa trong chế độ tương tác:

   $ docker run -it apache_snapshot /bin/bash

HOẶC nếu bạn không có bất kỳ hình ảnh cục bộ nào, Tìm kiếm Docker Hub để tìm hình ảnh để tải xuống:

    $ 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]

Kéo hình ảnh Docker từ kho lưu trữ bằng lệnh kéo docker:

     $ docker pull ubuntu

Chạy hình ảnh Docker như một container:

     $ docker run -it ubuntu /bin/bash

0
$ 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*

1
Một lời giải thích sẽ theo thứ tự.
Peter Mortensen

-1

Đối với những người có cùng một vấn đề, nhưng gặp phải một lỗi như

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"

Tôi đã thêm một điểm vào hoạt động cho tôi:

docker run -it --entrypoint /bin/sh cho những hình ảnh không có Bash.

Ví dụ (từ ví dụ đã được phê duyệt):

run -it --entrypoint /bin/sh ubuntu:12.04

Tham khảo: https://gist.github.com/mitchwongho/11266726

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.