Wat is Docker-in-Docker (DinD)?
Docker-in-Docker (DinD) is een veelgebruikte techniek in GitLab CI/CD pipelines op Kubernetes om Docker-opdrachten binnen Docker-containers uit te voeren.
c2d en specifiek de c2d-xtop
omgeving, niet de RWS gsd ontwikkelomgeving, om de procedure voor het creëren en onderhouden
van deze Ansible uitvoering omgeving te beschrijven.
Echter, je kunt de stappen aanpassen voor elke machine met Docker, Python, en
Ansible geïnstalleerd.c2platform/ansibleAls je DinD wilt gebruiken om bijvoorbeeld een uitvoering omgeving te bouwen, kan het moeilijk zijn om de pijplijn te ontwikkelen door middel van trial-and-error. Commit en push en zie de resultaten.
Het is zinvol om de code lokaal te ontwikkelen en te testen.
Deze handleiding laat zien hoe je lokaal kunt simuleren wat er in de pijplijn gebeurt
door een container dind-service te starten die een Docker-service aanbiedt en waarmee je
Docker kunt gebruiken binnen een container.
Je kunt c2d-xtop gebruiken om te experimenteren met DinD. Voer de onderstaande command uit
om dit te maken. Zie het playbook plays/dev/xtop.yml en de configuratie
group_vars/xtop/main.yml.
vagrant up c2d-xtop
Het playbook start twee containers, eentje genaamd dind-service, en eentje genaamd docker.
vagrant@c2d-xtop:~$ docker ps
CONTAINER ID   IMAGE                                                   COMMAND                  CREATED          STATUS          PORTS           NAMES
5a8783ee37f4   docker:20.10.16                                         "docker-entrypoint.s…"   27 minutes ago   Up 27 minutes                   docker
8316dd08990c   registry.gitlab.com/c2platform/docker/c2d/dind:latest   "dockerd-entrypoint.…"   38 minutes ago   Up 38 minutes   2375-2376/tcp   dind-service
vagrant@c2d-xtop:~$
Binnen de docker container kun je Docker-commando’s uitvoeren.
vagrant@c2d-xtop:~$ docker exec -it docker sh
/ # docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:67211c14fa74f070d27cc59d69a7fa9aeff8e28ea118ef3babc295a0428a6d21
Status: Downloaded newer image for ubuntu:latest
docker.io/library/ubuntu:latest
/ #
Als je de c2d-gitlab node hebt gemaakt, kun je die ook gebruiken
/ # docker pull registry.c2platform.org/c2platform/gitlab-docker-build:latest
latest: Pulling from c2platform/gitlab-docker-build
Digest: sha256:9a1289a3ae53088de59893efc9b998de1d6404bb99c7218119ea8d6bc22d9367
Status: Image is up to date for registry.c2platform.org/c2platform/gitlab-docker-build:latest
registry.c2platform.org/c2platform/gitlab-docker-build:latest
/ #
Setup Project Directories and Install Ansible
---
- src: ../c2/docker
  target: /home/vagrant/images
export IMAGE_NAME="gitlab-runner"
export IMAGE_VERSION="0.0.1"
export IMAGE="$IMAGE_NAME:$IMAGE_VERSION"
docker build -t $IMAGE . | tee build.log
docker run -it --rm $IMAGE /bin/bash
(c2) vagrant@c2d-xtop:~/images/gitlab-runner$ docker run -it --rm $IMAGE
root@2f3b45e29a2e:/# ansible --version
ansible [core 2.15.0]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /root/.virtualenv/c2d/lib/python3.10/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /root/.virtualenv/c2d/bin/ansible
  python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/root/.virtualenv/c2d/bin/python)
  jinja version = 3.1.3
  libyaml = True
