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.