"Enter"a basıp içeriğe geçin

Dockerfile Oluşturma

Last updated on 28 Ocak 2021

Artık hangi imaj hazırlamaya başlama zamanı geldi, Dockerfile aracılığıyla kendimize bir tane imaj hazırlayalım. Bunun için bir Node.js uygulamasını dockerize edeceğiz. Test amaçlı bir node.js uygulamam mevcut.

Dockerfileimizda aşağıdaki katmanlara ihtiyacımız var:

1.Node.JS 10 Alpine görüntüsüne göre (node:10-alpine)
2./Home/node/app/node_modules dizinini oluşturun ve  dizinin owner ve grup olarak ayarlanacak
3. Çalışma dizinini /home/node/app olarak ayarlar
4.Uygulama package* dosyalarını çalışma dizinine kopyala
5. NPM kaydını ayarlanması
6. Yüklemeler gerekli NPM paketlerinin kurulması
7. app/ verinin geri kalanını çalışma dizinine kopyalar ve çalışma dizininin sahibini ve grubunu şu şekilde ayarlar: node
8. node kullanıcısına geçiş yapar
9. Kullanılacak 8080 numaralı portu açar
10. Uygulamayı çalıştırır.

O halde Dockerfile’ımızı oluşturalım ve başlayalım.

vim Dockerfile

Dockerfiles, yalnızca belirli eylemleri gerçekleştiren anahtar sözcükler belirleyen talimatlar kullanılarak oluşturulur. Komut anahtar kelimelerinin tamamen büyük harfle yazılması gerekmez, ancak tercih edilir. FROMCOPY, ve CMD.

Öncelikle ana imajımızı FROM ile tanımlamamız gerekiyor. Tüm geçerli Dockerfiles FROM ile başlamalıdır.

FROM node:10-alpine

Şimdi bir dizin oluşturmak ve sahibini ayarlamak istiyoruz. Bunun için RUN komutunu kullanabiliriz, bu shell üzerinde herhangi bir komut çalıştırmamızı sağlar. İmajımız Alpine dayanıyor, ash kabuğunu kullanacağız, bu yüzden komutumuz “mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app”. Tek yapmamız gereken bunu RUN komutu ile çalıştırmak.

RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app

Sonra, /home/node/app dizinine gitmemiz gerekiyor. Bunu WORKDIR ile bir çalışma dizini ayarlayarak yapıyoruz. Aşağıdaki tüm RUN, CMD, COPY, ADD ve ENTRYPOINT talimatları bu dizinde gerçekleştirilecektir:

WORKDIR /home/node/app

Şimdi dosyalarımızı eklemek istiyoruz. Bunun için iki seçeneğimiz var: COPY ve ADD. ADD, dosyaları dış URL’lerden çekebilir ve bu nedenle ek işlevler kullanır. Diğer bir deyişle, yapabiliyorsanız COPY kullanmak en iyisidir ve paket * dosyalarımızın tümü yerel üzerinde olduğundan, bunu yapabiliriz:

COPY package*.json ./

lk argüman bizim kaynak dosyalarımız ve ikincisi hedefimiz. Şimdi uygulamamız için ön koşul paketlerinin NPM’den kurulduğundan emin olmamız gerekiyor. Bunlar sadece daha fazla RUN komutudur.

RUN npm config set registry http://registry.npmjs.org/
RUN npm install

Artık uygulama dosyalarımızın geri kalanını COPY kullanarak kopyalayabiliriz. Ayrıca çalışma dizininizin sahibini düğüm kullanıcısı ve grubu olarak ayarlamak isteyeceğiz.Linux’ta olduğumuz için, bu aynı zamanda bazı özel COPY işlevi kullanılarak da gerçekleştirilebilir.

COPY --chown=node:node . .

Buradan kullanıcı değiştirmek istiyoruz. Bu, önceki WORKDIR komutuna benzer şekilde çalışır, ancak şimdi kullanıcıları aşağıdaki RUN, CMD ve ENTRYPOINT komutları için dizinleri değiştirmiyoruz.

USER node

Uygulamamız 8080 numaralı port noktasında barındırıldığından, bağlantı noktasının konteynerimizda da mevcut olduğundan emin olmak istiyoruz. Bunun için EXPOSE anahtar kelimesini kullanacağız.

EXPOSE 8080

Ve şimdi, son olarak, konteyner başlatılır başlatılmaz komutun (CMD) çalışmasını sağlamak istiyoruz. RUN’dan farklı olarak, CMD’nin tercih edilen biçimi bunu bir kabuk komutu olarak almaz. Bunun yerine, yürütülebilir dosya adı bir dizide ve ardından herhangi bir parametre ile sağlanmalıdır: CMD [“executable”,”param1″,”param2″]. Bizim durumumuzda bu şöyle olacaktır:

CMD [ "node", "index.js" ]

Son olarak Dockerfile’ımız şöyle görünmelidir:

FROM node:10-alpine
RUN mkdir -p /home/node/app/node_modules && chown -R node:node /home/node/app
WORKDIR /home/node/app
COPY package*.json ./
RUN npm config set registry http://registry.npmjs.org/
RUN npm install
COPY --chown=node:node . .
USER node
EXPOSE 8080
CMD [ "node", "index.js" ]

:wq komutu ile kayıt edip çıkıyoruz.

Artık docker build komutunu kullanarak ve Dockerfile’ımızın konumunu belirterek konteynerimizi oluşturabiliriz. Aynı dizinde olduğumuz için, bunu bir . ile gösterebiliriz. Bununla birlikte, çıktı resmimiz için bir isim sağlamak isteyeceğiz, bu yüzden bir bayrak ayarlamak için -t komutunu kullanmak isteyeceğiz. Bunu Docker Hub’a eklemeyi planlıyorsak, etiket için bir <username>:<imagename> biçimini takip etmek isteyeceğiz. dockerhub a eklemeyeceğim için appimage ismi verecek şekilde ilerleyelim.

docker build . -t appimage

DockerFile olarka değil Dockerfile olarak isim oluşturmaya dikkat edin.

Artık konteynırımızı çalıştırabiliriz.

docker run -dt --name app01 appimage

Ve uygulamamızın çalıştığını görün.

docker inspect app01 | grep IPAddress
curl 172.17.0.4:8080
https://docs.docker.com/engine/reference/builder/

Başka bir yazımızda görüşmek üzere,

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir