Her bir komut yeni bir layer olusturur.
nano Dockerfile diyerek bir docker file olsuturduk. Icine yazacagimiz komutlar asagidaki gibi olsun.
from ubuntu:16.04
cmd apt-get -y update
cmd echo Hello World
simdi ise kaydedip cikalim. Once dockerfile i build edelim asagidaki komutla
docker build -t img_example .
Sending build context to Docker daemon 2.048kB
Step 1/3 : from ubuntu:16.04
---> 5e13f8dd4c1a
Step 2/3 : cmd apt-get -y update
---> Running in 8b7283465728
Removing intermediate container 8b7283465728
---> 4a2d9530a53f
Step 3/3 : cmd echo Hello World
---> Running in b9cd40bf569c
Removing intermediate container b9cd40bf569c
---> 78036c5dc14e
Successfully built 78036c5dc14e
Successfully tagged img_example:latest
Seklinde cikti verir. simdi ise dockerfile i run edebiliriz asagidaki komutla .
docker run img_example
Hello World
ciktiisni verir. Gordugumuz gibi once bir docker file olusturup icine komutlar yazdik ve build ederek img_example adinda bir image olusturduk. Daha sonra ise bu image i run ederek container olusturduk.
Konsola
docker images
yazdigimizda calisan image lari goruruz. Demin olsuturdugumuz img_example ise listede yer aliyor.
yazdigimizda calisan image lari goruruz. Demin olsuturdugumuz img_example ise listede yer aliyor.
DockerHub dan image cekmek icin pull komutu kullanilir. Ornegin hello-world isimli image i cekmek icin
docker pull hello-world
komutunu kullaniriz.
Calisan container lari gormek icin
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
komutunu yazariz. Eger container imiz sadece isini yapip bittiyse (yukaridaki img_example da oldugu gibi sadece hello world yazdiysa) o zaman burada bir sonuc alamayiz. Bu zamana kadar calismis olan tum container lari gormek icinse
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5c13beabc37d img_example "/bin/sh -c 'echo He…" 40 minutes ago Exited (0) 39 minutes ago nostalgic_mestorf
0a8eedfe8db8 img_expose2 "/bin/sh -c 'echo He…" About an hour ago Exited (0) About an hour ago gifted_curran
24ec81246355 hello-world "/hello" About an hour ago Exited (0) About an hour ago upbeat_knuth
ced196ddfa65 5bd8ab9d6558 "nginx -g 'daemon of…" 26 hours ago Exited (0) 23 hours ago cont_nginx-A
25af563802d9 busybox:latest "sh" 26 hours ago Exited (137) 23 hours ago mybusybox
6ff3b01be5d0 img_apache "/usr/sbin/apache2 -…" 6 days ago Created cont_apache
df6749d93413 img_run-env "bash" 6 days ago Exited (0) 6 days ago cont_run-env
a19f93320a4f nginx:latest "nginx -g 'daemon of…" 7 days ago Exited (0) 6 days ago web-server-nginx
a623a065a0a3 hello-world "/hello" 7 days ago Exited (0) 7 days ago relaxed_maxwell
Sonlanmis olan bir container i tekrar baslatmak icinse docker ps -a komutundan id sini kopyalayip
docker start -a 5c13beabc37d
yazarak yeniden baslatabiliriz.
Container i silmek icinse
docker rm 5c13beabc37d
ile container_id sini yazarak silebiliriz. Eger container calisir halde ise once stop edip daha sonra silebiliriz. Stop etmek icinse
docker stop 5c13beabc37d
yazariz.
Docker CLI - Cheat Sheet (Kopya Kağıdı)
Komut | Açıklaması |
---|---|
docker images | Lokal registry’de mevcut bulunan Image’ları listeler |
docker ps | Halihazırda çalışmakta olan Container’ları listeler |
docker ps -a | Docker Daemon üzerindeki bütün Container’ları listeler |
docker ps -aq | Docker Daemon üzerindeki bütün Container’ların ID’lerini listeler |
docker pull <repository_name>/<image_name>:<image_tag> | Belirtilen Image’ı lokal registry’ye indirir. Örnek: docker pull gsengun/jmeter3.0:1.7 |
docker top <container_id> | İlgili Container’da top komutunu çalıştırarak çıktısını gösterir |
docker run -it <image_id|image_name> CMD | Verilen Image’dan terminal’i attach ederek bir Container oluşturur |
docker pause <container_id> | İlgili Container’ı duraklatır |
docker unpause <container_id> | İlgili Container pause ile duraklatılmış ise çalışmasına devam ettirilir |
docker stop <container_id> | İlgili Container’ı durdurur |
docker start <container_id> | İlgili Container’ı durdurulmuşsa tekrar başlatır |
docker rm <container_id> | İlgili Container’ı kaldırır fakat ilişkili Volume’lara dokunmaz |
docker rm -v <container_id> | İlgili Container’ı ilişkili Volume’lar ile birlikte kaldırır |
docker rm -f <container_id> | İlgili Container’ı zorlayarak kaldırır. Çalışan bir Container ancak -f ile kaldırılabilir |
docker rmi <image_id|image_name> | İlgili Image’ı siler |
docker rmi -f <image_id|image_name> | İlgili Image’ı zorlayarak kaldırır, başka isimlerle Tag’lenmiş Image’lar -f ile kaldırılabilir |
docker info | Docker Daemon’la ilgili özet bilgiler verir |
docker inspect <container_id> | İlgili Container’la ilgili detaylı bilgiler verir |
docker inspect <image_id|image_name> | İlgili Image’la ilgili detaylı bilgiler verir |
docker rm $(docker ps -aq) | Bütün Container’ları kaldırır |
docker stop $(docker ps -aq) | Çalışan bütün Container’ları durdurur |
docker rmi $(docker images -aq) | Bütün Image’ları kaldırır |
docker images -q -f dangling=true | Dangling (taglenmemiş ve bir Container ile ilişkilendirilmemiş) Image’ları listeler |
docker rmi $(docker images -q -f dangling=true) | Dangling Image’ları kaldırır |
docker volume ls -f dangling=true | Dangling Volume’ları listeler |
docker volume rm $(docker volume ls -f dangling=true -q) | Danling Volume’ları kaldırır |
docker logs <container_id> | İlgili Container’ın terminalinde o ana kadar oluşan çıktıyı gösterir |
docker logs -f <container_id> | İlgili Container’ın terminalinde o ana kadar oluşan çıktıyı gösterir ve -f follow parametresi ile o andan sonra oluşan logları da göstermeye devam eder |
docker exec <container_id> <command> | Çalışan bir Container içinde bir komut koşturmak için kullanılır |
docker exec -it <container_id> /bin/bash | Çalışan bir Container içinde terminal açmak için kullanılır. İlgili Image’da /bin/bash bulunduğu varsayımı ile |
docker attach <container_id> | Önceden detached modda -d başlatılan bir Container’a attach olmak için kullanılır |
Kaynak : http://gokhansengun.com/docker-nedir-nasil-calisir-nerede-kullanilir/
Guzell bir paylasim icin : http://devnot.com/2016/container-dunyasi-ve-docker/
Bir java dosyasini docker ile calistirmak icin oncelikle HelloWorld.java adinda bir mesaj yazan class hazirladim. Daha sonra bu class ile ayni yerde Dockerfile i olusturdum. Dockerfile icerigi ise asagidaki gibi:
FROM java:8
COPY . /var/www/java
WORKDIR /var/www/java
RUN javac HelloWorld.java
CMD ["java", "HelloWorld"]
Bir java dosyasini docker ile calistirmak icin oncelikle HelloWorld.java adinda bir mesaj yazan class hazirladim. Daha sonra bu class ile ayni yerde Dockerfile i olusturdum. Dockerfile icerigi ise asagidaki gibi:
FROM java:8
COPY . /var/www/java
WORKDIR /var/www/java
RUN javac HelloWorld.java
CMD ["java", "HelloWorld"]
Daha sonra bu file i build etmek icin
>> docker build -t java_image .
komutunu yazdim ve result su sekilde islendi, layerlar olustu.
Sending build context to Docker daemon 3.072kB
Step 1/5 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
---> d23bdf5b1b1b
Step 2/5 : COPY . /var/www/java
---> f487f57babf0
Step 3/5 : WORKDIR /var/www/java
---> Running in d5f829de0e7a
Removing intermediate container d5f829de0e7a
---> 4daf9cf6c419
Step 4/5 : RUN javac HelloWorld.java
---> Running in 4d60b3d49da8
Removing intermediate container 4d60b3d49da8
---> 7dea627b45be
Step 5/5 : CMD ["java", "HelloWorld"]
---> Running in 7877c5a6db47
Removing intermediate container 7877c5a6db47
---> 4bc0d25a7db7
Successfully built 4bc0d25a7db7
Successfully tagged java_image:latest
>> docker run java_image
Hello Docker World!