Picture

Hi, I'm Ertuğrul Erata.

Pardus and PisiLinux ex-packager

Pisi build in Docker - II

İlk bölümde kurulum ile ilgili konulara değinmiştim. Bu bölümde bilinmesi gereken docker komutları ile bu komutların yardımı ile nasıl docker içinde derleme yapabiliriz? docker i sudo olmadan kullanabilirsiniz.

bunun için sudo gpasswd -a $USER docker

yapar oturumu kapatıp yeniden açarsanız, restart değil, docker komutlarının başına sudo eklemezsiniz.

docker git benzeri bir komut setine sahip, git kullanıyorsanız zorlanmayacaksınız. Bir kaç adet farklı komut var.

Kurulumu ilk bölümde anlattığım şekilde yaptınız, pisi-chroot-farm imajını hub.docker.com dan çektiniz. hub.docker.com a github hesabınızla giriş yaparak bir çok imaja göz atabilirsiniz.

pisi it docker
sudo cgroupfs-mount && sudo docker -d
docker pull ertugerata/pisi-chroot-farm

En son verdiğiniz komut aşağıdaki gibi sonlandığında hazırsınız demektir. Son satırdaki docker pull ile başlayan komutu farm ile çalışacağımız gün bir kere çalıştırırsanız iyi olur. yalnızca programların sürüm ve güncellemeleri nedeni ile imajda bir kaç günde bir değişiklik olabilir. Tabii ki çalıştırmadan önce sayfadan da kontrol etmek mümkün.

Status: Image is up to date for ertugerata/pisi-chroot-farm:latest

Elimizde güncel farm imajı var; docker sevisimiz çalışıyor ve görev bekliyor.

İlk önce bir kaç temel komuttan bahsedelim. Bir terminalde

docker

yazdığımızda tüm kullanımları görürürüz. Detaylı bilgi için bu sayfayı açın.

docker
Usage: docker [OPTIONS] COMMAND [arg...]
 
A self-sufficient runtime for linux containers.

Options:
--api-cors-header=                   Set CORS headers in the remote API
-b, --bridge=                        Attach containers to a network bridge
--bip=                               Specify network bridge IP
-D, --debug=false                    Enable debug mode
-d, --daemon=false                   Enable daemon mode
--default-ulimit=[]                  Set default ulimits for containers
--dns=[]                             DNS server to use
--dns-search=[]                      DNS search domains to use
-e, --exec-driver=native             Exec driver to use
--fixed-cidr=                        IPv4 subnet for fixed IPs
--fixed-cidr-v6=                     IPv6 subnet for fixed IPs
-G, --group=docker                   Group for the unix socket
-g, --graph=/var/lib/docker          Root of the Docker runtime
-H, --host=[]                        Daemon socket(s) to connect to
-h, --help=false                     Print usage
--icc=true                           Enable inter-container communication
--insecure-registry=[]               Enable insecure registry communication
--ip=0.0.0.0                         Default IP when binding container ports
--ip-forward=true                    Enable net.ipv4.ip_forward
--ip-masq=true                       Enable IP masquerading
--iptables=true                      Enable addition of iptables rules
--ipv6=false                         Enable IPv6 networking
-l, --log-level=info                 Set the logging level
--label=[]                           Set key=value labels to the daemon
--log-driver=json-file               Containers logging driver
--mtu=0                              Set the containers network MTU
-p, --pidfile=/var/run/docker.pid    Path to use for daemon PID file
--registry-mirror=[]                 Preferred Docker registry mirror
-s, --storage-driver=                Storage driver to use
--selinux-enabled=false              Enable selinux support
--storage-opt=[]                     Set storage driver options
--tls=false                          Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem         Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem         Path to TLS certificate file
--tlskey=~/.docker/key.pem           Path to TLS key file
--tlsverify=false                    Use TLS and verify the remote
-v, --version=false                  Print version information and quit

Commands:

