Тренировка алгоритмики(задачки) -
https://projecteuler.net/
http://www.spoj.com/
https://projecteuler.net/
http://www.spoj.com/
# service docker stop docker stop/waiting # docker -d -l debug &
# /etc/default/docker DOCKER_OPTS="--log-level=fatal"
$ docker network ls NETWORK ID NAME DRIVER SCOPE 77bf6b8ff5cf bridge bridge local 9aac4cefdaf1 host host local b8aa8b4a699f none null local
$ docker run -d --net none busybox sleep 1000Внутри у такого контейнера только один сетевой интерфейс lo, который лупбек - тоесть это только локалхост.
$ docker network create --driver bridge my_bridge_network
$ docker network inspect my_bridge_network
[
{
"Name": "my_bridge_network",
...
"IPAM": {
"Driver": "default",
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
...
}
]
$ docker run -d --name container_3 --net my_bridge_network busybox sleep 1000
Но мы можем подключать контейнеры к нескольким сетям, так контейнер который запущен был в другой сети сможет общаться с контейнера с сети по умолчанию
$ docker network connect bridge container_3Вот так контейнер получил, доступ к контейнерам с другой сети. Так он получил еще +один сетевой интерфейс eth1.
$ docker network disconnect bridge container_3Так сетевой интерфейс eth1 удаляется у контейнера.
# apt-get install bridge-utils # yum install bridge-utils
# brctl show docker0 bridge name bridge id STP enabled interfaces docker0 8000.56847afe9799 noСейчас мы не видим ни одного интерфейса подключенного к мосту - это означает, что у нас нет запущенных образов:)
echo "\ #Test for networking module \ FROM ubuntu:15.04 \ RUN apt-get update && apt-get install -y iputils-ping traceroute \ ENTRYPOINT /bin/bash " > Dockerfile # # docker build -t="net-img" .И запустим с него два контейнера
# docker run -it --name=net1 net-img #Ctrl+P+Q # docker run -it --name=net2 net-img #Ctrl+P+Q # # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d37d347f84d8 net-img:latest "/bin/bash" 0 minutes ago Up 0 minutes c0e85b69ecce net-img:latest "/bin/bahs" 1 minutes ago Up 1 minutesВураля и у нас появились два дополнительных сетевых интерфейса, которые завязаны на наш докеровский мост:
# brctl show docker0
bridge name bridge id STP enabled interfaces
docker0 8000.56847afe9799 no veth095066e
vethe7516ef
# ifconfig
...
veth095066e Link encap:Ethernet HWaddr ...
...
vethe7516ef Link encap:Ethernet HWaddr ...
$ sudo docker run -d --name db training/postgres
$ sudo docker run -d -P --name web --link db:db training/webapp python app.py
Залинкованные порты описаны в переменных окружения контейнера, откуда апликация их и может достать:
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5432_TCP=tcp://172.17.0.5:5432
DB_PORT_5432_TCP_PROTO=tcp
DB_PORT_5432_TCP_PORT=5432
DB_PORT_5432_TCP_ADDR=172.17.0.5
А вообще если конкретный контейнер даже если не предоставляет никаких переменных окружения, то линкование, добавляет в /etc/hosts по имени прилинкованного контейнера его ip адрес, и мы можем использовать это имя для сетевых конектов.EXPOSE 80Потом при запуске контейнера нужно сделать собственно привязку на конкретный порт:
root# docker run -d -p 5000:80 --name=web1 apache-img
root# docker port web1 80/tcp -> 0.0.0.0:50000.0.0.0 - кстати означает, что порт 5000 подвязан на все сетевые интерфейсы хоста, которые имеют адресс IP4. Если нужно на конкретный, то нужно кроме порта указывать и конкретный ip.
root# docker run -d -p 192.168.56.50:5001:80/udp --name=web2 apache-img
root# docker run -d -P --name=web-random-host-port apache-img
root# strace netstat -atl 2>&1 | grep services
open("/etc/services", O_RDONLY|O_CLOEXEC) = 4
read(4, "# /etc/service:\n# $Id: services"..., 4096) = 4096
Как видим открывает и читает.git branch -u remotename/remotebranchname localbranchnameили
git branch --set-upstream-to=remotename/remotebranchname localbranchname