In letzter Zeit ist es üblicher geworden, je nach Zweck wie go, python oder node in verschiedenen Sprachen zu entwickeln. Daher habe ich beschlossen, eine Ausführungsumgebung auf der VM zu erstellen.
Erstellen Sie boot2docker (Core Linux) in VirtualBox und erstellen Sie die folgende Ausführungsumgebung ・ Geh lang · Weil. js (py)
[Vorbereitete Umgebung] ・ VirtualBox ・ Vagrant v1.7.1
Ich habe auch VMware Fusion, also wollte ich das auch überprüfen. Eine Lizenz ist erforderlich, diesmal ist es also ein Pass. Referenz: https://www.vagrantup.com/vmware $ 79 (,3 9.384 Yen) Ein wenig teuer ...
Laden Sie dmg von der offiziellen Website herunter und installieren Sie es.
Laden Sie dmg für OS X von der offiziellen Website herunter und installieren Sie es.
$ mkdir -p /Users/<USER NAME>/Documents/Vagrant/boot2docker
$ cd /Users/<USER NAME>/Documents/Vagrant/boot2docker
#boot2 docker boot
$ vagrant init mitchellh/boot2docker
(Wenn Sie kein ISO benötigen, gehen Sie zum Booten.)
Installieren Sie Packer von hier
Führen Sie nach der Installation Folgendes vom Terminal aus
$ 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
Wenn Sie das oben genannte tun ・ B2d.iso ・boot2docker_virtualbox.box ・ Boot2docker_virtualbox.iso wird erstellt.
Stellen Sie den Port vorwärts
$vi Vagrantfile
: Weggelassen
# 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"
: Weggelassen
boot2 docker
$ vagrant up
$ vagrant ssh
Behalten Sie als Nächstes die von boot2docker erstellten Daten bei.
Führen Sie den folgenden Befehl auf boot2docker aus
$ 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
【Bestätigung】 SSH von Mac
$ vagrant ssh
# pssword : tcuser
#Arbeiten mit boot2docker
$ touch test
$ ls -l
-rw-r--r-- 1 docker staff 0 Dec 13 13:22 test
$ sudo reboot
Ssh wieder von Mac
$ vagrant ssh
# pssword : tcuser
boot2docker
$ ls -l
-rw-r--r-- 1 docker staff 0 Dec 13 13:22 test
#Bestätigen Sie, dass es existiert
Da es eine große Sache ist, erstellen Sie ein Bild aus der Docker-Datei
$ 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"]
Docker-Image erstellen
$ 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
Versuchen Sie Hello World mit 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)
}
#Da es sich um einen Test handelt, wird er ohne Kompilierung ausgeführt
$ go run testserver.go
Greifen Sie mit einem Browser vom Mac aus zu und überprüfen Sie die Ausführung
Da die Python-Umgebung die Basis von nodejs ist, erstellen Sie nur die Nodejs-Umgebung
$ 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"]
Docker-Image erstellen
$ 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' }
#Server erstellen
$ 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);
Testen Sie Python in derselben Umgebung
# ubuntu/Führen Sie mit nodejs aus
$ python --version
Python 2.7.6
$ vi index.html
<html>
<body>
Hello Python
</body>
</html>
$ python -m SimpleHTTPServer 80
Da Docker die Differenzdatei nach dem Start aufbewahrt, löschen Sie sie, wenn sie nicht mehr benötigt wird.
$ 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
#Geben Sie die ID des nicht benötigten Containers an
$ docker rm 8675a8897319 f71e1d22b5e6
#Beim Löschen eines Bildes
$ 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 >
Beim gleichzeitigen Löschen von Containern und Bildern
# remove container
$ docker rm `docker ps -a -q`
# remove images
$ docker rmi $(docker images | awk '/^<none>/ { print $3 }')
Quellcodeverwaltung auf GitHub für standortübergreifende und agile Entwicklung Wenn Sie die Umgebung mit Dockerfile verwalten, können Sie eine für die Mobilität geeignete Entwicklung entwickeln.
Es ist an der Zeit, dass der Mac das Limit erreicht, also möchte ich boot2docker mit Bare Metal bauen.
Recommended Posts