DockerFile'dan bir docker örneğini nasıl çalıştırırım?


102

Sonunda liman işçisini nasıl kurup çalıştıracağımı buldum.

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

Onu bir redis örneğine bağladım, harika.

Bu sıfırdan ve redis örneğini oluşturduğumda

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

uzak bir depodan görüntüyü çekiyor mu?

NodeBB bir Dockerfile https://github.com/NodeBB/NodeBB/blob/master/Dockerfile sunuyor . Nasıl kullanacağımdan pek emin değilim. Uzaktan kumandamda bu Dockerfile'ı çağırarak bir şekilde yerel bir ortam oluşturabileceğimi varsayıyorum.

Bu doğru mu? Öyleyse, uzaktan kumandayı gösteren yerel örneği nasıl oluşturabilirim?


liman işçisi görüntüsünü yerel ortamınızda oluşturabilir ve yerel olarak çekebilirsiniz
BMW

$ cat Dockerfile | docker build -t <image_name> - # mind the
hyphen

Yanıtlar:


105

Dosyayı indirin ve aynı dizinden çalıştırın docker build -t nodebb .

Bu size yerel makinenizde nodebb adında bir konteyneri başlatabileceğiniz bir görüntü verecektir docker run -d nodebb( nodebb'yi kendi adınızla değiştirebilirsiniz).


1
Bu nasıl çalışıyor? Sadece dockerfile'a sahipsem, projemden nasıl haberdar olur? Docker dosyasında bir bağlantı var mı? Daha sonra, yeni bir imajı paketleyen docker handles varsa bunu sunucuma taşıyabileceğimi varsayıyorum. Bu pakette projemin tüm varlıklarını emiyor mu? Cahil gibi görünüyorsam özür dilerim, docker benim için yeni bir kavram ama öğrenmekten zevk alıyorum.
Michael Joseph Aubry

2
Bu arada teşekkürler ve örneğinizde <> neyi temsil ediyor <nodebb>'ı neden seçtiniz?
Michael Joseph Aubry

Hiçbir docker konteyner "sizin" projeniz hakkında bilgi sahibi değildir, bunlar çok geneldir.
Andreas Wederbrand

3
Sağladığınız komut çalışmadı, bu yüzden "docker build." Komutunu denedim ve işe yaradı, ancak adlandırılmadığı için çalıştıramıyorum. docker build -t <nodebb> .bana verir file exists: .. A ile gelen mevcut bir projem var, bu Dockerfileyüzden onu bu dizinde çalıştırdım.
Michael Joseph Aubry


48

Dockerfile'dan bir kapsayıcı başlatamazsınız.

Süreç şu şekildedir:

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

Bir konteyneri başlatmak (veya çalıştırmak) için bir görüntüye ihtiyacınız vardır. Bir imaj oluşturmak için Dockerfile [1] 'i oluşturmanız gerekir.

[1]: docker importTarball'dan veya tekrar bir görüntü de yapabilirsiniz docker load.


30

Yukarıdaki cevaplar kullanılabilir olsa da, bu bana gerçekten yardımcı oldu, bu yüzden buraya da koyuyorum.

Gönderen belgeler :

Bir bağlam belirtmek yerine, URL'de tek bir Dockerfile geçirebilir veya dosyayı STDIN aracılığıyla yönlendirebilirsiniz. STDIN'den bir Dockerfile'ı yönlendirmek için:

$ docker build - < Dockerfile

Windows'taki Powershell ile şunları çalıştırabilirsiniz:

Get-Content Dockerfile | docker build -

Derleme tamamlandığında şu komutu çalıştırın:

docker image ls

Bunun gibi bir şey göreceksiniz:

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

Gerçek IMAGE ID'nizi kopyalayın ve ardından çalıştırın

docker run 123456789

Sondaki sayı, önceki adımın gerçek Görsel Kimliği olduğu yer

Resim kimliğini hatırlamak istemiyorsanız, resminizi etiketleyebilirsiniz.

docker tag 123456789 pavel/pavel-build

Hangisi resminizi etiketleyecek pavel/pavel-build


2020'de ilk pasajın bulunmasının çok uzun sürmesi şaşırtıcı.
fullStackChris

Bu sadece daha fazla törenle kabul edilen cevaptır.
Michail

22

Basit ve kolay çözüm:

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

3000 - herhangi bir liman olabilir

a3e628814c68 - başarı oluşturma komutuyla verilen hash sonucu

NOT : Dockerfile içeren dizinin içinde olmalısınız .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.