Docker denemeleri

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
21,727
Docker, en genel anlamda, bir yazılımı ve bu yazılımın gereksinim duyduğu bütün bileşenleri ve yapılandırma dosyalarını bir arada paketleyen ve hızlıca kurulup kullanılabilmesini sağlayan bir sistem. Docker ile paketlenmiş olan bir yazılım, aynı işletim sisteminde, farklı yapılandırma bilgileri ile birden fazla bağımsız kez aynı anda çalıştırılabilir.

Bu açıdan bakınca Docker, vmware veya VirtualBox gibi bir sanallaştırma teknolojisiymiş gibi gelebilir. Ama Docker'da böyle bir sanallaştırma olayı yok. Docker container içindeki yazılım, hiçbir sanallaştırma olmaksızın, işlemci üzerinde tam hız ve performans ile çalışır.

Bir yazılımı, bileşenleri ve bağımlılıkları ile beraber barındırmasını gözönünde bulundurunca da, Docker'ın bir çeşit paket yönetim sistemi (apt gibi) olduğu da sanılabilir. Ama bu da doğru değil. Paket yönetim sistemleri, bir uygulamayı belli standart yapılandırma bilgileri ile kurar. Sonradan kullanıcı o paketi kendi ihtiyaçlarına göre yapılandırır. Ayrıca paket yönetim sistemleri, aynı programın aynı versiyonunu yan yana kurulmasına da izin vermez.
 
Benim için Docker kullanımı şu problemden dolayı ortaya çıktı: Gömülü sistemler üzerinde çalışıyorum ve bu gömülü sistemde bulunan işlemci üzerinde çalışacak Linux işletim sistemini sıfırdan oluşturuyorum. Bunun için Yocto Linux kullanıyorum. Ama bu yocto linux, geliştirme bilgisayarında bulunan yazılımların versiyonları konusunda biraz duyarlı. Daha önce Debian 9 varken rahatlıkla belli bir linux dağıtımını oluşturabiliyordum, ama şimdi Debian 10'a geçince artık aynı linux dağıtımını oluştururken hata veriyor.

Benim Debian 10 geliştirme bilgisayarımda Vmware Workstation var. Aslında bir sanal makina yaratıp üzerine Debian 9 kurar ve o şekilde yocto linux derlemesini yapabilirim. Çalışır da. Ama yocto linux oluşturma çok uzun süren bir işlem. Sanal makinada yapılınca bu süre kat kat uzayacak.

Üzerinde Debian 9 bulunan bir bilgisayarı bir kenarda bulundurabilirim. Ama bu da yer kaplar ve o bilgisayarın donanım ve yazılım bakımını ve ihtiyaçlarını da gidermem gerekir. Ayrıca maliyetli.

İşte bu noktada Docker devreye giriyor. Yocto linux'un kullandığı Debian 9 bileşenlerini bir Docker container haline getirip yocto linux oluşturma işini bu container içinde yapmak istiyorum. Bu şekilde hem her daim sabit kalan (güncellemelerden etkilenmeyen) bir Debian 9 sistemim oluyor, hem de bu sistemi TAM HIZDA kullanmış oluyorum.
 
Şimdi docker kurulumunun nasıl yapıldığına bakalım. Aşağıdaki sayfada Debian 10 için güzel bir kurulum prosedürü anlatılmış:


Buradaki prosedürü uygulayıp docker'i kuruyorum. Sonra da versiyona bakıyorum

Bash:
root@bonsai:~# docker --version
Docker version 19.03.8, build afacb8b7f0
root@bonsai:~#
 
Docker ile hazır olarak kullanılacak çok sayıda container'in bulunduğu https://hub.docker.com adresine gidiyorum ve orada debian 9 arattırıyorum. Çıkan sayfada çok sayıda Debian sürümü için container'lar var. Ben burada "Debian 9" a karşılık gelen "stretch" versiyonunu alıyorum:

