Предполагая, что ваш 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