{"id":49532,"date":"2025-05-28T03:30:32","date_gmt":"2025-05-28T03:30:32","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49532"},"modified":"2025-05-28T03:32:13","modified_gmt":"2025-05-28T03:32:13","slug":"gitlab-deploy-container-registry-a-complete-guide","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/gitlab-deploy-container-registry-a-complete-guide\/","title":{"rendered":"GitLab Deploy &#8211; Container Registry &#8211; A Complete Guide"},"content":{"rendered":"\n<p>Here&#8217;s a <strong>complete step-by-step guide<\/strong> for:<\/p>\n\n\n\n<p>\u2705 <strong>Building a Docker image<\/strong><br>\u2705 <strong>Storing (pushing) it to GitLab&#8217;s Container Registry<\/strong><br>\u2705 Using <strong>GitLab CI\/CD pipeline<\/strong> with <strong>GitLab SaaS 18.x<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\ude80 Use Case<\/h2>\n\n\n\n<p>You want to:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build a Docker image from your code<\/li>\n\n\n\n<li>Push it to GitLab\u2019s <strong>Container Registry<\/strong><\/li>\n\n\n\n<li>Use it later for deployment or as base image<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddf1 Prerequisites<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A GitLab project on GitLab.com (SaaS)<\/li>\n\n\n\n<li>GitLab CI\/CD enabled<\/li>\n\n\n\n<li><code>.gitlab-ci.yml<\/code> file created<\/li>\n\n\n\n<li>Dockerfile at the root of your project<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udcdd Step 1: Create a <code>Dockerfile<\/code><\/h2>\n\n\n\n<p>Here\u2019s an example <code>Dockerfile<\/code> for a Java app:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># syntax=docker\/dockerfile:1<\/span>\nFROM openjdk:<span class=\"hljs-number\">17<\/span>-jdk-slim\nCOPY .\/target\/myapp.jar \/app\/myapp.jar\nCMD &#91;<span class=\"hljs-string\">\"java\"<\/span>, <span class=\"hljs-string\">\"-jar\"<\/span>, <span class=\"hljs-string\">\"\/app\/myapp.jar\"<\/span>]\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Make sure your JAR is built to <code>.\/target\/myapp.jar<\/code> via Maven or Gradle.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udce6 Step 2: Understand Your GitLab Container Registry URL<\/h2>\n\n\n\n<p>GitLab automatically enables a private container registry for every project:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">registry.gitlab.com\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">namespace<\/span>&gt;<\/span>\/<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">project<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>\ud83d\udccc Example:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">registry.gitlab.com\/yourusername\/myapp\n<\/code><\/span><\/pre>\n\n\n<p>You can view it in:<br><strong>Project \u2192 Deploy \u2192 Container Registry<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u2705 <code>&lt;namespace><\/code> can be:\n<ul class=\"wp-block-list\">\n<li>A <strong>personal username<\/strong> (<code>yourusername<\/code>)<\/li>\n\n\n\n<li>A <strong>GitLab group<\/strong> (<code>yourgroup<\/code>)<\/li>\n\n\n\n<li>A <strong>GitLab subgroup path<\/strong> (<code>yourgroup\/subgroup<\/code>)<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>\u2705 <code>&lt;project><\/code> is always the <strong>project name<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2699\ufe0f Step 3: Configure <code>.gitlab-ci.yml<\/code><\/h2>\n\n\n\n<p>Here\u2019s a full working example:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">stages:\n  - build\n  - dockerize\n  - push\n\nvariables:\n  IMAGE_TAG: $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA\n\n<span class=\"hljs-comment\"># Build your app (optional if using compiled files)<\/span>\nbuild-job:\n  stage: build\n  image: maven:<span class=\"hljs-number\">3.8<\/span><span class=\"hljs-number\">.7<\/span>-openjdk<span class=\"hljs-number\">-17<\/span>\n  script:\n    - mvn clean package -DskipTests\n\ndockerize-job:\n  stage: dockerize\n  image: docker:latest\n  services:\n    - docker:dind\n  before_script:\n    - <span class=\"hljs-keyword\">echo<\/span> $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY\n  script:\n    - docker build -t $IMAGE_TAG .\n    - docker push $IMAGE_TAG\n  only:\n    - main\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Explanation of Important Variables<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Variable<\/th><th>Purpose<\/th><\/tr><\/thead><tbody><tr><td><code>$CI_REGISTRY<\/code><\/td><td>Points to <code>registry.gitlab.com<\/code><\/td><\/tr><tr><td><code>$CI_REGISTRY_IMAGE<\/code><\/td><td>Your project-specific Docker registry path<\/td><\/tr><tr><td><code>$CI_JOB_TOKEN<\/code><\/td><td>GitLab\u2019s built-in token for authenticating CI jobs<\/td><\/tr><tr><td><code>gitlab-ci-token<\/code><\/td><td>Required user for registry auth inside CI\/CD<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 Step 4: CI\/CD Authentication<\/h2>\n\n\n\n<p>GitLab uses:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Username:<\/strong> <code>gitlab-ci-token<\/code><\/li>\n\n\n\n<li><strong>Password:<\/strong> <code>$CI_JOB_TOKEN<\/code><\/li>\n<\/ul>\n\n\n\n<p>Docker login is done via:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-keyword\">echo<\/span> $CI_JOB_TOKEN | docker login -u gitlab-ci-token --password-stdin $CI_REGISTRY\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d Step 5: View Container in Registry<\/h2>\n\n\n\n<p>After pushing:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to your GitLab project<\/li>\n\n\n\n<li>Navigate to <strong>Deploy > Container Registry<\/strong><\/li>\n\n\n\n<li>You&#8217;ll see the image like: <code>registry.gitlab.com\/yourusername\/myapp:abcdef1<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udee0\ufe0f Step 6: Pull and Use the Image Anywhere<\/h2>\n\n\n\n<p>From any machine (with Docker installed):<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml\">docker login registry.gitlab.com\ndocker pull registry.gitlab.com\/yourusername\/myapp:<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">tag<\/span>&gt;<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd01 Optional: Use <code>latest<\/code> Tag and Versioning<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">variables:\n  IMAGE_TAG: $CI_REGISTRY_IMAGE:latest\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Or for versioning:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">IMAGE_TAG: $CI_REGISTRY_IMAGE:${CI_COMMIT_REF_NAME<span class=\"hljs-comment\">\/\/\\\/\/-}<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Step<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>Write a <code>Dockerfile<\/code><\/td><\/tr><tr><td>2<\/td><td>Identify your GitLab container registry path<\/td><\/tr><tr><td>3<\/td><td>Configure <code>.gitlab-ci.yml<\/code> to build &amp; push<\/td><\/tr><tr><td>4<\/td><td>Use <code>docker login<\/code> with <code>CI_JOB_TOKEN<\/code><\/td><\/tr><tr><td>5<\/td><td>View in <strong>Deploy \u2192 Container Registry<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Great observation! The line:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">services<\/span>:\n  <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">docker<\/span><span class=\"hljs-selector-pseudo\">:dind<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-8\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>is <strong>critical<\/strong> when using Docker <strong>inside GitLab CI\/CD pipelines<\/strong> \u2014 especially when building or pushing Docker images.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d What is <code>docker:dind<\/code>?<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>**dind**<\/code> stands for <strong>Docker-in-Docker<\/strong>.<\/li>\n\n\n\n<li><code>docker:dind<\/code> is a Docker image that runs the Docker <strong>daemon<\/strong> as a background service inside your CI\/CD job.<\/li>\n\n\n\n<li>This allows the <strong>main job container<\/strong> to use Docker commands (<code>docker build<\/code>, <code>docker push<\/code>, etc.), even though it&#8217;s running in an isolated environment.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd27 Why is It Needed?<\/h2>\n\n\n\n<p>GitLab CI\/CD runs your job steps inside a <strong>container<\/strong> (e.g., <code>docker:latest<\/code>), which <strong>doesn&#8217;t have the Docker daemon running by default<\/strong>.<\/p>\n\n\n\n<p>So you need to add:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">services<\/span>:\n  <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">docker<\/span><span class=\"hljs-selector-pseudo\">:dind<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-9\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This launches a background Docker daemon, which your main container can talk to (usually via the socket on <code>localhost<\/code> or Docker host networking).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\uddea Example Use in Context<\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-10\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">dockerize-job:\n  stage: dockerize\n  image: docker:latest        <span class=\"hljs-comment\"># Main container with Docker CLI<\/span>\n  services:\n    - docker:dind             <span class=\"hljs-comment\"># Side container with Docker daemon<\/span>\n  script:\n    - docker build -t $IMAGE_TAG .\n    - docker push $IMAGE_TAG\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-10\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>docker:latest<\/code><\/strong> \u2192 contains the Docker CLI<\/li>\n\n\n\n<li><strong><code>docker:dind<\/code><\/strong> \u2192 provides the Docker daemon to execute <code>docker<\/code> commands<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd10 Important: Secure Docker-in-Docker<\/h2>\n\n\n\n<p>For security and performance:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>GitLab <strong>runs Docker-in-Docker in privileged mode<\/strong> automatically when using their Docker executor.<\/li>\n\n\n\n<li>You may explicitly add (if self-hosted):<\/li>\n<\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">  tags:\n    - docker\n  <span class=\"hljs-attr\">variables<\/span>:\n    DOCKER_TLS_CERTDIR: <span class=\"hljs-string\">\"\"<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-11\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>This disables TLS cert enforcement (GitLab-specific tweak for <code>dind<\/code>).<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u26a0\ufe0f Alternatives to <code>docker:dind<\/code><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Kaniko<\/strong>: A rootless, safer Docker image builder (good for Kubernetes-based runners)<\/li>\n\n\n\n<li><strong>Buildah + Podman<\/strong>: For more secure container builds without daemon<\/li>\n\n\n\n<li><strong>GitLab CI with remote Docker host<\/strong><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 Summary<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><code>docker:dind<\/code><\/th><th>Explanation<\/th><\/tr><\/thead><tbody><tr><td>Docker-in-Docker<\/td><td>Runs Docker daemon inside CI\/CD service<\/td><\/tr><tr><td>Required for<\/td><td><code>docker build<\/code>, <code>docker push<\/code>, etc. in pipeline<\/td><\/tr><tr><td>Used alongside<\/td><td>Docker CLI image (<code>docker:latest<\/code>)<\/td><\/tr><tr><td>Daemon runs in<\/td><td>Background, accessible to main job container<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Here&#8217;s a complete step-by-step guide for: \u2705 Building a Docker image\u2705 Storing (pushing) it to GitLab&#8217;s Container Registry\u2705 Using GitLab CI\/CD pipeline with GitLab SaaS 18.x \ud83d\ude80 Use Case You&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[],"class_list":["post-49532","post","type-post","status-publish","format-standard","hentry","category-uncategorised"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49532","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49532"}],"version-history":[{"count":2,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49532\/revisions"}],"predecessor-version":[{"id":49534,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49532\/revisions\/49534"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49532"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49532"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49532"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}