6 Temmuz 2020 Pazartesi

docker run Seçeneği - Container Oluşturur ve Çalıştırır

Giriş
Açıklaması şöyle. Yalıtılmış bir container başlatır. Başlatılan container'i görmek için "docker ps" komutu kullanılabilir.
Docker runs processes in isolated containers. A container is a process which runs on a host. The host may be local or remote. When an operator executes docker run, the container process that runs is isolated in that it has its own file system, its own networking, and its own isolated process tree separate from the host.
Container İçinde Komut Çalıştırmak
Şöyle yaparız
docker run ... mycommand
Eğer birden fazla komut çalıştırmak istersek şöyle yaparız
>docker run ... mycommand && mycommand2
Container İsmi
Açıklaması şöyle. Belirtilen isme sahip image dosyasını çalıştırır. Eğer container isim belirtilmezse rastgele bir isim verilir.
When you use docker run ... a new container is created and started based on the image you provide inside the command. It is also assigned a random name (if you don't specify one). If this container exits, you can then use docker start name and start it again.
Söz Dizimi
Söz dizimi şöyle
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Container Yaşam Döngüsü
Açıklaması şöyle. Process bitince container da kapatılır.
The lifecycle of a Docker container is:

- docker run imagename -> create container x from image imagename
- docker exec x ls -> execute command ls in running container x
- docker stop x -> stop container (but still visible in docker container ls -a)
- docker start x -> restart container x
- docker stop x -> stop container xagain
- docker rm x -> remove container x (now also ls -a won't show it)
Bu seçenek docker create + docket start Bileşimidir
Açıklaması şöyle.
The command docker run in fact executes two commands together: docker create and docker start.
Açıklaması şöyle
... container oluşturmak için kullanılan docker create + docker start komutlarının her ikisini birlikte gerçekleştiren komuttur. Ayrıca run komutu docker attach komutunu da üstlendiğinden dolayı uygulamanın çıktısını da görebiliriz.

docker start: start one or more stopped containers
docker create: create a new container
docker attach: attach local standard input, output, and error streams to a running container
Linux İçin Overlay File System

docker run komutunu çalıştırınca dosya sistemin olanların açıklaması şöyle. Alttatki tüm image'ların birleşimi olan boş bir üst dizin oluşturulur. Yapılan tüm işlemler bu üst dizinde gerçekleşir. Böylece alttaki image'ların dosyaları bozulmaz.
At high level, docker downloads the tarballs for the image, it unpacks each layer into a separate directory and then tells the overlay filesystem to combine them all together together with an empty upper directory that the container will write its changes to it.

When you change, create or delete files in the container, the changes are going to be stored in this empty directory. When the container exits, docker cleans up the folder - that is why the changes you make in the container do not persist.
Bu yüzden image'lar farklı farklı üst image'lar ile paylaşılabilir. Açıklaması şöyle.
This way to use the overlay filesystem allows hosts to cache docker images effectively. For example, if you define two images, they can both use the same layers. No need to download multiple times or to have many copies on the disk!
--cpus seçeneği - İşlemci sayısını belirtir. 
Örnek
Şöyle yaparız.
docker run -it --cpus 2 -v ${PWD}:/app
  --workdir /app adoptopenjdk/openjdk11 java CommonPoolTest.java
--cpuset-cpus seçeneği
Örnek
Şöyle yaparız
docker run -d --cpuset-cpus 0-1 --name containerName mongo
-d seçeneği

detached anlamına gelir. docker arka planda çalışır. Sunucu tarzı container'larda kullanılır
Örnek
Şöyle yaparız
docker run -p 6379:6379 --name some-redis -d redis
Örnek
Şöyle yaparız.
docker run -d -p 6033:3306 --name=docker-mysql --env="MYSQL_ROOT_PASSWORD=root" 
  --env="MYSQL_PASSWORD=root" --env="MYSQL_DATABASE=book_manager" mysql
-e seçeneği
Environment anlamına gelir. Söz dizimi şöylee
$ docker run -e {environmentName}="{environmentValue}"
Örnek
Şöyle yaparız.
docker run -p 10.70.49.75:3305:3306/tcp -e MYSQL_ROOT_PASSWORD=0523 mysql
--link seçeneği - Kullanmayın
Açıklaması şöyle. --network seçeneğini kullanmak gerekir. Docker Networking yazısına bakınız
Linking is a legacy feature. Please use "user defined networks":
Using "user defined networks", you have an "internal name resolution" at your disposal (somewhat like domain name resolution when visiting websites). You can use the names of the container that you want to refer to, in order to resolve the IP addresses of containers, as long as they are running on the same "user defined network". With this, you can resolve the IP address of the rabbitmq container with its name, within other containers, on the same network.
All containters on the same "user defined network" will have network connectivity. There is no need for "legacy linking".
-it seçeneği - tty verir
Açıklaması şöyle
When you execute the command docker run -it ubuntu ls /, it creates a new container, runs the specified command ls / and gives u an interactive tty to the docker container using the -i and -t flag.
Örnek
Şöyle yaparız. Container ismi some-redis olur. -it  ile redis-cli komutunun çıktısını görürüz.
docker exec -it some-redis sh -c "redis-cli"
-m seçeneği
Kullanılması istenilen bellek miktarını belirtilir.
Örnek
Şöyle yaparız.
docker run -m 512m openjdk:11-jre java -XX:+PrintFlagsFinal -version
--name seçeneği
Container'a isim verir.
Örnek
Şöyle yaparız
docker run --rm -d --network host --name activemq temp-activemq:5.16.0
-network seçeneği
Docker Networking yazısına taşıdım

-p seçeneği
Docker Networking yazısına taşıdım

--rm seçeneği
Container'dan çıkınca remove edilir
Örnek
Şöyle yaparız.
docker run --rm -ti -p 8888:8888 kurento/kurento-media-server-dev:latest
--volume seçeneği
Bind mount a volume anlamına gelir. Host makinemdeki bir dizini docker ile paylaşmak içindir. Genellikle "$PWD":DockerDizini şeklinde kullanılır.

Örnek
Şöyle yaparız.
docker run -d --name my-source-project -v "$PWD":/tmp gitdocker
Örnek
Şöyle yaparız.
docker run --rm --name run -v "$(pwd)":/usr/src/mymaven 
-w /usr/src/mymaven svenruppert/adopt:1.12.0-1 java -jar target/myapp.jar
-w seçeneği
Şöyle yaparız. Container içinde mv komutu clean ve install parameterleri ile çalıştırılır.
docker run 
-it --rm --name my-maven-project 
  -v  /var/www/html/Recommandation:/usr/src/mymaven 
  -p 88:88 
  -w /usr/src/mymaven maven:latest 

mvn clean install
Çıktı Almak
docker çıktısını bilgisayarımda saklamak
İsmi centos olan image'ı çalıştırmak için şöyle yaparız. centos kendi içindeki cat komutunu çalıştırır. Çıktı benim bilgisayarımdaki asdf dosyasına yazılır.
docker run centos cat /etc/hosts > asdf
docker komut çıktısını docker içinde saklamak
Şöyle yaparız.
docker run centos sh -c 'cat /etc/hosts > /tmp/asdf '

Hiç yorum yok:

Yorum Gönder