Docker-Compose - рандомизированное сетевое имя - PullRequest
0 голосов
/ 21 декабря 2018

У меня есть проект, который имеет 3 контейнера и будет выполняться нашей системой сборки Jenkins.Я сделал так, чтобы 3 контейнера могли обмениваться данными друг с другом, и теперь мне нужно выяснить, происходят ли одновременные сборки, как мне использовать своего рода UUID или случайно сгенерированное сетевое имя с docker-compose?Мне нужно это, чтобы они случайно не общались с другими одноименными контейнерами из другой сборки.

Есть ли способ создать случайно сгенерированное имя в файле docker-compose?

1 Ответ

0 голосов
/ 22 декабря 2018

Предполагая, что ваш CI извлекает ваш источник из git, вы можете использовать git-commit для использования в качестве уникального идентификатора для ваших контейнеров / изображений / сетей;например,

# get the sha of the commit that you're building from
export GIT_COMMIT=$(git rev-parse --short HEAD)

# build your image
docker build -t myimage:git-${GIT_COMMIT} .

# create your network
docker network create nw_${GIT_COMMIT}

# start your container
docker run -d --network=nw_${GIT_COMMIT} --name=foo_${GIT_COMMIT} myimage:git-${GIT_COMMIT}

С помощью docker compose

Установить имя проекта на основе текущего git-commit;установка переменной среды COMPOSE_PROJECT_NAME переопределит имя проекта по умолчанию (которое основано на имени текущего каталога).Также установите переменную окружения GIT_COMMIT, чтобы ее можно было использовать отдельно.

export COMPOSE_PROJECT_NAME=myproject_$(git rev-parse --short HEAD)
export GIT_COMMIT=$(git rev-parse --short HEAD)

Создать docker-compose.yml и Dockerfile

version: "3.7"
services:
  web:
    build:
      context: .
      args:
          GIT_COMMIT:
    image: myproject/web:${GIT_COMMIT:-unknown}

Dockerfile:

FROM nginx:alpine
ARG GIT_COMMIT=unknown
RUN echo "This is build ${GIT_COMMIT}" > /usr/share/nginx/html/index.html

Очистить все перед запуском (другие экземпляры того же проекта; старые версии образа, тома);

docker-compose down --rmi=all --volumes --remove-orphans

Stopping myproject_a9f48b5_web_1 ... done
Removing myproject_a9f48b5_web_1 ... done
Removing network myproject_a9f48b5_default
Removing image myproject/web:a9f48b5

Построить образ (ы) для вашей службы

docker-compose build

Building web
Step 1/3 : FROM nginx:alpine
 ---> 315798907716
Step 2/3 : ARG GIT_COMMIT=unknown
 ---> Running in 78515fcdd331
Removing intermediate container 78515fcdd331
 ---> bb2414522a62
Step 3/3 : RUN echo "This is build ${GIT_COMMIT}" > /usr/share/nginx/html/index.html
 ---> Running in 9bf1f2023915
Removing intermediate container 9bf1f2023915
 ---> 3debb1a96b63

Successfully built 3debb1a96b63
Successfully tagged myproject/web:a9f48b5

И запустите свой стек;

docker-compose up -d
Creating network "myproject_a9f48b5_default" with the default driver
Creating myproject_a9f48b5_web_1 ... done

Найдите случайный порт, который был назначен службе web;

docker-compose port web 80
0.0.0.0:32770

И подключитесь к нему:

curl localhost:32770
This is build a9f48b5
...