Bash:
root@bonsai:~# docker pull debian:stretch
stretch: Pulling from library/debian
56da78ce36e9: Pull complete
Digest: sha256:344470192d10cf7cf0bedcb183effbe99065829a8dbe68e65e703faf46fc10c1
Status: Downloaded newer image for debian:stretch
docker.io/library/debian:stretch
root@bonsai:~#


Sonra da bu yeni container'i çalıştırıyorum ve bir komut satırı ile Debian 9 içine girmiş oluyorum. Komut satırında da kök dizinin içeriğini listeliyorum.
Bash:
root@bonsai:~# docker run -it debian:stretch
root@921a4bfd158a:/# ls -al
total 72
drwxr-xr-x   1 root root 4096 Apr  5 16:32 .
drwxr-xr-x   1 root root 4096 Apr  5 16:32 ..
-rwxr-xr-x   1 root root    0 Apr  5 16:32 .dockerenv
drwxr-xr-x   2 root root 4096 Mar 27 00:00 bin
drwxr-xr-x   2 root root 4096 Feb  1 17:09 boot
drwxr-xr-x   5 root root  360 Apr  5 16:32 dev
drwxr-xr-x   1 root root 4096 Apr  5 16:32 etc
drwxr-xr-x   2 root root 4096 Feb  1 17:09 home
drwxr-xr-x   8 root root 4096 Mar 27 00:00 lib
drwxr-xr-x   2 root root 4096 Mar 27 00:00 lib64
drwxr-xr-x   2 root root 4096 Mar 27 00:00 media
drwxr-xr-x   2 root root 4096 Mar 27 00:00 mnt
drwxr-xr-x   2 root root 4096 Mar 27 00:00 opt
dr-xr-xr-x 315 root root    0 Apr  5 16:32 proc
drwx------   2 root root 4096 Mar 27 00:00 root
drwxr-xr-x   3 root root 4096 Mar 27 00:00 run
drwxr-xr-x   2 root root 4096 Mar 27 00:00 sbin
drwxr-xr-x   2 root root 4096 Mar 27 00:00 srv
dr-xr-xr-x  13 root root    0 Apr  5 16:32 sys
drwxrwxrwt   2 root root 4096 Mar 27 00:00 tmp
drwxr-xr-x  10 root root 4096 Mar 27 00:00 usr
drwxr-xr-x  11 root root 4096 Mar 27 00:00 var
root@921a4bfd158a:/#
 
Şimdi sıfırdan bir image oluşturalım. Dediğim gibi benim bir docker image oluşturmamın sebebi, bununla yocto linux oluşturmak. O yüzden bu image içerisinde yocto linux build etmek için gereken programlar olacak. Bunun için önce bir docker build dosyası oluşturuyoruz:

Kod:
FROM debian:stretch
MAINTAINER Timur Aydin <ta@taydin.org>

# Update package infos first
RUN apt-get update -y

## Install requred packages:
# http://www.yoctoproject.org/docs/current/ref-manual/ref-manual.html

# Essentials
RUN apt-get install -y gawk wget git-core diffstat unzip texinfo gcc-multilib \
     build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
     xz-utils debianutils iputils-ping vim bc g++-multilib bash realpath

# Graphical and Eclipse Plug-In Extras
RUN apt-get install -y libsdl1.2-dev xterm

# Documentation
RUN apt-get install -y make xsltproc docbook-utils fop dblatex xmlto

# OpenEmbedded Self-Test
RUN apt-get install -y python-git

# Extra package for build with NXP's images
RUN apt-get install -y \
    sed cvs subversion coreutils texi2html \
    python-pysqlite2 help2man  gcc g++ \
    desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial \
    autoconf automake groff curl lzop asciidoc u-boot-tools busybox

# Install repo tool for some bsp case, like NXP's yocto
RUN curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
RUN chmod a+x /usr/bin/repo

RUN apt-get install -y locales

