{"id":3446,"date":"2024-02-16T16:31:18","date_gmt":"2024-02-16T16:31:18","guid":{"rendered":"https:\/\/code2deploy.com\/blog\/?p=3446"},"modified":"2024-02-20T20:08:12","modified_gmt":"2024-02-20T20:08:12","slug":"security-tips-for-docker","status":"publish","type":"post","link":"https:\/\/code2deploy.com\/blog\/security-tips-for-docker\/","title":{"rendered":"Security Tips for Docker"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Keep Everything Updated:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Just like updating apps on your smartphone, regularly update your Docker containers and tools.<\/li>\n\n\n\n<li>Think of outdated apps &#8211; they might not work well. Similarly, old Docker containers can have issues.<\/li>\n\n\n\n<li>Use &#8220;docker pull&#8221; to get the latest and secure versions, just like updating apps from the app store.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Start Small with Images:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Begin with minimal base images, like starting with a clean house instead of a fully furnished one.<\/li>\n\n\n\n<li>Minimal images have fewer entry points for potential issues.<\/li>\n\n\n\n<li>It&#8217;s like packing only what you need for a trip instead of carrying unnecessary baggage.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Scan for Vulnerabilities:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Scan your Docker images for known vulnerabilities before using them.<\/li>\n\n\n\n<li>It&#8217;s like checking ingredients before cooking to ensure they&#8217;re safe.<\/li>\n\n\n\n<li>Identifying any issues beforehand prevents problems later.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Limit Superpowers:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Run containers with the least privilege, similar to giving a superhero only the powers they need for a task.<\/li>\n\n\n\n<li>Using the root user inside containers can be risky, like letting a superhero run wild.<\/li>\n\n\n\n<li>Limiting privileges ensures containers follow the rules and reduces unintended consequences.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Separate Neighborhoods:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Isolate containers using Docker&#8217;s network features to control communication.<\/li>\n\n\n\n<li>It&#8217;s like setting up boundaries between different neighborhoods in a city to maintain order and security.<\/li>\n\n\n\n<li>Prevents unauthorized access between containers.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Write Secure Instructions:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Follow best practices when writing Dockerfiles to ensure container security.<\/li>\n\n\n\n<li>It&#8217;s like following a well-structured recipe to make sure your dish is safe to eat.<\/li>\n\n\n\n<li>Best practices include using &#8216;COPY&#8217; instead of &#8216;ADD&#8217; and avoiding unnecessary software.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Protect Secrets:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Avoid hardcoding sensitive information in Dockerfiles or environment variables.<\/li>\n\n\n\n<li>Use secure methods like Docker Secrets or external tools for secret management.<\/li>\n\n\n\n<li>It&#8217;s like keeping valuable treasures in a secure vault to prevent unauthorized access.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Trim Unnecessary Tools:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Remove unnecessary tools and files from your images to reduce potential vulnerabilities.<\/li>\n\n\n\n<li>It&#8217;s like securing a fortress by closing unnecessary doors and windows to prevent intruders.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Guard Container Behavior:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Use tools like AppArmor or SELinux to create controls for containers to prevent unwanted actions.<\/li>\n\n\n\n<li>It&#8217;s like having traffic rules for containers to ensure they behave properly within the system.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Trust Only Verified Images:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Enable Docker Content Trust to ensure only signed and verified images are used.<\/li>\n\n\n\n<li>It&#8217;s like checking the seal on a package to ensure its authenticity before using it.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-large-font-size wp-elements-6d8aca55b01f5357acde74761c8ba4f4 wp-block-paragraph\"><strong>Some Basic Example:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Keep Everything Updated:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Open your terminal or command prompt and run the following command:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>docker pull alpine<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This command fetches the latest version of the Alpine Linux image, ensuring you have the most up-to-date base image for your containers.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Start Small with Images:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Instead of using a larger base image like Ubuntu, opt for Alpine Linux for your Docker containers. You can create a Dockerfile like this:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>FROM alpine<br># Your Dockerfile instructions here<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Scan for Vulnerabilities:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Use a tool like Trivy to scan a Docker image for vulnerabilities. For example:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>trivy image &lt;image_name&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This command will scan the specified Docker image for vulnerabilities and provide a report on any issues found.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n\n\n\n<li><strong>Limit Superpowers:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: When creating a Docker container, specify a non-root user in your Dockerfile using the USER directive. For instance:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>FROM alpine<br>USER nobody<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Separate Neighborhoods:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Create Docker networks to isolate containers. For instance:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>docker network create my_network<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Then, when running containers, specify the network:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>docker run &#8211;network=my_network &lt;image_name&gt;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Write Secure Instructions:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: When copying files into a Docker image, use the COPY command instead of ADD to avoid unintended behavior. For example:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>COPY app.py \/app\/<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Protect Secrets:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Use Docker Secrets to manage sensitive information. For instance:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>docker secret create db_password \/path\/to\/secret_file<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Then, use the secret in your Docker service:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>docker service create &#8211;secret db_password &#8230;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trim Unnecessary Tools:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: When creating a Docker image, remove unnecessary files and tools. For instance, instead of including debugging tools, exclude them from the final image.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Guard Container Behavior:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Configure AppArmor or SELinux profiles for Docker containers to restrict their actions. For example, you can define a profile that allows a container to only access specific files or directories.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Trust Only Verified Images:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Practical Example: Enable Docker Content Trust globally or per repository. For example:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>export DOCKER_CONTENT_TRUST=1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>This ensures that only signed and verified images are pulled and used in your Docker environment.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">These practical examples demonstrate how to implement each security tip in Docker environments. By following these practices, you can enhance the security of your Docker containers and reduce the risk of vulnerabilities.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Conclusion:<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Staying updated on Docker security best practices is crucial, like regularly updating your car with the latest parts to ensure it runs smoothly. Continuous learning helps you adapt to changing threats and maintain a secure Docker environment.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Keep Everything Updated: Start Small with Images: Scan for Vulnerabilities: Limit Superpowers: Separate Neighborhoods: Write Secure Instructions: Protect Secrets: Trim Unnecessary Tools: Guard Container Behavior: Trust Only Verified Images: Some Basic Example: docker pull alpine FROM alpine# Your Dockerfile instructions here trivy image &lt;image_name&gt; FROM alpineUSER nobody docker network create my_network docker run &#8211;network=my_network &lt;image_name&gt; [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[31,81,114,20],"tags":[41,42,36,43,7,40,38,37,35,39],"class_list":["post-3446","post","type-post","status-publish","format-standard","hentry","category-containerization-docker","category-docker","category-docker-swarm","category-cyber-security","tag-alpine","tag-containerd","tag-containerization","tag-cri","tag-docker","tag-docker-image","tag-docker-registry","tag-dockerhub","tag-security","tag-trivy"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Security Tips for Docker - code2deploy.com<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Security Tips for Docker - code2deploy.com\" \/>\n<meta property=\"og:description\" content=\"Keep Everything Updated: Start Small with Images: Scan for Vulnerabilities: Limit Superpowers: Separate Neighborhoods: Write Secure Instructions: Protect Secrets: Trim Unnecessary Tools: Guard Container Behavior: Trust Only Verified Images: Some Basic Example: docker pull alpine FROM alpine# Your Dockerfile instructions here trivy image &lt;image_name&gt; FROM alpineUSER nobody docker network create my_network docker run &#8211;network=my_network &lt;image_name&gt; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/\" \/>\n<meta property=\"og:site_name\" content=\"code2deploy.com\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-16T16:31:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-20T20:08:12+00:00\" \/>\n<meta name=\"author\" content=\"enam\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"enam\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/\"},\"author\":{\"name\":\"enam\",\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"headline\":\"Security Tips for Docker\",\"datePublished\":\"2024-02-16T16:31:18+00:00\",\"dateModified\":\"2024-02-20T20:08:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/\"},\"wordCount\":795,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"keywords\":[\"alpine\",\"containerD\",\"containerization\",\"CRI\",\"docker\",\"docker image\",\"docker registry\",\"dockerhub\",\"security\",\"trivy\"],\"articleSection\":[\"Containerization\",\"Docker\",\"Docker Swarm\",\"Security\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/\",\"url\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/\",\"name\":\"Security Tips for Docker - code2deploy.com\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#website\"},\"datePublished\":\"2024-02-16T16:31:18+00:00\",\"dateModified\":\"2024-02-20T20:08:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blog.code2deploy.com\\\/security-tips-for-docker\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Security Tips for Docker\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/\",\"name\":\"code2deploy.com\\\/blog\",\"description\":\"TechOps\",\"publisher\":{\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/#\\\/schema\\\/person\\\/e46930c19b999a87f12566fa8357481b\",\"name\":\"enam\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\",\"caption\":\"enam\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g\"},\"sameAs\":[\"https:\\\/\\\/code2deploy.com\\\/blog\"],\"url\":\"https:\\\/\\\/code2deploy.com\\\/blog\\\/author\\\/enam\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Security Tips for Docker - code2deploy.com","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/","og_locale":"en_US","og_type":"article","og_title":"Security Tips for Docker - code2deploy.com","og_description":"Keep Everything Updated: Start Small with Images: Scan for Vulnerabilities: Limit Superpowers: Separate Neighborhoods: Write Secure Instructions: Protect Secrets: Trim Unnecessary Tools: Guard Container Behavior: Trust Only Verified Images: Some Basic Example: docker pull alpine FROM alpine# Your Dockerfile instructions here trivy image &lt;image_name&gt; FROM alpineUSER nobody docker network create my_network docker run &#8211;network=my_network &lt;image_name&gt; [&hellip;]","og_url":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/","og_site_name":"code2deploy.com","article_published_time":"2024-02-16T16:31:18+00:00","article_modified_time":"2024-02-20T20:08:12+00:00","author":"enam","twitter_card":"summary_large_image","twitter_misc":{"Written by":"enam","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/#article","isPartOf":{"@id":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/"},"author":{"name":"enam","@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"headline":"Security Tips for Docker","datePublished":"2024-02-16T16:31:18+00:00","dateModified":"2024-02-20T20:08:12+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/"},"wordCount":795,"commentCount":0,"publisher":{"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"keywords":["alpine","containerD","containerization","CRI","docker","docker image","docker registry","dockerhub","security","trivy"],"articleSection":["Containerization","Docker","Docker Swarm","Security"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.code2deploy.com\/security-tips-for-docker\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/","url":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/","name":"Security Tips for Docker - code2deploy.com","isPartOf":{"@id":"https:\/\/code2deploy.com\/blog\/#website"},"datePublished":"2024-02-16T16:31:18+00:00","dateModified":"2024-02-20T20:08:12+00:00","breadcrumb":{"@id":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.code2deploy.com\/security-tips-for-docker\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.code2deploy.com\/security-tips-for-docker\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/code2deploy.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Security Tips for Docker"}]},{"@type":"WebSite","@id":"https:\/\/code2deploy.com\/blog\/#website","url":"https:\/\/code2deploy.com\/blog\/","name":"code2deploy.com\/blog","description":"TechOps","publisher":{"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/code2deploy.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/code2deploy.com\/blog\/#\/schema\/person\/e46930c19b999a87f12566fa8357481b","name":"enam","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g","caption":"enam"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/d864e2f082f4499f8f1b33f004ec166eea77b9e94738553b120b6dca2410f203?s=96&d=mm&r=g"},"sameAs":["https:\/\/code2deploy.com\/blog"],"url":"https:\/\/code2deploy.com\/blog\/author\/enam\/"}]}},"_links":{"self":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/3446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/comments?post=3446"}],"version-history":[{"count":2,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/3446\/revisions"}],"predecessor-version":[{"id":3448,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/posts\/3446\/revisions\/3448"}],"wp:attachment":[{"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/media?parent=3446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/categories?post=3446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/code2deploy.com\/blog\/wp-json\/wp\/v2\/tags?post=3446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}