[PYTHON] Créez un environnement d'exécution pour chaque langue avec boot2docker

Récemment, il est devenu plus courant de développer dans différents langages en fonction de l'objectif tel que go, python, node, j'ai donc décidé de créer un environnement d'exécution sur la VM.

Construisez boot2docker (core Linux) dans VirtualBox et construisez l'environnement d'exécution suivant ・ Go lang · Parce que. js (py)

[Environnement préparé] ・ VirtualBox ・ Vagrant v1.7.1

J'ai aussi VMware Fusion, donc je voulais vérifier cela aussi, Une licence est requise, donc cette fois c'est un laissez-passer. Référence: https://www.vagrantup.com/vmware 79 $ (≒ 9384 yens) Un peu cher ...

Installez Vagrant

Téléchargez et installez dmg à partir du site officiel .

Installation de VirtualBox

Téléchargez et installez dmg pour OS X à partir du site officiel .

Préparation de boot2docker

$ mkdir -p /Users/<USER NAME>/Documents/Vagrant/boot2docker
$ cd /Users/<USER NAME>/Documents/Vagrant/boot2docker

#boot2 démarrage du docker
$ vagrant init mitchellh/boot2docker

Lors de la création d'une image ISO de boot2docker

(Si vous n'avez pas besoin d'ISO, allez au démarrage)

Installez Packer depuis ici

Exécutez les opérations suivantes à partir du terminal après l'installation


$ cd /Users/<USER NAME>/Documents/Vagrant
$ git clone https://github.com/mitchellh/boot2docker-vagrant-box.git
$ cd boot2docker-vagrant-box.git
$ vagrant up
$ vagrant ssh -c 'cd /vagrant && sudo ./build-iso.sh'
$ vagrant destroy --force
$ packer build -only=virtualbox-iso template.json

Lorsque vous faites ce qui précède ・ B2d.iso ・boot2docker_virtualbox.box ・ Boot2docker_virtualbox.iso sera créé.


boot2 démarrage du docker

Définir le transfert de port


$vi Vagrantfile

: Omis
# Create a forwarded port mapping which allows access to a specific port
# within the machine from a port on the host machine. In the example below,
# accessing "localhost:8080" will access port 80 on the guest machine.
# config.vm.network "forwarded_port", guest: 80, host: 8080

# Add port forwarding
config.vm.network "forwarded_port", guest: 80, host: 8080

# Create a private network, which allows host-only access to the machine
# using a specific IP.
# config.vm.network "private_network", ip: "192.168.33.10"
: Omis

docker boot2

$ vagrant up
$ vagrant ssh

スクリーンショット 2014-12-13 22.11.15.png

persistance des données boot2docker

Ensuite, conservez les données créées par boot2docker.

Exécutez la commande suivante sur boot2docker

$ sudo su -
# cat > /var/lib/boot2docker/bootlocal.sh <<EOF
> echo "tar cf /var/lib/boot2docker/userdata.tar . -C /home/docker/" >> /opt/shutdown.sh
> EOF
# chmod +x /var/lib/boot2docker/bootlocal.sh
# sudo reboot

【Vérification】 Ssh depuis Mac

$ vagrant ssh
# pssword : tcuser
#Travailler avec boot2docker
$ touch test
$ ls -l 
  -rw-r--r--    1 docker   staff            0 Dec 13 13:22 test
$ sudo reboot

Ssh à nouveau depuis Mac

$ vagrant ssh
# pssword : tcuser

boot2docker

$ ls -l 
   -rw-r--r--    1 docker   staff            0 Dec 13 13:22 test
#Confirmez qu'il existe

Créer une image docker (Golang)

Comme c'est un gros problème, créez une image à partir du Dockerfile

go lang

$ mkdir golang
$ cd golang
$ vi Dockerfile

#
# Go Dockerfile
#
# https://github.com/dockerfile/go
#
  
# Pull base image.
FROM dockerfile/ubuntu
  
# Install Go
RUN \
  mkdir -p /goroot && \
  curl https://storage.googleapis.com/golang/go1.3.1.linux-amd64.tar.gz | tar xvzf - -C /goroot --strip-components=1
  
# Set environment variables.
ENV GOROOT /goroot
ENV GOPATH /gopath
ENV PATH $GOROOT/bin:$GOPATH/bin:$PATH
  
