Docker Komutları

25 Ağu

Dcoker kurulu bir sistemde CLI üzerinden girilen komutlar ile docker işlemlerini gerçekleştirebilmekteyiz. Docker CLI bilindiği üzere bir Rest API aracılığı ile komutları arka plan servisi olan Daemon’a aktarmaktadır. Docker kullanımında faydalı komutlar aşağıda listelenmiştir.

1 – docker

CLI üzerinde docker ile ilgili komutların listesi ve parametreleri “docker” komutu ile öğrenilebilmektedir.

C:\Users\Bayram docker
A self-sufficient runtime for containers
 Options:
       --config string      Location of client config files (default
                            "C:\Users\Bayram\.docker")
   -c, --context string     Name of the context to use to connect to the
                            daemon (overrides DOCKER_HOST env var and
                            default context set with "docker context use")
   -D, --debug              Enable debug mode
   -H, --host list          Daemon socket(s) to connect to
   -l, --log-level string   Set the logging level
                            ("debug"|"info"|"warn"|"error"|"fatal")
                            (default "info")
       --tls                Use TLS; implied by --tlsverify
       --tlscacert string   Trust certs signed only by this CA (default
                            "C:\Users\Bayram\.docker\ca.pem")
       --tlscert string     Path to TLS certificate file (default
                            "C:\Users\Bayram\.docker\cert.pem")
       --tlskey string      Path to TLS key file (default
                            "C:\Users\Bayram\.docker\key.pem")
       --tlsverify          Use TLS and verify the remote
   -v, --version            Print version information and quit
 Management Commands:
   builder     Manage builds
   buildx*     Build with BuildKit (Docker Inc., v0.5.1-docker)
   compose*    Docker Compose (Docker Inc., v2.0.0-beta.6)
   config      Manage Docker configs
   container   Manage containers
   context     Manage contexts
   image       Manage images
   manifest    Manage Docker image manifests and manifest lists
   network     Manage networks
   node        Manage Swarm nodes
   plugin      Manage plugins
   scan*       Docker Scan (Docker Inc., v0.8.0)
   secret      Manage Docker secrets
   service     Manage services
   stack       Manage Docker stacks
   swarm       Manage Swarm
   system      Manage Docker
   trust       Manage trust on Docker images
   volume      Manage volumes
 Commands:
   attach      Attach local standard input, output, and error streams 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 between a container and the local filesystem
   create      Create a new container
   diff        Inspect changes to files or directories on a container's filesystem
   events      Get real time events from the server
   exec        Run a command in a running container
   export      Export a container's filesystem as a tar archive
   history     Show the history of an image
   images      List images
   import      Import the contents from a tarball to create a filesystem image
   info        Display system-wide information
   inspect     Return low-level information on Docker objects
   kill        Kill one or more running containers
   load        Load an image from a tar archive or STDIN
   login       Log in to a Docker registry
   logout      Log out from a Docker registry
   logs        Fetch the logs of a container
   pause       Pause all processes within one or more containers
   port        List port mappings or a specific mapping for the container
   ps          List containers
   pull        Pull an image or a repository from a registry
   push        Push an image or a repository to a registry
   rename      Rename a container
   restart     Restart one or more containers
   rm          Remove one or more containers
   rmi         Remove one or more images
   run         Run a command in a new container
   save        Save one or more images to a tar archive (streamed to STDOUT by default)
   search      Search the Docker Hub for images
   start       Start one or more stopped containers
   stats       Display a live stream of container(s) resource usage statistics
   stop        Stop one or more running containers
   tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
   top         Display the running processes of a container
   unpause     Unpause all processes within one or more containers
   update      Update configuration of one or more containers
   version     Show the Docker version information
   wait        Block until one or more containers stop, then print their exit codes

2 – docker version

Docker version komutu ile client ve server hakkında bilgiler edinilmektedir. Bu ekranda hata alınması durumunda daemon servisi ayakta olmayabilir.