root@2f3b45e29a2e:/# ansible-builder --version
3.0.0
root@2f3b45e29a2e:/# git --version
git version 2.34.1
Test met RWS
vagrant provision c2d-xtop
vagrant ssh c2d-xtop
docker ps
source ~/.virtualenv/c2d/bin/activate
git clone https://gitlab.com/c2platform/rws/ansible-execution-environment.git
cd ansible-execution-environment
rm -rf context
ansible-builder create
ansible-builder build
https://docs.docker.com/go/buildx/
---
collections:
  - name: ansible.windows
    version: 1.14.0
  - name: community.windows
    version: 2.0.0
  - name: awx.awx
    version: 22.4.0
  - name: checkmk.general
    version: 3.0.0
  - name: c2platform.core
    version: 1.0.8
  # - name: https://gitlab.com/c2platform/c2/ansible-inventory-collection-core.git
  #  type: git
  #  version: master
  - name: c2platform.mgmt
    version: 1.0.2
  #- name: https://gitlab.com/c2platform/c2/ansible-inventory-collection-mgmt.git
  #  type: git
  #  version: master
  - name: c2platform.gis
    version: 1.0.4
  #- name: https://gitlab.com/c2platform/rws/ansible-collection-gis.git
  #  type: git
 #   version: master
  - name: c2platform.wincore
    version: 1.0.5
  #- name: https://gitlab.com/c2platform/rws/ansible-collection-wincore.git
  #  type: git
  #  version: master
  - name: community.postgresql
    version: 2.4.3
(c2d) root@8ad3b66959cf:/ansible-execution-environment# rm -rf context
(c2d) root@8ad3b66959cf:/ansible-execution-environment# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
(c2d) root@8ad3b66959cf:/ansible-execution-environment# ansible-builder create
Complete! De buildcontext is te vinden op: /ansible-execution-environment/context
(c2d) root@8ad3b66959cf:/ansible-execution-environment# ansible-builder build
Running command:
docker build -f context/Dockerfile -t ansible-execution-env:latest context
Complete! De buildcontext is te vinden op: /ansible-execution-environment/context
(c2d) root@8ad3b66959cf:/ansible-execution-environment# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ansible-execution-env latest c26229e6f4d7 2 minutes ago 632MB
Binnen c2d-xtop, voer het script /vagrant/scripts/penv.sh uit
source /vagrant/scripts/penv.sh
Installeer Ansible Builder en Navigator:
pip install ansible-builder
pip install ansible-navigator
cd /tmp
git clone git@gitlab.com:c2platform/rws/ansible-execution-environment.git
cd ansible-execution-environment
rm -rf context
ansible-builder build --tag whatever_ee
ansible-navigator run test_localhost.yml \
  --execution-environment-image whatever_ee --mode stdout
(c2) vagrant@c2d-xtop:/ansible-execution-environment$ ansible-navigator run test_localhost.yml \
  --execution-environment-image whatever_ee --mode stdout
-----------------------------------------------------
Overzicht uitvoering omgeving afbeelding en ophaalbeleid
-----------------------------------------------------
Naam uitvoering omgeving afbeelding:     whatever_ee:latest
Label uitvoering omgeving afbeelding:    latest
Ophaalargumenten voor uitvoering omgeving: None
Ophaalbeleid voor uitvoering omgeving:   tag
Ophaling van uitvoering omgeving nodig:  True
-----------------------------------------------------
Bijwerken van de uitvoering omgeving
-----------------------------------------------------
Uitvoeren van het commando: docker pull whatever_ee:latest
[WAARSCHUWING]: Er is geen inventaris geparsed, alleen impliciete localhost is beschikbaar
[WAARSCHUWING]: verstrekte hosts lijst is leeg, alleen localhost is beschikbaar. Let op dat
de impliciete localhost niet overeenkomt met 'all'
PLAY [Verzamel en print lokale Ansible / Python feitjes] ***************************
TASK [Feitjes verzamelen] *********************************************************
ok: [localhost]
TASK [Print Ansible versie] *******************************************************
ok: [localhost] => {
    "ansible_version": {
        "full": "2.15.0",
        "major": 2,
        "minor": 15,
        "revision": 0,
        "string": "2.15.0"
    }
}
TASK [Print Ansible Python] *******************************************************
ok: [localhost] => {
    "ansible_playbook_python": "/usr/bin/python3"
}
TASK [Print Ansible Python versie] ************************************************
ok: [localhost] => {
    "ansible_python_version": "3.11.4"
}
PLAY RECAP *********************************************************************
localhost                  : ok=4    veranderd=0    onbereikbaar=0    gefaald=0    overgeslagen=0    gered=0    genegeerd=0
Docker-in-Docker (DinD) is een veelgebruikte techniek in GitLab CI/CD pipelines op Kubernetes om Docker-opdrachten binnen Docker-containers uit te voeren.
Was deze pagina nuttig?
Fijn om te horen! Vertel ons alstublieft hoe we kunnen verbeteren.
Jammer om dat te horen. Vertel ons alstublieft hoe we kunnen verbeteren.