Docker Sık Kullanılan Komutlar-2

Merhabalar serinin 2. yazısında sık kullandığım docker komutlarını eklemeye devam ediyorum. İlk yazıya buradan erişebilirsiniz.

  1. Docker Network Kavramı
  2. Docker Container IP Adresini Öğrenmek
  3. Docker Network (Sanal Ağ) Oluşturmak
  4. Docker Network Listeleme
  5. Docker Network Bilgilerini İnceleme
  6. Çalışan Bir Docker Container’ı Bir Network’e Bağlamak
  7. Docker Container Adını Değiştirmek
  8. Askıda Kalan Imajları Silmek
  9. Docker’ı sudo ile çalıştırmaktan kurtulmak – docker without sudo
  10. Alpine container sürekli çalışsın
  11. Alpine container paket yükleme
  12. Container’dan ana makine servislerine ulaşmak

1. Docker Network Kavramı

Her docker container doğduğunda otomatik olarak bir sanal ağa bağlanır. Bu sanal ağ türü “bridge network”tür. Aynı sanal ağda bulunan tüm container’lar port numarası bildirmeksizin birbirleri ile görüşürler. Benim tarzım bir uygulamaya ait tüm container’ları aynı ağa bağlamak.

2. Docker Container IP Adresini Öğrenmek

sudo docker container inspect --format '{{ .NetworkSettings.IPAddress  }}' f1ae

3. Docker Network (Sanal Ağ) Oluşturmak

sudo docker network create erkan_vn
Çıktı:
bcec51e1e0aba7092d359944898a08bc5cb621900bf830d8b1c3ff4fddb5679c

4. Docker Network Listeleme

sudo docker network ls
Örnek çıktı:
NETWORK ID          NAME                DRIVER              SCOPE
756b8bea1d7e        bridge              bridge              local
2019947744f4        dude                bridge              local
bcec51e1e0ab        erkan_vn            bridge              local
2955cb5bab0c        host                host                local
6c3283b3f616        my_app_net          bridge              local
36691f70dc54        none                null                local

5. Docker Network Bilgilerini İnceleme