C:\Users\Bayram docker
Client:
  Cloud integration: 1.0.17
  Version:           20.10.7
  API version:       1.41
  Go version:        go1.16.4
  Git commit:        f0df350
  Built:             Wed Jun  2 12:00:56 2021
  OS/Arch:           windows/amd64
  Context:           default
  Experimental:      true
 Server: Docker Engine - Community
  Engine:
   Version:          20.10.7
   API version:      1.41 (minimum version 1.12)
   Go version:       go1.13.15
   Git commit:       b0f5bc3
   Built:            Wed Jun  2 11:54:58 2021
   OS/Arch:          linux/amd64
   Experimental:     false
  containerd:
   Version:          1.4.6
   GitCommit:        d71fcd7d8303wbf684402823e425e9dd2e99285d
  runc:
   Version:          1.0.0-rc95
   GitCommit:        b9ee9c6314499f1b4a7f497e1f1f856fe433d3b7
  docker-init:
   Version:          0.19.0
   GitCommit:        de40ae0

3 – docker info

Bu komut sayesinde sistemde kaç adet container olduğu, çalışan, durmuş olan container sayıları, imaj sayıları ve diğer teknik bilgiler yer almaktarır.

C:\Users\Bayram docker
Client:
  Context:    default
  Debug Mode: false
  Plugins:
   buildx: Build with BuildKit (Docker Inc., v0.5.1-docker)
   compose: Docker Compose (Docker Inc., v2.0.0-beta.6)
   scan: Docker Scan (Docker Inc., v0.8.0)
 Server:
  Containers: 5
   Running: 0
   Paused: 0
   Stopped: 5
  Images: 3
  Server Version: 20.10.7
  Storage Driver: overlay2
   Backing Filesystem: extfs
   Supports d_type: true
   Native Overlay Diff: true
   userxattr: false
  Logging Driver: json-file
  Cgroup Driver: cgroupfs
  Cgroup Version: 1
  Plugins:
   Volume: local
   Network: bridge host ipvlan macvlan null overlay
   Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
  Swarm: inactive
  Runtimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runc
  Default Runtime: runc
  Init Binary: docker-init
  containerd version: d71fcd7d8303cbf684402823e425e9dd2e99285d
  init version: de40ad0
  Security Options:
   seccomp
    Profile: default
  Kernel Version: 4.19.104-microsoft-standard
  Operating System: Docker Desktop
  OSType: linux
  Architecture: x86_64
  CPUs: 8
  Total Memory: 12.4GiB
  Name: docker-desktop
  ID: E4O2:DUVG:VVJK:SP2R:2WVA:7WBN:OC65:RUOF:XIAB:BTGL:EQH4:Y67U
  Docker Root Dir: /var/lib/docker
  Debug Mode: true
   File Descriptors: 38
   Goroutines: 40
   System Time: 2021-08-22T19:12:04.9565663Z
   EventsListeners: 2
  Registry: https://index.docker.io/v1/
  Labels:
  Experimental: false
  Insecure Registries:
   127.0.0.0/8
  Live Restore Enabled: false

4 – docker <komut> –help

Docker komut listesinden bir komutun hangi parametreler ile çalıştığını öğrenebilmek için –help parametresi kullanılır.

C:\Users\Bayram docker push --help

Usage:  docker push [OPTIONS] NAME[:TAG]
 Push an image or a repository to a registry
 Options:
   -a, --all-tags                Push all tagged images in the repository
       --disable-content-trust   Skip image signing (default true)
   -q, --quiet                   Suppress verbose output

5 – docker <object> <komut>

Docker komut listesinde çok fazla komut olduğundan dolayı, docker mühendisleri komuttan önce obje isminin kullanılmasını sağlayarak komut karmaşasının önüne geçmek istemişlerdir. Burada obje ismi container, image gibi docker objeleridir. Obje isminin kullanılması zorunlu değil ancak önerilir.

