Docker Machine

https://docs.docker.com/machine/install-machine/

Я пока до конца не разобрался, для чего нужена Docker Machine. И без нее все нормально работает.

Если все правильно понимаю, то для запуска Docker контейнеров с использованием драйвера virtualbox и virtualbox виртуалок. Понятно, что это нужно, когда, например приходится делать это в Windows. Но под linux не вижу особой в этом необходимости.

Делаю:
03.04.2018

Смотрю последний релиз (сегодня это 0.14): https://github.com/docker/machine/releases/

# curl -L https://github.com/docker/machine/releases/download/v0.14.0/docker-machine-`uname -s`-`uname -m` > /usr/local/bin/docker-machine && \
chmod +x /usr/local/bin/docker-machine


# docker-machine -v
docker-machine version 0.14.0, build 89b8332


#  docker-machine create --driver virtualbox docker01


$ docker-machine ls
NAME       ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
docker01   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.03.0-ce   


$ docker-machine env docker01
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/marley/.docker/machine/machines/docker01"
export DOCKER_MACHINE_NAME="docker01"
# Run this command to configure your shell: 
# eval $(docker-machine env docker01)


-- Run this command to configure your shell: 
$ eval $(docker-machine env docker01)


-- Переключиться на активную машину. Т.е. та с которой нужно работать должна быть помечена *. Переключиться можно командой выше.

$ docker-machine ls
NAME       ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
docker01   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.03.0-ce   


$ docker run -d --name nginnx --rm -p 80:80 nginx:alpine


$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED                  STATUS              PORTS                NAMES
9ba0e3e27b77        nginx:alpine        "nginx -g 'daemon of…"   Less than a second ago   Up 5 seconds        0.0.0.0:80->80/tcp   nginnx


$ docker-machine  ip docker01
192.168.99.100


$ curl -I 192.168.99.100
HTTP/1.1 200 OK
Server: nginx/1.13.11
Date: Wed, 04 Apr 2018 02:14:41 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Tue, 03 Apr 2018 18:26:49 GMT
Connection: keep-alive
ETag: "5ac3c769-264"
Accept-Ranges: bytes


# apt-get install -y jq


$ docker-machine inspect docker01 | jq .
{
  "Name": "docker01",
  "HostOptions": {
    "AuthOptions": {
      "StorePath": "/home/marley/.docker/machine/machines/docker01",
      "ServerCertSANs": [],
      "ClientCertPath": "/home/marley/.docker/machine/certs/cert.pem",
      "ServerKeyRemotePath": "",
      "CertDir": "/home/marley/.docker/machine/certs",
      "CaCertPath": "/home/marley/.docker/machine/certs/ca.pem",
      "CaPrivateKeyPath": "/home/marley/.docker/machine/certs/ca-key.pem",
      "CaCertRemotePath": "",
      "ServerCertPath": "/home/marley/.docker/machine/machines/docker01/server.pem",
      "ServerKeyPath": "/home/marley/.docker/machine/machines/docker01/server-key.pem",
      "ClientKeyPath": "/home/marley/.docker/machine/certs/key.pem",
      "ServerCertRemotePath": ""
    },
    "SwarmOptions": {
      "IsExperimental": false,
      "Env": null,
      "ArbitraryJoinFlags": [],
      "ArbitraryFlags": [],
      "Overcommit": 0,
      "Heartbeat": 0,
      "IsSwarm": false,
      "Address": "",
      "Discovery": "",
      "Agent": false,
      "Master": false,
      "Host": "tcp://0.0.0.0:3376",
      "Image": "swarm:latest",
      "Strategy": "spread"
    },
    "EngineOptions": {
      "InstallURL": "https://get.docker.com",
      "RegistryMirror": [],
      "TlsVerify": true,
      "SelinuxEnabled": false,
      "StorageDriver": "",
      "ArbitraryFlags": [],
      "Dns": null,
      "GraphDir": "",
      "Env": [],
      "Ipv6": false,
      "InsecureRegistry": [],
      "Labels": [],
      "LogLevel": ""
    },
    "Disk": 0,
    "Memory": 0,
    "Driver": ""
  },
  "DriverName": "virtualbox",
  "Driver": {
    "ShareFolder": "",
    "NoVTXCheck": false,
    "DNSProxy": true,
    "NoShare": false,
    "HostOnlyNoDHCP": false,
    "UIType": "headless",
    "HostOnlyPromiscMode": "deny",
    "HostOnlyNicType": "82540EM",
    "HostOnlyCIDR": "192.168.99.1/24",
    "HostDNSResolver": false,
    "Boot2DockerImportVM": "",
    "SwarmHost": "tcp://0.0.0.0:3376",
    "SwarmMaster": false,
    "StorePath": "/home/marley/.docker/machine",
    "SSHKeyPath": "/home/marley/.docker/machine/machines/docker01/id_rsa",
    "SSHPort": 38345,
    "SSHUser": "docker",
    "MachineName": "docker01",
    "IPAddress": "192.168.99.100",
    "SwarmDiscovery": "",
    "VBoxManager": {},
    "HostInterfaces": {},
    "CPU": 1,
    "Memory": 1024,
    "DiskSize": 20000,
    "NatNicType": "82540EM",
    "Boot2DockerURL": ""
  },
  "ConfigVersion": 3
}


$ docker-machine ssh docker01
                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
Boot2Docker version 18.03.0-ce, build HEAD : 404ee40 - Thu Mar 22 17:12:23 UTC 2018
Docker version 18.03.0-ce, build 0520e24


$ docker-machine stop docker01


$ docker-machine rm -f docker01