sudo docker network inspect erkan_vn
Çıktı:
[
    {
        "Name": "erkan_vn",
        "Id": "bcec51e1e0aba7092d359944898a08bc5cb621900bf830d8b1c3ff4fddb5679c",
        "Created": "2019-05-01T15:08:39.358563898+03:00",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.20.0.0/16",
                    "Gateway": "172.20.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]

6. Çalışan Bir Docker Container’ı Bir Network’e Bağlamak

sudo docker network connect erkan_vn webhost

Önce network adı sonra container adı veya ip numarası

7. Docker Container Adını Değiştirmek

docker rename <container_id> <yeni_isim>
Örnek:
sudo docker rename ad0 elasticsearch

8. Askıda Kalan Imajları Silmek

Bazı imajlar tam olarak oluşmaz ve bir id isim alamadan havada kalır. Normalde bir imajı sudo docker image rm <image_id> ile silebilirken image_id alamayan bu tür imajları temizlemek için özel bir komut gerekir.

sudo docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
erkan/simpleweb     latest              f058d31296a5        15 minutes ago      118MB
<none>              <none>              885492019721        About an hour ago   878MB
erkan/redis         latest              127a6d63841b        4 hours ago         108MB
<none>              <none>              d4d6c3d0352d        5 hours ago         8.55MB
redis               latest              7eed8df88d3b        3 days ago          98.2MB
node                alpine              b7dc3fe8d4f8        9 days ago          115MB
alpine              latest              e7d92cdc71fe        6 weeks ago         5.59MB
busybox             latest              6d5fcfe5ff17        2 months ago        1.22MB
hello-world         latest              fce289e99eb9        14 months ago       1.84kB
node                6.14                5cf367ab9117        15 months ago       878MB

Yukarıda gördüğümüz gibi <none> olan imajlar var bunları nasıl kadırırız?

sudo docker rmi $(sudo docker images --filter "dangling=true" -q --no-trunc)

Sonuç:
Deleted: sha256:885492019721e918cffdade4963a73036b42174f793ddb20f54ed611aa047b81
Deleted: sha256:996806714a84be0d98bd684b17e73015e15c73eb674923e8f53279f3e0d3ea2a
Deleted: sha256:3b33784c5fad1fc4a19034cce166e4767b6c86f7a5160a7417729e38ccc45ab0
Deleted: sha256:d4d6c3d0352d840218f727bbaf84c11891838638fac868c592f4ea5d90bfd978

Sonucu kontrol edelim:

 sudo docker image ls
[sudo] password for murat:
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
erkan/simpleweb     latest              f058d31296a5        26 minutes ago      118MB
erkan/redis         latest              127a6d63841b        4 hours ago         108MB
redis               latest              7eed8df88d3b        3 days ago          98.2MB
node                alpine              b7dc3fe8d4f8        9 days ago          115MB
alpine              latest              e7d92cdc71fe        6 weeks ago         5.59MB
busybox             latest              6d5fcfe5ff17        2 months ago        1.22MB
hello-world         latest              fce289e99eb9        14 months ago       1.84kB
node                6.14                5cf367ab9117        15 months ago       878MB

9. Docker’ı sudo ile çalıştırmaktan kurtulmak

Eğer docker’ı sudo ile çalıştıracak şekilde kurmuşsanız ve python sanal ortamında bunu denerseniz sudo komutunun orada çalışmadığını fark edeceksiniz. Bunun çözümü kullanıcıyı docker grubuna eklemek (Docker kurulurken oluşuyor). Dikkat edin docker grubuna eklediğiniz kullanıcı sudo yetkisine sahip olacaktır.

# erkan kullanıcısını docker grubuna ekle
erkan@ubuntu-desktop:~$ usermod -aG docker erkan

Eğer sanal makine kullanıyorsanız makinenizi yeniden başlatın.

10. Alpine Container paket yükleme

Alpine çok sık kullanılan bir imaj. Bu imaja zaman zaman ilave paketler yüklememiz gerekebilir. Aşağıda curl örneği verilmiştir.

apk add curl

11. Alpine container sürekli çalışsın

Alpine imajı çok yaygın bir baz imajdır. Tek başına bir alpine yaratayım küçük bir işletim sistemi olarak biraz oynayım derseniz yaratmanızla konteynerın kapanması bir olur. Aşağıdaki örnek gibi:

docker run -d alpine

docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED       STATUS       PORTS                                       NAMES

docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                     PORTS                                       NAMES
77ecc16ac07d   alpine        "/bin/sh"                10 seconds ago   Exited (0) 8 seconds ago                                               mystifying_ellis

Eğer alpine yaratınca sürekli çalışsın istiyorsak komuta bir kaç option girerek bunu sağlayabiliriz.

docker container run -it -d alpine /bin/sh

docker ps
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS         PORTS                                       NAMES
0c2c7a3b07a4   alpine        "/bin/sh"                4 seconds ago   Up 3 seconds                                               strange_albattani

12. Alpine container paket yüklemek

apk add curl

13. Container’dan ana makine servislerine ulaşmak

Bir konteyner yarattınız ancak ana makinenizde bir servis ile görüşemiyorsunuz. Konteyner’ın ana makine servisleri ile görüşmesini istiyorsak host network’e bağlamak yeterli olacaktır. Aşağıda curl ile ana makinede çalışan bir gitea reposuna netcat ve curl ile erişim örneği verilmiştir.

# Create alpine container attached to host network
 docker container run --network host -it -d alpine /bin/sh

# Connect to container
 docker exec -it a7a sh

# Install curl and netcat
apk add netcat-openbsd curl

# Check IP addresses
ip a

# netcat test
 nc -vt 10.0.2.15 3000
Connection to 10.0.2.15 3000 port [tcp/*] succeeded!

# curl test
/ # curl 10.0.2.15:3000 | grep VBO
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 10289    0 10289    0     0  1150k      0 --:--:-- --:--:-- --:--:-- 1255k
        <title> Gitea: VBO </title>
        <link rel="fluid-icon" href="/img/gitea-lg.png" title="Gitea: VBO">
        <meta property="og:title" content="Gitea: VBO">
<meta property="og:site_name" content="Gitea: VBO" />
                                        Gitea: VBO

 

Yazar Hakkında
Toplam 179 yazı
Erkan ŞİRİN
Erkan ŞİRİN
10 yılı aşkın süredir yurtiçi ve yurtdışında sektörde büyük veri mühendisliği, platform yönetimi ve makine öğrenmesi ile ilgili çalışmalar yürütmekte ve aynı zamanda birçok kurum ve şirkete danışmanlık ve eğitimler vermektedir. Çalışma alanları: Data ve MLOps platformları, gerçek zamanlı veri işleme, değişen veriyi yakalama (CDC) ve Lakehouse.
Yorumlar (Yorum yapılmamış)

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

×

Bir Şeyler Ara