Làm cách nào để chạy một phiên bản docker từ DockerFile?


93

Cuối cùng tôi đã tìm ra cách để khởi động và chạy docker.

docker run --name my-forum-nodebb --link my-forum-redis:redis -p 80:80 -p 443:443 -p 4567:4567 -P -t -i nodebb/docker:ubuntu

Tôi đã liên kết nó với một phiên bản redis, thật tuyệt.

Đây là từ đầu và tôi giả sử rằng khi tôi tạo phiên bản redis

docker run --name my-forum-redis -d -p 6379:6379 nodebb/docker:ubuntu-redis

nó kéo hình ảnh từ một repo từ xa?

NodeBB cung cấp Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile Tôi thực sự không chắc chắn về cách sử dụng nó. Tôi giả định rằng bằng cách nào đó tôi có thể tạo môi trường cục bộ bằng cách gọi Dockerfile này trên điều khiển từ xa của mình.

Điều này có chính xác? Nếu vậy làm cách nào để tạo phiên bản cục bộ trỏ tới điều khiển từ xa?


bạn có thể xây dựng hình ảnh docker trong môi trường cục bộ của mình và kéo nó cục bộ
BMW

$ cat Dockerfile | Docker build -t <image_name> - # phiền dấu nối
jbobbylopez

Câu trả lời:


94

Tải xuống tệp và chạy từ cùng một thư mục docker build -t nodebb .

Điều này sẽ cung cấp cho bạn một hình ảnh trên máy cục bộ của bạn có tên là nodebb mà bạn có thể khởi chạy một vùng chứa từ đó docker run -d nodebb(bạn có thể thay đổi nodebb thành tên của chính mình).


1
Cái này hoạt động ra sao? Nếu tôi chỉ đơn giản có tệp dockerfile làm thế nào nó biết về dự án của tôi? Có liên kết trong tệp dockerfile không? Sau đó, tôi giả sử nếu có bộ xử lý docker đóng gói một hình ảnh mới mà sau đó tôi có thể chuyển sang máy chủ của mình. Trong bao bì này nó hấp thụ tất cả các tài sản của dự án của tôi? Xin lỗi nếu tôi nghe có vẻ không biết gì, docker là một khái niệm mới đối với tôi nhưng tôi đang thích học.
Michael Joseph Aubry

2
Nhân tiện, xin cảm ơn và dấu <> đại diện cho điều gì trong ví dụ của bạn tại sao bạn chọn <nodebb>?
Michael Joseph Aubry

Không có docker container nào biết về dự án "của bạn", chúng rất chung chung.
Andreas Wederbrand

3
Lệnh bạn cung cấp không hoạt động vì vậy tôi đã thử `docker build .` và nó hoạt động, nhưng vì nó không có tên nên tôi không thể chạy nó. docker build -t <nodebb> .cho tôi file exists: .. Tôi có một dự án hiện có đi kèm với một dự án Dockerfilenên tôi chỉ chạy nó trong thư mục đó.
Michael Joseph Aubry

2
Đây là câu trả lời cho rất nhiều câu hỏi của tôi mặc dù docs.docker.com/engine/reference/builder
Michael Joseph Aubry

45

Bạn không thể bắt đầu một vùng chứa từ Dockerfile.

Quá trình diễn ra như sau:

Dockerfile = [ docker build] => Docker image = [ docker run] => Docker container

Để bắt đầu (hoặc chạy) một vùng chứa, bạn cần một hình ảnh. Để tạo một hình ảnh, bạn cần xây dựng Dockerfile [1].

[1]: bạn cũng có thể tạo docker importhình ảnh từ tarball hoặc một lần nữa docker load.


26

Mặc dù các câu trả lời trên có thể sử dụng được, nhưng điều này thực sự giúp ích cho tôi, vì vậy tôi cũng đang đặt nó ở đây.

Từ tài liệu :

Thay vì chỉ định ngữ cảnh, bạn có thể chuyển một Dockerfile duy nhất trong URL hoặc chuyển tệp vào qua STDIN. Để chuyển một tệp Docker từ STDIN:

$ docker build - < Dockerfile

Với Powershell trên Windows, bạn có thể chạy:

Get-Content Dockerfile | docker build -

Khi quá trình xây dựng hoàn tất, hãy chạy lệnh:

docker image ls

Bạn sẽ thấy một cái gì đó như thế này:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
<none>                     <none>              123456789        39 seconds ago      422MB

Sao chép ID IMAGE thực của bạn và sau đó chạy

docker run 123456789

Trong đó số ở cuối là ID hình ảnh thực tế từ bước trước

Nếu bạn không muốn nhớ id hình ảnh, bạn có thể gắn thẻ hình ảnh của mình bằng cách

docker tag 123456789 pavel/pavel-build

Cái nào sẽ gắn thẻ hình ảnh của bạn là pavel/pavel-build


Thật ngạc nhiên là vào năm 2020, đoạn mã đầu tiên đó đã mất quá nhiều thời gian để tìm thấy.
fullStackChris

Đây chỉ là câu trả lời được chấp nhận với nhiều nghi lễ hơn.
Michail

18

Giải pháp đơn giản và dễ dàng là:

docker build .
=> ....
=> Successfully built a3e628814c67
docker run -p 3000:3000 a3e628814c67

3000 - có thể là bất kỳ cổng nào

a3e628814c68 - kết quả băm được đưa ra bởi lệnh tạo thành công

LƯU Ý : bạn nên ở trong thư mục có chứa Dockerfile .

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.