
Saludos a todos, como muchos ya sabéis en este Blog hemos hablado anteriormente de Docker/containers y Zimbra, pero en este caso quiero mostraros una de las novedades del pasado VMworld, que avanza despacio pero avanza, se trata de vSphere Integrated Containers, debo avisaros que es un primer vistazo y poco podemos hacer excepto ver por donde irán los pasos de VMware.
![[SCM]actwin,0,0,0,0;Zoom Player zplayer 9/2/2015 , 9:06:28 AM](https://www.jorgedelacruz.es/wp-content/uploads/2016/04/vmware-vic-029.jpg)
- ¿Qué es vSphere Integrated Containers?
- 1.- Desplegar la VM de Photon OS
- 2.- Desplegando vSphere Integrated Containers (VIC) v0.1
- 3.- Errores conocidos, usando el modo manual con git
vSphere Integrated Containers es especialmente útil para todos aquellos desarrolladores, e incluso Departamentos de IT, que requieren desplegar instancias Linux, probar ciertos elementos, Orquestación, HA, Cluster, etc, y después destruir las instancias, os dejo una ilustración de donde se encuentran los Containers una vez que usamos virtualización para ello.
¿Qué es vSphere Integrated Containers?
Lo mejor que podemos hacer es dar un vistazo rápido a la siguiente presentación acerca de esta tecnología, además se trata de unas Slides frescas de Enero de este año:
[slideshare id=57446360&doc=inf5616wendlandtpresented-160125061833]
1.- Desplegar la VM de Photon OS
Photon OS será el encargado de servir los containers, y podemos decir que es el “ESXi” dentro de nuestro ESXi. Hay tres maneras de desplegar Photon OS, en mi caso he optado por la .ISO FULL ya que es la mejor manera de no tener errores, he tenido ciertos problemas con el OVA, os lo dejo a continuación. Podéis encontrar todas las maneras de desplegar Photon OS, de manera gratuita aquí.
1.1- Desplegando Photon OS usando la Full ISO y una VM
He preferido este método, ya que es más cómodo y tiene todas las dependencias necesarias para correr un entorno Photon OS, nos iremos a nuestro VMware Host Client, o vSphere Web Client o vSphere Windows Client y crearemos una nueva VM

Introduciremos el nombre de la VM, seleccionaremos compatiblidad ESXi 6.0, tipo Linux y en versión seleccionaremos CoreOS 64-bit
Seleccionaremos nuestro Storage después y pulsaremos en Next
Recordar que a la VM, deberemos conectarle la ISO de Photon OS TP2
En mi caso he creado una VM con bastantes recursos, pero para vuestro Lab podéis usar 2GB de RAM y 40GB de disco o más, importante.
Una vez que tenemos todos los requisitos, pulsaremos Finish
La instalación de la ISO es muy sencilla, veremos primero el splash de VMware, donde haremos click en Install
Aceptaremos los términos de condiciones de VMware, donde nos dicen que se trata de una versión Technical Preview, por supuesto nada para producción
Seleccionaremos el Disco de la VM donde queremos instalarlo, en mi caso en mi unidad de 100GB que le he asignado antes, nos perguntará si queremos formatear, seleccionaremos Yes.
Cuando Photon Os nos pregunta por la versión a instalar, seleccionaremos Full
A la hora de seleccionar el Hostname, podéis elegir que el queráis para vuestro entorno
Por último nos solicitará la contraseña de Root
Y comenzará el proceso de instalación que tomará unos pocos minutos dependiendo de la velocidad del Host y del disco
Al encender nuestra VM, podremos ver el splash de Photon OS, todavía en Technical Preview
Una vez dentro de la VM, nos loguearemos con root y la pass que hemos seleccionado anteriormente, después editaremos el fichero de configuración de SSH para poder conectarnos como root

Y descomentaremos las siguientes líneas para poder acceder como root por SSH
[accordion]
[accordion-group title=”Desplegando Photon OS usando el Appliance en vez de la Full ISO”]
1.2.- Desplegando Photon OS usando Appliance
Una de las opciones que tenemos es desplegar Photon OS usando el appliance, vamos a ver aquí los pasos a seguir, dentro de nuestro VMware Host Client, o vSphere Web Client, o vSphere Client para windows desplegaremos el fichero .OVA

Seleccionaremos la opción de desplegar una VM desde un fichero OVF u OVA
Seleccionaremos el nombre para la VM que crea este fichero OVA
Seleccionaremos ahora en el almacenamiento donde queremos ubicar esta VM
Seleccionaremos después el modo que queremos para el Disco y el Networking
Y por último pulsaremos Finish
Vemos el proceso del despliegue de la VM, que debe ser unos pocos segundos por lo general:
Recomiendo otorgar más memoria RAM, CPU y sobre todo 40GB o más de disco, ya que si no tendremos problemas a la hora de instalar VIC
Al encender nuestra VM, podremos ver el splash de Photon, todavía en Technical Preview
Una vez dentro de la VM, nos loguearemos con root/changeme, y nos pedirá cambiar la password, después editaremos el fichero de configuración de SSH para poder conectarnos como root
Y descomentaremos las siguientes líneas para poder acceder como root por SSH
Como estamos usando el appliance, deberemos cambiar el espacio en el disco y y expandir el tamaño, usando GParted por ejemplo.
Para ello deberemos instalar primero en nuestro Photon OS los siguientes paquetes, wget, git and tar
root@photon-machine [ ~ ]# tdnf install wget
Installing:
wget x86_64 1.15-1.ph1tp2
Is this ok [y/N]:y
Downloading:
wget 841101 100%
Testing transaction
Running transaction
Complete!
root@photon-machine [ ~ ]# tdnf install git
Installing:
perl-DBIx-Simple noarch 1.35-1.ph1tp2
perl-DBD-SQLite x86_64 1.46-1.ph1tp2
perl-YAML noarch 1.14-1.ph1tp2
perl-DBI x86_64 1.633-1.ph1tp2
perl x86_64 5.18.2-2.ph1tp2
git x86_64 2.1.2-1.ph1tp2
Is this ok [y/N]:y
Downloading:
git 7592028 100%
perl 17943120 100%
perl-DBI 800663 100%
perl-YAML 67718 100%
perl-DBD-SQLite 2081562 100%
perl-DBIx-Simple 38049 100%
Testing transaction
Running transaction
Complete!
root@photon-machine [ ~ ]# tdnf install tar
Installing:
tar x86_64 1.27.1-1.ph1tp2
Is this ok [y/N]:y
Downloading:
tar 1140429 100%
Testing transaction
Running transaction
Complete!
[/accordion-group]
[/accordion]
1.3.- Probar Photon OS con Docker
Lanzaremos ahora los siguientes comandos para probar que Photon Os funciona y podemos crear un Container con docker, muy sencillo:
root@photon-machine [ ~ ]# systemctl start docker
root@photon-machine [ ~ ]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
root@photon-machine [ ~ ]# docker run -d -p 80:80 vmwarecna/nginx
Unable to find image 'vmwarecna/nginx:latest' locally
latest: Pulling from vmwarecna/nginx
511136ea3c5a: Pull complete
e977d53b9210: Pull complete
c9fa20ecce88: Pull complete
184d60f5cc4f: Pull complete
96d31e36bd8a: Pull complete
fd2224b9a216: Pull complete
7f3a2bd1e995: Pull complete
4c4851e85e94: Pull complete
560d74bc7ae1: Pull complete
07f0aa77ae76: Pull complete
126105e511b8: Pull complete
775024331ffa: Pull complete
db26ae25be15: Pull complete
6d36a12c92d5: Pull complete
Digest: sha256:f73bbae0f31823c06478b1fa5efb4957bc25239802fd5ea94e4442c0a6090d23
Status: Downloaded newer image for vmwarecna/nginx:latest
00547a768bda1fb5d3f2cca2465021520dd4a49ec15693387d0d307b826abd21
root@photon-machine [ ~ ]#
Una vez hemos ejecutado los comandos, ya tenemos Docker y el Container corriendo, veamos ahora que IP tiene Photon OS, ya que al ser un OVA ha usado mi DHCP interno, podremos ver la interfaz de red que ha creado para la red de Containers de Docker, así como la Ethernet local, llamada aquí eno16777984
root@photon-machine [ ~ ]# ifconfig
docker0 Link encap:Ethernet HWaddr 02:42:63:36:07:2A
inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27 errors:0 dropped:0 overruns:0 frame:0
TX packets:69 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:90120 TX bytes:7873
eno16777984 Link encap:Ethernet HWaddr 00:0C:29:65:4D:2E
inet addr:192.168.1.242 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:30280 errors:0 dropped:0 overruns:0 frame:0
TX packets:15929 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:43504022 TX bytes:1334077
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:67 errors:0 dropped:0 overruns:0 frame:0
TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:16923 TX bytes:16923
veth16a2056Link encap:Ethernet HWaddr DA:7D:08:33:70:C8
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27 errors:0 dropped:0 overruns:0 frame:0
TX packets:88 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:90498 TX bytes:10953
Y ya solamente nos queda abrir un navegador e introducir la IP del Photon OS, y veremos nuestro nginx, que realmente se ejecuta dentro del container que acabamos de lanzar

2.- Desplegando vSphere Integrated Containers (VIC) v0.1
Según he visto ha varios métodos para desplegar vSphere Integrated Containers, tenéis la versión preparada de Bjoern, que es la que yo usaré, o también podéis usar los pasos de Cormac y usar git para construir VIC, a mí me ha dado un error y le he dejado un comentario, o no obstante os mostraré los pasos al final.
Lo primero que tendremos que hacer es crear un directorio donde descargaremos la versión lista para usar de Bjoern:
root [ ~ ]# mkdir /home/VCHmaster
root [ ~ ]# cd /home/VCHmaster
Ahora descargaremos el VIC listo para usar desde la siguiente dirección
root [ /home/VCHmaster ]# wget https://bintray.com/artifact/download/vmware/vic/vic_0.1.0.tar.gz
Y una vez termina la descarga descomprimiremos el fichero y le daremos permisos de ejecucción al script dentro de la carpeta vic
root [ /home/VCHmaster ]# tar -xzf vic_0.1.0.tar.gz
root [ /home/VCHmaster ]# chmod +x vic/install.sh
¡Ya casi estamos listos!
Tendremos que descargar govmw también desde el github oficial de VMware, crearemos una carpeta primero y estableceremos las variables de sistema:
root [ /home/VCHmaster ]# mkdir /home/VCHmaster/govmw
root [ /home/VCHmaster ]# export GOPATH=/home/VCHmaster/govmw
root [ /home/VCHmaster ]# PATH=$PATH:/home/VCHmaster/govmw/bin
Instalaremos la librería de Go para VMware vSphere API
root [ /home/VCHmaster ]# go get github.com/vmware/govmomi/govc
2.1.- Lanzando el primer Container 🙂
Ya solamente nos queda lanzar el siguiente comando para que se cree el primer Container en nuestro entorno VMware, tener en cuenta que debéis seleccionar vuestro Host ESXi, con vuestra contraseña y la IP del mismo, posteriormente el Datastore donde queremos guardar el Container y por último el nombre del container:
root [ /home/VCHmaster/vic ]# ./install.sh -g -t 'root:[email protected]' -i ZINT-002 vcontainer-01
# Generating certificate/key pair - private key in vcontainer-01-key.pem
# Logging into the target
# Uploading ISOs
[10-04-16 20:39:56] Uploading... OK
[10-04-16 20:39:58] Uploading... OK
# Creating vSwitch
# Creating Portgroup
# Creating the Virtual Container Host appliance
# Adding network interfaces
# Setting component configuration
# Configuring TLS server
# Powering on the Virtual Container Host
# Setting network identities
# Waiting for IP information
#
# SSH to appliance (default=root:password)
# [email protected]
#
# Log server:
# https://192.168.1.243:2378
#
# Connect to docker:
docker -H 192.168.1.243:2376 --tls --tlscert='vcontainer-01-cert.pem' --tlskey='vcontainer-01-key.pem'
DOCKER_OPTS="--tls --tlscert='vcontainer-01-cert.pem' --tlskey='vcontainer-01-key.pem'"
DOCKER_HOST=192.168.1.243:2376
Y ya veremos una nueva “VM” en nuestro entorno VMware, que realmente se trata de un Container Docker

Podemos lanzar un par de comandos como son info y version para ver un poco más acerca de Docker, la versión que estamos ejecutando, etc.
root [ /home/VCHmaster/vic ]# docker -H 192.168.1.243:2376 --tls --tlscert='vcontainer-01-cert.pem' --tlskey='vcontainer-01-key.pem' info
Containers: 0
Images: 0
Storage Driver: Portlayer Storage
CPUs: 0
Total Memory: 0 B
Name: VIC
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: IPv4 forwarding is disabled.
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
root [ /home/VCHmaster/vic ]# docker -H 192.168.1.243:2376 --tls --tlscert='vcontainer-01-cert.pem' --tlskey='vcontainer-01-key.pem' version
Client:
Version: 1.8.1
API version: 1.20
Go version: go1.4.2
Git commit: d12ea79
Built: Thu Aug 13 02:49:29 UTC 2015
OS/Arch: linux/amd64
Server:
Version: 0.0.1
API version: 1.23
Go version: go1.6
Git commit: -
Built: -
OS/Arch: linux/amd64
Experimental: true
Os dejo aquí la lista típica de Docker de comandos, pero que con vSphere Integrated Containers muchos de ellos aún no funcionan:
root [ /home/VCHmaster/vic ]# docker -H 192.168.1.243:2376 --tls --tlscert='vcontainer-01-cert.pem' --tlskey='vcontainer-01-key.pem'
Usage: docker [OPTIONS] COMMAND [arg...]
docker daemon [ --help | ... ]
docker [ -h | --help | -v | --version ]
A self-sufficient runtime for containers.
Options:
--config=~/.docker Location of client config files
-D, --debug=false Enable debug mode
-H, --host=[] Daemon socket(s) to connect to
-h, --help=false Print usage
-l, --log-level=info Set the logging level
--tls=false Use TLS; implied by --tlsverify
--tlscacert=~/.docker/ca.pem Trust certs signed only by this CA
--tlscert=~/.docker/cert.pem Path to TLS certificate file
--tlskey=~/.docker/key.pem Path to TLS key file
--tlsverify=false Use TLS and verify the remote
-v, --version=false Print version information and quit
Commands:
attach Attach 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 from a container to a HOSTDIR or to STDOUT
create Create a new container
diff Inspect changes 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 a container or image
kill Kill a running container
load Load an image from a tar archive or STDIN
login Register or 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 a container
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 a running container
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save an image(s) to a tar archive
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 a running container
tag Tag an image into a repository
top Display the running processes of a container
unpause Unpause all processes within a container
version Show the Docker version information
wait Block until a container stops, then print its exit code
Run 'docker COMMAND --help' for more information on a command.
3.- Errores conocidos, usando el modo manual con git
3.1- Descargando vSphere Integrated Containers usando git, no recomendado ya que da error
Una vez tenemos las dependencias necesarias, descargaremos vSphere Integrated Containers desde el GitHub oficial de VMware:
root@photon-machine [ ~ ]# git clone https://github.com/vmware/vic
Cloning into 'vic'...
remote: Counting objects: 9040, done.
remote: Total 9040 (delta 0), reused 0 (delta 0), pack-reused 9039
Receiving objects: 100% (9040/9040), 12.68 MiB | 2.08 MiB/s, done.
Resolving deltas: 100% (3006/3006), done.
Checking connectivity... done.
Nos moveremos al directorio llamado vic y ejecutaremos el siguiente comando para compilar VIC
root@photon-machine [ ~ ]# cd vic
root@photon-machine [ ~/vic ]# docker run -v $(pwd):/go/src/github.com/vmware/vic -w /go/src/github.com/vmware/vic golang:1.6 make all
Esto empezará a descargar las imágenes necesarias para compilar la imagen
1.6: Pulling from library/golang
6b8a1ecb2364: Downloading [================> ] 17.29 MB/51.34 MB
d1cc0e6af849: Download complete
9d8bd2efff01: Download complete
0c1214787a4a: Downloading [========================> ] 20.48 MB/42.49 MB
bb0578b5332d: Downloading [====================> ] 23.23 MB/56.9 MB
691f30185e48: Download complete
b0cdc64f4c78: Download complete
c28ee0501b28: Download complete
f72fe3e14051: Downloading [=========> ] 16.76 MB/84.81 MB
caf0ea19d79f: Download complete
66ac92dedf3b: Download complete
303e9e5eb3f2: Download complete
88026d41ca2a: Download complete
a0204124f28f: Download complete
Lamentablemente y después de un rato me aparece el siguiente error:
Building docker-engine-api server...
building imagec...
building tether-windows
# github.com/vmware/vic/cmd/tether
cmd/tether/main_windows.go:31: undefined: err
cmd/tether/main_windows.go:32: undefined: err
cmd/tether/main_windows.go:33: undefined: err
cmd/tether/tether.go:98: undefined: utils.SetHostname
Makefile:200: recipe for target 'bin/tether-windows.exe' failed
make: *** [bin/tether-windows.exe] Error 2
Espero que os guste, y recordar que son los primeros pasos de VMware para una tecnología que seguramente tenga mucho futuro y buen mercado, y vosotros: ¿Qué uso hacéis ahora mismo de Docker/Containers y cómo este paso de VMware os beneficiará?

Que tal Jorge. Muchas gracias por compartir tus conocimientos.
Mira instalé la iso en VMware Workstation y ha quedado bien.
Solamente que al ir con el paso de :
$ docker run -d -p 80:80 vmwarecna/nginx
me da este error
docker: Error response from daemon: driver failed programming external connectivity on endpoint furious_easley (4647b578b90bcf1ef356bd9d06f687b72ab89b4bcbe431d9eeb1530e473cfa00): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use.
Me podrás ayudar con esto?
Saludos
Hola Jorge, ya ha partido con el cambio en el comando de 80 a 8080
docker run -d -p 8080:80 vmwarecna/nginx
Saludos
JCGV