C:\Users\Bayram docker container run hello-world

Komutu aşağıdaki komut ile aynı işi yapar

C:\Users\Bayram docker run hello-world

6 – docker run <image>

Hangi imajdan bir container oluşturulacağı bildirilir. Bu komut daha önce belirtildiği gibi CLI üzerinden Daemon tarafına Rest API ile gönderilir. Örneğin “hello-word” isimli imajdan bir container oluşturulması komutu gönderildiğinde, eğerr daha önce indirilmediyse öncelikle bu imaj Docker Hub üzerinden indirilir. Daha sonra da bu imajdan bir container oluşturulur.

C:\Users\Bayram docker run hello-world

Hello from Docker!
 This message shows that your installation appears to be working correctly.
 To generate this message, Docker took the following steps:
 The Docker client contacted the Docker daemon.
 The Docker daemon pulled the "hello-world" image from the Docker Hub.
 (amd64)
 The Docker daemon created a new container from that image which runs the
 executable that produces the output you are currently reading.
 The Docker daemon streamed that output to the Docker client, which sent it
 to your terminal. 
 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash
 Share images, automate workflows, and more with a free Docker ID:
  https://hub.docker.com/
 For more examples and ideas, visit:
  https://docs.docker.com/get-started/

Container oluştuurlduğunda içerisindeki ugyulama çalışır ve bu uygulama çalışmaya devam ettiği sürece container çalışmaya devam eder. Uygulama çalışıp bittiğinde container kapatılır. Yukarıdaki örnekte “hello-world” imajı içerisinde planlana uygulama ekrana birşeyler yazdı ve işlemini bitirdi. Bu durumda container da kapatıldı.

7 – docker ps

Çalışan container listesini veren komuttur.

C:\Users\Bayram docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Bu durumda sistemde çalışan bir container olmadığı anlaşılmaktadır.

docker ps -a komutu ile hem çalışan hem de durdurulmuş container’ları gösterir.

C:\Users\Bayram docker ps -a
CONTAINER ID   IMAGE                   COMMAND                  CREATED          STATUS                      PORTS                      NAMES
03499e6b9b2b   hello-world             "/hello"                 17 minutes ago   Exited (0) 16 minutes ago                              affectionate_euclid

Listede görüldüğü üzere her container için unique bir ID ve NAME belirlenir. Container’lar üzerinde işlem yapılırken ID ve NAME kullanılır. Eğer container oluşturulurken isim verilmez ise docker kendi belirlediği ismi kullanır.

8 – docker rm <conatainer id veya name>

Oluşturulan container’ları silmek için kullanılır.

C:\Users\Bayram docker rm 03499e6b9b2b
03499e6b9b2b

Not: Çalışan bir container silinmek sitediğinde sistem hata mesajı verir. Bu durumda ya container durdurulur ve silinir. Ya da “docker rm -f <container>” ile force edilerek silinir.

9 – docker start <conatainer id veya name>

Durdurulmuş bir container’ı çalıştırmak için kullanılır. Daha önceki örneklerde olduğu gibi, bir uygulama çalışıp işini bitirdiğinde container durdurulur. Tekrar çalıştırmak için start komutu kullanılır.

C:\Users\Bayram docker start c48d7640c752
c48d7640c752

10 – docker logs <conatainer id veya name>

Container içerisinde üretilen log’ları listeler. Container içerisinde çalışan program tarafından üretilen çıktıları buradan listelenebilir. Örneğin hello-world isimli container ne kadar çalıştırılırsa log tarafına o kadar çıktı eklenir.

