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 ...
Téléchargez et installez dmg à partir du site officiel .
Téléchargez et installez dmg pour OS X à partir du site officiel .
$ mkdir -p /Users/<USER NAME>/Documents/Vagrant/boot2docker
$ cd /Users/<USER NAME>/Documents/Vagrant/boot2docker
#boot2 démarrage du docker
$ vagrant init mitchellh/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éé.
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
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
Comme c'est un gros problème, créez une image à partir du Dockerfile
$ 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
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);
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
É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