Ana içeriğe geç

Docker Machine

Nedir?

Docker Machine, kişisel bilgisayarınızda ve bir çok bulut sağlayacılarında size otomatik olarak Docker ortamı hazırlar. Docker Machine VirtualBox sürücülerini kullanarak bir sanal makine oluşturuyor. Oluşturulan bu makine boot2docker işletim sistemini barındırmaktadır.

Docker Machine Kurulumu

  • Docker indirin ve kurun

  • Docker-machine kuralım

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
sudo mv /tmp/docker-machine /usr/local/bin/docker-machine &&
chmod +x /usr/local/bin/docker-machine
  • Docker-machine kurulmuşmu kontrol edelim
docker-machine
  • Çıktı:
[email protected]:~# docker-machine
Usage: docker-machine [OPTIONS] COMMAND [arg...]

Create and manage machines running Docker.

Version: 0.16.0, build 702c267f

Author:
  Docker Machine Contributors - <https://github.com/docker/machine>

Options:
  --debug, -D                                   Enable debug mode
  --storage-path, -s "/root/.docker/machine"    Configures storage path [$MACHINE_STORAGE_PATH]
  --tls-ca-cert                                 CA to verify remotes against [$MACHINE_TLS_CA_CERT]
  --tls-ca-key                                  Private key to generate certificates [$MACHINE_TLS_CA_KEY]
  --tls-client-cert                             Client cert to use for TLS [$MACHINE_TLS_CLIENT_CERT]
  --tls-client-key                              Private key used in client TLS auth [$MACHINE_TLS_CLIENT_KEY]
  --github-api-token                            Token to use for requests to the Github API [$MACHINE_GITHUB_API_TOKEN]
  --native-ssh                                  Use the native (Go-based) SSH implementation. [$MACHINE_NATIVE_SSH]
  --bugsnag-api-token                           BugSnag API token for crash reporting [$MACHINE_BUGSNAG_API_TOKEN]
  --help, -h                                    show help
  --version, -v                                 print the version

Commands:
  active                Print which machine is active
  config                Print the connection config for machine
  create                Create a machine
  env                   Display the commands to set up the environment for the Docker client
  inspect               Inspect information about a machine
  ip                    Get the IP address of a machine
  kill                  Kill a machine
  ls                    List machines
  provision             Re-provision existing machines
  regenerate-certs      Regenerate TLS Certificates for a machine
  restart               Restart a machine
  rm                    Remove a machine
  ssh                   Log into or run a command on a machine with SSH.
  scp                   Copy files between machines
  mount                 Mount or unmount a directory from a machine with SSHFS.
  start                 Start a machine
  status                Get the status of a machine
  stop                  Stop a machine
  upgrade               Upgrade a machine to the latest version of Docker
  url                   Get the URL of a machine
  version               Show the Docker Machine version or a machine docker version
  help                  Shows a list of commands or help for one command

Run 'docker-machine COMMAND --help' for more information on a command.

Docker-machine ile sanal makine oluşturmak

  • Ubuntu 20.04'te docker-machine ile çalışmak için VirtualBox'ı kurmanız gerekir:

sudo add-apt-repository multiverse && sudo apt-get update
sudo apt-get install virtualbox

  • Bir makine oluşturalım
docker-machine create --driver virtualbox testmakine  

Warning

"This computer doesn't have VT-X/AMD-v enabled. Enabling it in the BIOS is mandatory" Şeklinde bir hata alıyorsanız cihazınızın sanallaştırmaya ilgili bir takım ayarlarının kapalı olduğunu gösterir, Çözüm olarak sanal makinenizi bir linux altyapısında oluşturun

  • Çıktı:
[email protected]:~# docker-machine create --driver virtualbox testmakine
Running pre-create checks...
Creating machine...
(testmakine) Copying /root/.docker/machine/cache/boot2docker.iso to /root/.docker/machine/machines/testmakine/boot2docker.iso...
(testmakine) Creating VirtualBox VM...
(testmakine) Creating SSH key...
(testmakine) Starting the VM...
(testmakine) Check network to re-create if needed...
(testmakine) Waiting for an IP...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env testmakine
  • Aşağıdaki komut ile çalışan sanal makineleri görelim
docker-machine ls
  • Çıktı:
  • Makinemiz aktif ve çalışıyor
[email protected]:~# docker-machine ls
NAME         ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER      ERRORS
testmakine   -        virtualbox   Running   tcp://192.168.99.101:2376           v19.03.12
  • Oluşturduğumuz makineye SSH bağlantısı yapalım
docker-machine ssh testmakinesi
  • Çıktı:
[email protected]:~# docker-machine ssh testmakine
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

[email protected]:~$
  • Docker veriyonuna bakalım
docker version
  • Çıktı:
[email protected]:~$ docker version
Client: Docker Engine - Community
 Version:           19.03.12
 API version:       1.40
 Go version:        go1.13.10
 Git commit:        48a66213fe
 Built:             Mon Jun 22 15:42:53 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.12
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.10
  Git commit:       48a66213fe
  Built:            Mon Jun 22 15:49:35 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          v1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

docker-machine test makinesi üzerinde konteyner kurulumu

  • test makinamızda nginx imajını indirip çalıştıralım
docker run -d -p 8080:80 nginx
  • Çıktı:
[email protected]:~$ docker run -d -p 8080:80 nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
bb79b6b2107f: Pull complete
111447d5894d: Pull complete
a95689b8e6cb: Pull complete
1a0022e444c2: Pull complete
32b7488a3833: Pull complete
Digest: sha256:ed7f815851b5299f616220a63edac69a4cc200e7f536a56e421988da82e44ed8
Status: Downloaded newer image for nginx:latest
33e6a42cdf4e6150f22a5c3381bfa50f01c9aac4853224f337b14aab7c17b901
  • nginx imajı indirildi ve konteyner olarak çalıştırıldı, bunu aşağıdaki komutla doğrulayabiliriz
docker ps 
  • Çıktı:
[email protected]:~$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                  NAMES
33e6a42cdf4e        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp   stoic_chebyshev
  • SSH bağlantısı sağladığımız sanal makineden çıkmak için aşağıdaki komutu girebilirsiniz
logout
  • Logout yaptıktan sonra docker konteynerlerimi görmek istiyorum
  • Docker konteynerlerim için docker ps komutunu girdim ancak hiçbir çıktı alamadım
  • Oluşturduğumuz makineye bağlanıp nginx konteynerini görmemiz gerekiyor
[email protected]:~# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  • Aşağıdaki komutu girerseniz bağlantı detaylarını görebilirsiniz
[email protected]:~# docker-machine env testmakine
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/root/.docker/machine/machines/testmakine"
export DOCKER_MACHINE_NAME="testmakine"
# Run this command to configure your shell:
# eval $(docker-machine env testmakine)
  • Çıktıda verilen aşağıdaki komutu girin
eval $(docker-machine env testmakine)
  • Şimdi docker ps komutu ile konteynerlerinizi inceleyin
[email protected]:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
33e6a42cdf4e        nginx               "/docker-entrypoint.…"   12 minutes ago      Up 12 minutes       0.0.0.0:8080->80/tcp   stoic_chebyshev
  • env ile bağlantı sağladığım docker sanal makinemin host bilgisi
[email protected]:~# echo $DOCKER_HOST
tcp://192.168.99.101:2376