C:\Users\Bayram docker logs c48d7640c752
Hello from Docker!
 This message shows that your installation appears to be working correctly.
 To generate this message, Docker took the following steps:
 The Docker client contacted the Docker daemon.
 The Docker daemon pulled the "hello-world" image from the Docker Hub.
 (amd64)
 The Docker daemon created a new container from that image which runs the
 executable that produces the output you are currently reading.
 The Docker daemon streamed that output to the Docker client, which sent it
 to your terminal. 
 To try something more ambitious, you can run an Ubuntu container with:
  $ docker run -it ubuntu bash
 Share images, automate workflows, and more with a free Docker ID:
  https://hub.docker.com/
 For more examples and ideas, visit:
  https://docs.docker.com/get-started/

11 – docker run -d <image> ile arka planda çalışan container’lar

Her container, çalışıp işini bitirip kapanan türde değildi. Bazı container’lar sürekli çalışan uygulamalar şeklinde planlandığı için bir kez çalştırıldığında ugyulama hata almadığı ve container durdurulmadığı sürece çalışmaya devam eder. Örneğin httpd imajından oluşturulan container’alr bu şekildedir.

C:\Users\Bayram docker run -d httpd
Unable to find image 'httpd:latest' locally
 latest: Pulling from library/httpd
 e1acddbe380c: Pull complete
 3707e996fb4c: Pull complete
 c14c6b866b5c: Pull complete
 68cf2274a624: Pull complete
 bd362b482eb5: Pull complete
 Digest: sha256:307e3a2f43cd2c58ac37a093dd9adfc2598d00ca4cc0dd978cb1a56ccad4a39f
 Status: Downloaded newer image for httpd:latest
 b62ee5b7e16b7723b665087d1cc30b96ba9590bc6dbb3c0102ee18312afae62d

C:\Users\Bayram docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS     NAMES
b62ee5b7e16b   httpd     "httpd-foreground"   31 seconds ago   Up 27 seconds   80/tcp    admiring_buck

Öncelikle local sistemde kayıtlı olmayan httpd imajı indidilri ve arkaplanda çalıştırıldı ve dcoker ps komutu ile görüntülendi.

Not: docker uygulamaların stdout ve stderr çıkışlarına bağlanır.

Docker bir uygulama için container çalıştırıdığında mevcut shell, ya da kullanılan komut satırını container da çalışan uygulamanın stdout ve stderr çıkışlarına bağlar. Sürekli arka planda çalışan uygulamalar için run komutu ile -d parametresinin kullanılma sebebi, uygulamanın konsolu kilitlememesidir. Bu parametre ile uygulama arka planda çalşımaya devam eder.

12 – docker exec -it <containerid> sh ile container shell bağlantısı

Docker container içerisinde çalışan shell bağlantısını yapmak için exec komutu çalıştırılır.

C:\Users\Bayram docker exec -it 420F sh
# ls
 bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules
# exit

Komutta kullanılan “-it” parametresi “interactive terminal” anlamına gelir. “sh” parametresi ise shell anlamına gelmektedir. Linux container olduğu için, ls komutu ile container içindeki dosyalar listelelenebilir. exit komutu ile container içerisinden çıkılabilir. Container çalışmaya devam eder.

13- docker <object> inspect <id veya name>

inspect komutu, ilgili obje hakkında çok detaylı bilgiler verir.

C:\Users\Bayram docker container inspect 4f
[
     {
         "Id": "4f200ee8aa19197260259e78636de7df39fbb946b8363f6aa1122051832e81d6",
         "Created": "2021-08-24T18:53:04.4160754Z",
         "Path": "httpd-foreground",
         "Args": [],
         "State": {
             "Status": "running",
             "Running": true,
             "Paused": false,
             "Restarting": false,
             "OOMKilled": false,
             "Dead": false,
             "Pid": 1137,
             "ExitCode": 0,
             "Error": "",
             "StartedAt": "2021-08-24T18:53:05.0525906Z",
             "FinishedAt": "0001-01-01T00:00:00Z"
         },
    ....
    ....

Sadece container değil image gibi objeler ile ilgili bilgiler alınabilmektedir.