如何 运行 docker-compose inside docker in docker which 运行s inside gitlab-运行ner container?
How to run docker-compose inside docker in docker which runs inside gitlab-runner container?
我在 docker 容器中有一个 gitlab 运行ner,运行如果我 运行 像 nginx 这样的图像就没问题。但是现在我试图 运行 docker in docker (dind) inside the gitlab 运行ner 我想 运行 docker-compose inside笨蛋。 Docker 信息 运行 很好,但是如果我尝试 运行 docker-compose,我会收到权限被拒绝的错误。
我link编辑了/usr/local/bin/docker-compose文件到gitlab运行ner容器中,在运行nerconfig.toml文件的volumes参数中输入.
如果我尝试 运行 sudo 它以未知命令错误结束,所以这不是解决方案。
我是否需要 link 一些文件或太多的嵌套容器?
如果你正在使用 dind,这意味着 docker 工作正常,现在你只需要安装 docker-compose 这只是简单的 python 包,你可以在before_script
.gitlab-ci.yml
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
stages:
- test
before_script:
- apk add --no-cache py-pip
- pip install docker-compose
- docker info
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN docker.registry.com
test:
stage: test
script:
- cp .env.sample .env # copy environement variable
- docker-compose up -d
# run some test here
为了拥有 docker-compose
,您需要为图像 docker 安装它,它的版本为 18.09.6,在撰写本文时构建 481bc77。
因为 docker-compose version 1.24.0, you also need the following dependencies for docker-compose to be installed on alpine:
apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
这是一个示例 .gitlab-ci.yml
:
image: docker:stable
stages:
- deploy
services:
- docker:dind
before_script:
- apk update
- apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
- pip install docker-compose
deploy_app:
stage: deploy
script:
- docker-compose down
- docker-compose up -d
运行 docker-compose inside docker in docker 的最佳选择是使用 docker/compose 图像,如下所示:
job-x:
image: docker/compose
script:
- docker-compose version
一个真实而完整的例子是使用 docker-compose 在服务器上部署特定安装的运行器,如下所示:
image: docker:stable
services:
- docker:dind
stages:
- build
- deploy
before_script:
# resolve TAG
# Default branch leaves tag latest
# All other branches are tagged with the escaped branch name (commit ref slug)
- |
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
TAG="latest"
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = '$TAG'"
else
TAG="$CI_COMMIT_REF_SLUG"
echo "Running on branch '$CI_COMMIT_BRANCH': tag = $TAG"
fi
docker-build:
stage: build
script:
- echo "user ${CI_REGISTRY_USER}"
- echo "registry ${CI_REGISTRY}"
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from "$CI_REGISTRY_IMAGE:${TAG}" -t "$CI_REGISTRY_IMAGE:${TAG}" .
- docker push "$CI_REGISTRY_IMAGE:${TAG}"
when: manual
deploy-staging:
image: docker/compose
stage: deploy
variables:
IMAGE: $CI_REGISTRY_IMAGE
TAG: $TAG
HOST_PORT: $HOST_PORT
script:
- docker-compose version
- docker-compose -f docker-compose.yml up -d --no-build
when: manual
docker-compose.yml 文件看起来像:
version: "3.7"
services:
web:
image: $IMAGE:$TAG
build:
context: .
ports:
- $HOST_PORT:8000
我在 docker 容器中有一个 gitlab 运行ner,运行如果我 运行 像 nginx 这样的图像就没问题。但是现在我试图 运行 docker in docker (dind) inside the gitlab 运行ner 我想 运行 docker-compose inside笨蛋。 Docker 信息 运行 很好,但是如果我尝试 运行 docker-compose,我会收到权限被拒绝的错误。
我link编辑了/usr/local/bin/docker-compose文件到gitlab运行ner容器中,在运行nerconfig.toml文件的volumes参数中输入.
如果我尝试 运行 sudo 它以未知命令错误结束,所以这不是解决方案。
我是否需要 link 一些文件或太多的嵌套容器?
如果你正在使用 dind,这意味着 docker 工作正常,现在你只需要安装 docker-compose 这只是简单的 python 包,你可以在before_script
.gitlab-ci.yml
image: docker:latest
services:
- docker:dind
variables:
DOCKER_DRIVER: overlay2
stages:
- test
before_script:
- apk add --no-cache py-pip
- pip install docker-compose
- docker info
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN docker.registry.com
test:
stage: test
script:
- cp .env.sample .env # copy environement variable
- docker-compose up -d
# run some test here
为了拥有 docker-compose
,您需要为图像 docker 安装它,它的版本为 18.09.6,在撰写本文时构建 481bc77。
因为 docker-compose version 1.24.0, you also need the following dependencies for docker-compose to be installed on alpine:
apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
这是一个示例 .gitlab-ci.yml
:
image: docker:stable
stages:
- deploy
services:
- docker:dind
before_script:
- apk update
- apk add py-pip python3-dev libffi-dev openssl-dev gcc libc-dev make
- pip install docker-compose
deploy_app:
stage: deploy
script:
- docker-compose down
- docker-compose up -d
运行 docker-compose inside docker in docker 的最佳选择是使用 docker/compose 图像,如下所示:
job-x:
image: docker/compose
script:
- docker-compose version
一个真实而完整的例子是使用 docker-compose 在服务器上部署特定安装的运行器,如下所示:
image: docker:stable
services:
- docker:dind
stages:
- build
- deploy
before_script:
# resolve TAG
# Default branch leaves tag latest
# All other branches are tagged with the escaped branch name (commit ref slug)
- |
if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
TAG="latest"
echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = '$TAG'"
else
TAG="$CI_COMMIT_REF_SLUG"
echo "Running on branch '$CI_COMMIT_BRANCH': tag = $TAG"
fi
docker-build:
stage: build
script:
- echo "user ${CI_REGISTRY_USER}"
- echo "registry ${CI_REGISTRY}"
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build --build-arg BUILDKIT_INLINE_CACHE=1 --cache-from "$CI_REGISTRY_IMAGE:${TAG}" -t "$CI_REGISTRY_IMAGE:${TAG}" .
- docker push "$CI_REGISTRY_IMAGE:${TAG}"
when: manual
deploy-staging:
image: docker/compose
stage: deploy
variables:
IMAGE: $CI_REGISTRY_IMAGE
TAG: $TAG
HOST_PORT: $HOST_PORT
script:
- docker-compose version
- docker-compose -f docker-compose.yml up -d --no-build
when: manual
docker-compose.yml 文件看起来像:
version: "3.7"
services:
web:
image: $IMAGE:$TAG
build:
context: .
ports:
- $HOST_PORT:8000