Docker run vs create


93

Sự khác biệt giữa docker rundocker createlệnh là gì?

Tôi thường sử dụng runnhưng đôi khi trong tài liệu tôi thấy create.

Docker --helpkể

create    Create a new container
run       Run a command in a new container

Nó có nghĩa là nó runđược sử dụng khi chúng ta cần chuyển một lệnh đến một vùng chứa mới? Mục đích của createnó là gì?

Câu trả lời:


105

Từ tài liệu docker

Lệnh tạo docker tạo một lớp vùng chứa có thể ghi trên hình ảnh được chỉ định và chuẩn bị cho nó để chạy lệnh đã chỉ định. Sau đó, ID vùng chứa được in thành STDOUT. Điều này tương tự với docker run -d ngoại trừ vùng chứa không bao giờ được khởi động . Sau đó, bạn có thể sử dụng lệnh bắt đầu của docker để khởi động vùng chứa tại bất kỳ thời điểm nào.

Đây là hữu ích khi bạn muốn thiết lập một container cấu hình trước thời gian để nó sẵn sàng để bắt đầu khi bạn cần nó. Trạng thái ban đầu của vùng chứa mới được tạo.


2
Nhấn mạnh sự giống nhau, --run chấp nhận TẤT CẢ các đối số giống như --create (chỉ thêm --detach, --detach-key và --sig-proxy), xem docs.docker.com/v17.09 / engine / reference / commandline / run /…
Marvin

117

Về mặt kỹ thuật, docker run= docker create+ docker start.


42
Trên thực tế, và tôi vừa dành vài giờ để học điều này, docker run= docker create+ docker start+ docker attach. Nếu không có attach, chạy chứa bắt đầu trong nền
webbower

19

1
U đã viết "docker run tạo vùng chứa (giống như docker tạo) và chạy nó." <--- định nghĩa vòng tròn, và bạn chưa xác định được sự khác biệt giữa thực thi và bắt đầu, và những gì bạn gọi là "chạy nó". (Và khi bạn nói "running it" nếu chúng tôi xem xét định nghĩa của bạn về run in docker run, nó có nghĩa là tạo và chạy, vì vậy bạn sẽ kết thúc bằng một số vô hạn .. vì vậy có lẽ bạn có ý nghĩa nhỏ hơn khi nói "chạy nó" .. nhưng sau đó bạn nên phân biệt "chạy nó" với thực thi và bắt đầu, bạn có nghĩa là bắt đầu và thực thi hay chỉ bắt đầu). Có lẽ -d có nghĩa là bắt đầu không có thực thi. và không có -d là bắt đầu và thực thi
barlop

8

Các câu trả lời khác có điều này nhưng tôi nghĩ tôi sẽ hiển thị các dòng lệnh shell tương đương vì nó làm cho nó thực sự rõ ràng:

$ docker run myimage

giống như

$ docker start -a $(docker create myimage)

Ở đây, docker createđược sử dụng để tạo vùng chứa từ hình ảnh đã đặt tên và xuất ra id vùng chứa đã tạo và docker startđược sử dụng để bắt đầu vùng chứa với id đó. Các -atùy chọn làm cho thiết bị đầu cuối để đính kèm để container chạy ở mặt trước đó là hành vi mặc định docker run.

Một vùng chứa đã được tạo nhưng chưa bao giờ bắt đầu sẽ có Createdtrạng thái; điều này có thể được nhìn thấy với docker container ls -a.


6

Tôi mới làm quen với docker và chỉ muốn chơi với nó;

Mất của tôi là Docker chạy về cơ bản nào sau đây: (theo thứ tự ..) Docker tạo , Docker bắt đầu , Docker đính kèm , vì nó ngay lập tức gắn vào vỏ hoạt động sau khi bạn làm như 'chạy' lệnh.


1
Chỉ cần đăng một bình luận ở trên về điều này trước khi tôi nhận thấy câu trả lời của bạn. Tôi ước tôi đã nhìn thấy điều này một giờ trước hoặc lâu hơn.
webbower

-3

Docker run về cơ bản là để chạy các lệnh trong vùng chứa.

docker run -it <Container Name> /bin/bash

Ở trên là để tạo một thiết bị đầu cuối bash. Và bắt chúng ta sử dụng các lệnh bash trong vùng chứa.

Docker create là tạo một vùng chứa từ Docker Image.

docker create -d /var/lib:/var/lib --name docker-ubuntu ubuntu

Ở trên là tạo một docker một vùng chứa có tên "docker-ubuntu" từ hình ảnh "ubuntu"


1
Bạn có thể làm docker run -it <Container name>mà không cần thực hiện / bin / bash. Ví dụ, một viên ruby ​​sẽ tự động chạy một tệp thực thi được gọi là irb. Ngoài ra, bạn có thể thực hiện run -d, điều đó được thực hiện với dockersamples / static-site không đăng nhập. Vì vậy, tôi nghĩ rằng nó không thực hiện nhưng nó chỉ bắt đầu nó.
barlop

với 'Docker chạy' bạn có thể chạy nếu container được đã tạo và tạo sau đó chạy nếu không muốn nói
Sergii Getman
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.