# Define working directory.
WORKDIR /gopath
  
# Define default command.
CMD ["bash"]

Créer une image docker

$ docker build -t ubuntu/golang .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu/golang       latest              ff635337559a        3 minutes ago       614 MB
dockerfile/ubuntu   latest              c8f87bf54eb2        8 days ago          414.6 MB

Essayez Hello World avec go on docker.


$ docker run -i -p 80:80 -t ubuntu/golang /bin/bash

$ go version
go version go1.3.1 linux/amd64

$ vi testserver.go

package main

import (
  "fmt"
  "net/http"
)

func indexHandler(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello Go lang")
}

func main() {
  http.HandleFunc("/", indexHandler)
  http.ListenAndServe(":80", nil)
}


#Puisqu'il s'agit d'un test, il est exécuté sans compilation
$ go run testserver.go

Accédez avec un navigateur depuis Mac et vérifiez l'exécution

スクリーンショット 2014-12-14 0.10.18.png


Créer une image docker (nodejs, python)

Comme l'environnement python est la base de nodejs, créez uniquement l'environnement Nodejs

$ mkdir ~/nodejs
$ cd ~/nodejs
$ vi Dockerfile


#
# Node.js Dockerfile
#
# https://github.com/dockerfile/nodejs
#

# Pull base image.
FROM dockerfile/python

# Install Node.js
RUN \
  cd /tmp && \
  wget http://nodejs.org/dist/node-latest.tar.gz && \
  tar xvzf node-latest.tar.gz && \
  rm -f node-latest.tar.gz && \
  cd node-v* && \
  ./configure && \
  CXX="g++ -Wno-unused-local-typedefs" make && \
  CXX="g++ -Wno-unused-local-typedefs" make install && \
  cd /tmp && \
  rm -rf /tmp/node-v* && \
  npm install -g npm && \
  echo -e '\n# Node.js\nexport PATH="node_modules/.bin:$PATH"' >> /root/.bashrc

# Define working directory.
WORKDIR /data

# Define default command.
CMD ["bash"]

Créer une image docker


$ docker build -t ubuntu/nodejs .
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu/nodejs       latest              60d7f5969d7a        30 seconds ago      496.6 MB
ubuntu/golang       latest              42a919d3c0ea        23 minutes ago      614 MB
dockerfile/python   latest              f08c82e36872        8 days ago          471 MB
dockerfile/ubuntu   latest              c8f87bf54eb2        8 days ago          414.6 MB

$ docker run -i -p 80:80 -t ubuntu/nodejs /bin/bash

$ npm version
{ http_parser: '1.0',
  node: '0.10.33',
  v8: '3.14.5.9',
  ares: '1.9.0-DEV',
  uv: '0.10.29',
  zlib: '1.2.3',
  modules: '11',
  openssl: '1.0.1j',
  npm: '2.1.12' }

#Créer un serveur
$ vi app.js
var http = require('http');

var server = http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World node.js');
});
server.listen(80);

スクリーンショット 2014-12-14 0.27.25.png

Tester python dans le même environnement

# ubuntu/Exécuter avec nodejs

$ python --version
Python 2.7.6

$ vi index.html
<html>
<body>
    Hello Python
</body>
</html>

$ python -m SimpleHTTPServer 80

スクリーンショット 2014-12-14 0.25.21.png


docker Supprimer les conteneurs inutiles

Étant donné que docker conserve le fichier de différence après le démarrage, supprimez-le lorsqu'il n'est plus nécessaire.

$ docker ps -a
CONTAINER ID        IMAGE                  COMMAND             CREATED             STATUS                      PORTS               NAMES
8675a8897319        ubuntu/nodejs:latest   "/bin/bash"         8 seconds ago       Exited (0) 7 seconds ago                        hungry_carson       
f71e1d22b5e6        ubuntu/golang:latest   "/bin/bash"         56 seconds ago      Exited (0) 54 seconds ago                       prickly_shockley    

#Spécifiez l'ID du conteneur inutile
$ docker rm 8675a8897319 f71e1d22b5e6