attach    Attach to a running container
build     Build an image from a Dockerfile
commit    Create a new image from a container's changes
cp        Copy files/folders from a container's filesystem to the host path
create    Create a new container
diff      Inspect changes on a container's filesystem
events    Get real time events from the server
exec      Run a command in a running container
export    Stream the contents of a container as a tar archive
history   Show the history of an image
images    List images
import    Create a new filesystem image from the contents of a tarball
info      Display system-wide information
inspect   Return low-level information on a container or image
kill      Kill a running container
load      Load an image from a tar archive
login     Register or log in to a Docker registry server
logout    Log out from a Docker registry server
logs      Fetch the logs of a container
port      Lookup the public-facing port that is NAT-ed to PRIVATE_PORT
pause     Pause all processes within a container
ps        List containers
pull      Pull an image or a repository from a Docker registry server
push      Push an image or a repository to a Docker registry server
rename    Rename an existing container
restart   Restart a running container
rm        Remove one or more containers
rmi       Remove one or more images
run       Run a command in a new container
save      Save an image to a tar archive
search    Search for an image on the Docker Hub
start     Start a stopped container
stats     Display a stream of a containers' resource usage statistics
stop      Stop a running container
tag       Tag an image into a repository
top       Lookup the running processes of a container
unpause   Unpause a paused container
version   Show the Docker version information
wait      Block until a container stops, then print its exit code

Run 'docker COMMAND --help' for more information on a command.

Bize şu anda en çok lazım olan ( ps, images, run, start, exec ) komutları.

  • docker ps çalışan docker konteynerini,
  • docker images mevcut olan docker imajlarını listeler.
  • docker run –parametre alır– bir mevcut bir imajdan bir docker konteyneri başlatır.
  • docker start –konteyner adı– mevcut bir konteyneri başlatır.
  • docker exec –konteyner adı – exec komut çalışan bir konteynere bir komut gönderir, sonucunu terminale basar
  • docker attach –konteyner adı– çalışan bir konteynere bağlanarak içinde çalışmayı sağlar.

İlk olarak elimizde mevcut imaj var mı bakalım; docker images

  REPOSITORY                             TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
  ertugerata/pisi-chroot-farm            latest              11eded996be3        15 hours ago        548.4 MB

acaba çalışan konteynerimiz var mı?

  docker ps

yok ise REPOSITORY altında sıralanmış imajlarımızdan birini çalıştırabiliriz.

  docker run ertugerata/pisi-chroot-farm pisi li -b buildfarm

bu komut boş dönecek, çünkü imajımız içerisinde farm depodan kurulmuş bir paket yok. Çalışan ve boş dönen konteyner ne oluyor? Duruyor.

Bundan önce çalışmış durmuş konteynerimiz var mı? varsa onu docker start –konteyner adı– ile başlatabiliriz. Genel kural olarak aklımızda kalsın sonucu tam veren, boş dönen konteynerleri başlatmak mümkün olmuyor.

  docker ps -a
  
  CONTAINER ID        IMAGE            			COMMAND             	CREATED          STATUS                     PORTS          NAMES
  7636ccc100d5        ertugerata/pisi-chroot-farm:latest   "pisi li -b buildfar   12 seconds ago      Exited (0) 5 seconds ago                stupefied_hoover  

En sağda NAMES altındaki isim sizde farklı olabilir.

Bir servis, deamon gibi docker i çalıştıralım ve konteynerimiz çalışır beklesin.

  docker run -itd ertugerata/pisi-chroot-farm bash
  
  docker ps
  
  CONTAINER ID        IMAGE                                COMMAND             CREATED             STATUS              PORTS               NAMES
  4da1ee0f65dc        ertugerata/pisi-chroot-farm:latest   "bash"              14 seconds ago      Up 13 seconds                           backstabbing_bardeen

konteynerin çalıştığını görüyoruz.

  docker exec backstabbing_bardeen pisi li -b buildfarm

bu komut da boş dönecek.

  docker attach backstabbing_bardeen
  4da1ee0f65dc ~ # 

Artık docker / chroot içerisindesiniz. Pisi-2.0 kaynak deposu eklidir. Depoları görün ve güncelleyin.

  pisi lr
  pisi ur

paketleri yapılandırmak için comar servisine yani dbus a ihtiyacınız olacak.

  service dbus start
  
  pisi bi -herhangi bir paket- -d --ignore-safety

Paketleri –ignore-safety ile derlemeyi unutmayın. derlenmediği takdirde eksikleri not alın ve Pisi-2.0 branch’ındaki pspec.xml lerin düzeltilmesini isteyin.

İyi eğlenceler.

Not. her şey derleyebilirsiniz. Ama eksik paketleri farm dan tamamlayacağı için farm dan en az indirecek şekilde başlamanız tavsiye edilir.