# Set the locale, else yocto will complain
RUN sed -i 's/^# *\(en_US.UTF-8\)/\1/' /etc/locale.gen && /usr/sbin/locale-gen
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# make /bin/sh symlink to bash instead of dash
# Xilinx's petalinux need this
RUN echo "dash dash/sh boolean false" | debconf-set-selections
RUN DEBIAN_FRONTEND=noninteractive dpkg-reconfigure dash

# default workdir is /yocto
WORKDIR /yocto

Bu build dosyasında kabaca yaptığımız şu: Debian'ın "Stretch" sürümünü baz alıyoruz. Sonra da bu sürüme, yocto linux build etmek için gerekli olan bileşenleri kuruyoruz.
 
Sonra da bu image'i build etmemiz gerekiyor. Henüz build etmeden, sistemdeki image'ların listesine bakalım:

Bash:
root@bonsai:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
root@bonsai:~#


Görüldüğü gibi şu anda hiçbir image yok.

Sonra yukarıda oluşturduğumuz docker build dosyasına Dockerfile ismini verip, yocto-rocko diye bir dizine TEK BAŞINA koyuyoruz. Ve sonra aşağıdaki komut ile build işlemini başlatıyoruz:

Bash:
[ta@bonsai yocto-rocko]$ docker build -t taydin/yocto-rocko:1.0 .
Sending build context to Docker daemon  3.584kB
Step 1/17 : FROM debian:stretch
stretch: Pulling from library/debian
.
.
.


Bu işlemde docker'a şunu diyoruz: Mevcut dizinde bulunan Dockerfile dosyasını oku ve oradaki talimatlara göre bir image oluştur. Bu image'a da taydin/yocto-rocko:1.0 ismini ver. Buradaki isimlendirme standart bir hiyerarşik isimlendirme. İmage'i oluşturan kullanıcı adı, image adı, ve image versiyonu şeklinde. Bu image'i sonradan hub.docker.com gibi bir depoya yükleyeceğimiz zaman bu isimlendirme konvansiyonu önem arzediyor.
 
Build tamamlandıktan sonra iki tane image görüyoruz:

Bash:
root@bonsai:~# docker images
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
taydin/yocto-rocko   1.0                 f970a6923a4e        22 minutes ago      2.96GB
debian               stretch             1f69da558304        6 days ago          101MB
root@bonsai:~#

Alttaki image, bizim kendi image'i baz aldığımız debian:stretch. Üstteki de bizim oluşturduğumuz image.
 
Hazırladığım image ile yocto linux build'ini tamamlıyorum. Toplam süre de 25 dakika gibi, yani docker container dışında doğrudan makinada build ettiğim süre ile aynı.

1586278453979.png
 

Çevrimiçi personel

Forum istatistikleri

Konular
5,788
Mesajlar
99,000
Üyeler
2,464
Son üye
s4met

Son kaynaklar

Son profil mesajları

cemalettin keçeci wrote on HaydarBaris's profile.
barış kardeşim bende bu sene akıllı denizaltı projesine girdim ve sensörleri arastırıyorum tam olarak hangi sensör ve markaları kullandınız yardımcı olabilir misin?
m.white wrote on Altair's profile.
İyi akşamlar.Arabanız ne marka ve sorunu nedir.Ben araba tamircisi değilim ama tamirden anlarım.
* En mühim ve feyizli vazifelerimiz millî eğitim işleridir. Millî eğitim işlerinde mutlaka muzaffer olmak lâzımdır. Bir milletin hakikî kurtuluşu ancak bu suretle olur. (1922)
Kesici/Spindle hızı hesaplamak için SpreadSheet UDF'leri kullanın, hesap makinesi çok eski kalan bir yöntem :)
Dr. Bülent Başaran,
Elektrik ve Elektronik Mühendisi
Yonga Tasarım Özdevinimcisi
Üç güzel "çocuk" babası
Ortahisar/Ürgüp/Konya/Ankara/Pittsburgh/San Francisco/Atlanta/Alaçatı/Taşucu...

Back
Top