#Lors de la suppression d'une image
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu/nodejs       latest              60d7f5969d7a        About an hour ago   496.6 MB
ubuntu/golang       latest              42a919d3c0ea        About an hour ago   614 MB
dockerfile/python   latest              f08c82e36872        8 days ago          471 MB
dockerfile/ubuntu   latest              c8f87bf54eb2        8 days ago          414.6 MB

$ docker rmi < IMAGE ID >

Lors de la suppression simultanée de conteneurs et d'images

# remove container
$ docker rm `docker ps -a -q`

# remove images
$ docker rmi $(docker images | awk '/^<none>/ { print $3 }')

Contrôle de code source sur GitHub pour le développement multi-sites et agile Si vous gérez l'environnement avec Dockerfile, vous pouvez développer des solutions adaptées à la mobilité.

Il est temps que Mac soit la limite, alors j'aimerais créer boot2docker avec du métal nu.

Recommended Posts

Créez un environnement d'exécution pour chaque langue avec boot2docker
Créer un environnement d'exécution Windows Python avec VScode + Remote WSL
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Utiliser Python installé par pyenv pour l'environnement d'exécution PL / Python
Créer un environnement pour le traitement du langage naturel avec Python
Créez un environnement pour l'automatisation des tests avec AirtestIDE (Astuces)
Créer un environnement avec virtualenv
Créez un environnement pour "Deep Learning from scratch" avec Docker
Comportement dans chaque langue lorsque les collouts sont réutilisés avec for
Construction de l'environnement, confirmation simple et test de compétence pour chaque langue
Créez un environnement virtuel avec Python!
Créer un environnement de notebook IPython avec boot2docker
Changez le package à installer pour chaque environnement avec de la poésie
Créer un environnement pour Django x Apache x mod_wsgi avec Vagrant (Ubuntu 16.04)
Créer un Ubuntu de démarrage USB avec un environnement Python pour l'analyse des données
Créons un environnement virtuel pour Python
[Python] Créez un environnement virtuel avec Anaconda
Créer un environnement Python + uWSGI + Nginx avec Docker
Limiter ssh avec iptables pour chaque utilisateur
Mémorandum de syntaxe fréquemment utilisé pour chaque langue
Changer le module à charger pour chaque environnement d'exécution en Python
Créer un environnement de développement de langage C avec un conteneur
Préparer l'environnement d'exécution de Python3 avec Docker
Préparer un environnement de langage de programmation pour l'analyse des données
Créer un LINE BOT avec Minette pour Python
Construire un environnement Anaconda pour Python avec pyenv
Créez l'environnement de calcul le plus puissant avec Sympy + Jupyter
Créer un environnement virtuel avec conda avec Python
Créer un environnement de construction python3 avec Sublime Text3
Diverses commandes pour créer un environnement avec Apache
Créez un tableau de bord pour les appareils réseau avec Django!
Créer un environnement de Nginx + uWSGI + Python (Django) avec docker
Traitement d'image avec la configuration de l'environnement Python pour Windows
[Python] Créer un environnement d'exécution de tâches asynchrone + environnement de surveillance
Commandes pour créer un environnement python3 avec virtualenv
Rollback DB pour chaque test avec Flask + SQLAlchemy
Essayez de créer un environnement pour MayaPython avec VisualStudioCode
Créer un environnement d'exécution Python sur IBM i
Créer un environnement d'exécution python avec VS Code
J'ai essayé de créer un environnement d'apprentissage amélioré pour Othello avec Open AI gym
Comment définir l'environnement de développement pour chaque projet avec VSCode + extension Python + Miniconda
Mettre en place un environnement de développement pour le traitement du langage naturel
Extraire N échantillons pour chaque groupe avec Pandas DataFrame
Python 3.4 Créer un environnement Windows7-64bit (pour l'analyse des séries chronologiques financières)
Créez un environnement virtuel avec Anaconda installé via Pyenv
Créez un environnement de développement python avec vagrant + ansible + fabric
[Linux] WSL2 Créer un environnement pour laravel7 avec Ubuntu 20.04
environnement en ligne de serveur de code (2) Créer un réseau virtuel avec Boto3
Créer un environnement pour MkDocs sur Amazon Linux (tentative)
Créer une couche pour AWS Lambda Python dans Docker
Préparation de l'environnement d'exécution de PyTorch avec Docker Novembre 2019
Créez un environnement Open AI Gym avec Bash sur Windows 10