CINXE.COM

Containers | Linux Journal

<!DOCTYPE html> <html lang="en" dir="ltr" prefix="content: http://purl.org/rss/1.0/modules/content/ dc: http://purl.org/dc/terms/ foaf: http://xmlns.com/foaf/0.1/ og: http://ogp.me/ns# rdfs: http://www.w3.org/2000/01/rdf-schema# schema: http://schema.org/ sioc: http://rdfs.org/sioc/ns# sioct: http://rdfs.org/sioc/types# skos: http://www.w3.org/2004/02/skos/core# xsd: http://www.w3.org/2001/XMLSchema# " class="no-js wf-loading"> <head> <meta charset="utf-8" /> <meta name="Generator" content="Drupal 9 (https://www.drupal.org)" /> <meta name="MobileOptimized" content="width" /> <meta name="HandheldFriendly" content="true" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <link rel="icon" href="/themes/linuxjournal/favicon.ico" type="image/vnd.microsoft.icon" /> <link rel="alternate" type="application/rss+xml" title="Containers" href="https://www.linuxjournal.com/taxonomy/term/978/feed" /> <title>Containers | Linux Journal</title> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/align.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/fieldgroup.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/container-inline.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/clearfix.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/details.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/hidden.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/item-list.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/js.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/nowrap.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/position-container.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/progress.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/reset-appearance.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/resize.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/sticky-header.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-counter.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-report-counters.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/system-status-report-general-info.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/tablesort.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/system/css/components/tree-child.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/modules/contrib/poll/css/poll.base.css?smwnh4" /> <link rel="stylesheet" media="all" href="/modules/contrib/poll/css/poll.theme.css?smwnh4" /> <link rel="stylesheet" media="all" href="/core/modules/views/css/views.module.css?smwnh4" /> <link rel="stylesheet" media="all" href="/modules/contrib/webform/modules/webform_bootstrap/css/webform_bootstrap.css?smwnh4" /> <link rel="stylesheet" media="all" href="/libraries/shariff/shariff.complete.css?smwnh4" /> <link rel="stylesheet" media="all" href="/themes/linuxjournal/css/style.css?smwnh4" /> <link rel="stylesheet" media="all" href="/themes/linuxjournal/css/fonts.css?smwnh4" /> <!-- <script defer src="https://use.fontawesome.com/releases/v5.0.9/js/all.js" integrity="sha384-8iPTk2s/jMVj81dnzb/iFR2sdA7u06vHJyyLlAd4snFpCl/SnyUjRrbdJsw1pGIl" crossorigin="anonymous"></script>--> <script> // Non-blocking webfonts. (function iife() { 'use strict'; // JS is able to start executing. document.documentElement.classList.remove('no-js'); // Optimization for Repeat Views // Stop early for repeat views that have already cached fonts. if (sessionStorage.fontsLoadedLateef && sessionStorage.fontsLoadedOpensans /* && sessionStorage.fontsLoadedNEWFONT */) { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-opensans'); document.documentElement.classList.add('wf-lateef'); // document.documentElement.classList.add('wf-NEWFONT'); return; } // Inlined Font Face Observer script + Promise polyfill. /*! Font Face Observer v2.0.13 - © Bram Stein. License: BSD-3-Clause */ (function(){'use strict';var f,g=[];function l(a){g.push(a);1==g.length&&f()}function m(){for(;g.length;)g[0](),g.shift()}f=function(){setTimeout(m)};function n(a){this.a=p;this.b=void 0;this.f=[];var b=this;try{a(function(a){q(b,a)},function(a){r(b,a)})}catch(c){r(b,c)}}var p=2;function t(a){return new n(function(b,c){c(a)})}function u(a){return new n(function(b){b(a)})}function q(a,b){if(a.a==p){if(b==a)throw new TypeError;var c=!1;try{var d=b&&b.then;if(null!=b&&"object"==typeof b&&"function"==typeof d){d.call(b,function(b){c||q(a,b);c=!0},function(b){c||r(a,b);c=!0});return}}catch(e){c||r(a,e);return}a.a=0;a.b=b;v(a)}} function r(a,b){if(a.a==p){if(b==a)throw new TypeError;a.a=1;a.b=b;v(a)}}function v(a){l(function(){if(a.a!=p)for(;a.f.length;){var b=a.f.shift(),c=b[0],d=b[1],e=b[2],b=b[3];try{0==a.a?"function"==typeof c?e(c.call(void 0,a.b)):e(a.b):1==a.a&&("function"==typeof d?e(d.call(void 0,a.b)):b(a.b))}catch(h){b(h)}}})}n.prototype.g=function(a){return this.c(void 0,a)};n.prototype.c=function(a,b){var c=this;return new n(function(d,e){c.f.push([a,b,d,e]);v(c)})}; function w(a){return new n(function(b,c){function d(c){return function(d){h[c]=d;e+=1;e==a.length&&b(h)}}var e=0,h=[];0==a.length&&b(h);for(var k=0;k<a.length;k+=1)u(a[k]).c(d(k),c)})}function x(a){return new n(function(b,c){for(var d=0;d<a.length;d+=1)u(a[d]).c(b,c)})};window.Promise||(window.Promise=n,window.Promise.resolve=u,window.Promise.reject=t,window.Promise.race=x,window.Promise.all=w,window.Promise.prototype.then=n.prototype.c,window.Promise.prototype["catch"]=n.prototype.g);}()); (function(){function l(a,b){document.addEventListener?a.addEventListener("scroll",b,!1):a.attachEvent("scroll",b)}function m(a){document.body?a():document.addEventListener?document.addEventListener("DOMContentLoaded",function c(){document.removeEventListener("DOMContentLoaded",c);a()}):document.attachEvent("onreadystatechange",function k(){if("interactive"==document.readyState||"complete"==document.readyState)document.detachEvent("onreadystatechange",k),a()})};function r(a){this.a=document.createElement("div");this.a.setAttribute("aria-hidden","true");this.a.appendChild(document.createTextNode(a));this.b=document.createElement("span");this.c=document.createElement("span");this.h=document.createElement("span");this.f=document.createElement("span");this.g=-1;this.b.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.c.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;"; this.f.style.cssText="max-width:none;display:inline-block;position:absolute;height:100%;width:100%;overflow:scroll;font-size:16px;";this.h.style.cssText="display:inline-block;width:200%;height:200%;font-size:16px;max-width:none;";this.b.appendChild(this.h);this.c.appendChild(this.f);this.a.appendChild(this.b);this.a.appendChild(this.c)} function t(a,b){a.a.style.cssText="max-width:none;min-width:20px;min-height:20px;display:inline-block;overflow:hidden;position:absolute;width:auto;margin:0;padding:0;top:-999px;white-space:nowrap;font-synthesis:none;font:"+b+";"}function y(a){var b=a.a.offsetWidth,c=b+100;a.f.style.width=c+"px";a.c.scrollLeft=c;a.b.scrollLeft=a.b.scrollWidth+100;return a.g!==b?(a.g=b,!0):!1}function z(a,b){function c(){var a=k;y(a)&&a.a.parentNode&&b(a.g)}var k=a;l(a.b,c);l(a.c,c);y(a)};function A(a,b){var c=b||{};this.family=a;this.style=c.style||"normal";this.weight=c.weight||"normal";this.stretch=c.stretch||"normal"}var B=null,C=null,E=null,F=null;function G(){if(null===C)if(J()&&/Apple/.test(window.navigator.vendor)){var a=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))(?:\.([0-9]+))/.exec(window.navigator.userAgent);C=!!a&&603>parseInt(a[1],10)}else C=!1;return C}function J(){null===F&&(F=!!document.fonts);return F} function K(){if(null===E){var a=document.createElement("div");try{a.style.font="condensed 100px sans-serif"}catch(b){}E=""!==a.style.font}return E}function L(a,b){return[a.style,a.weight,K()?a.stretch:"","100px",b].join(" ")} A.prototype.load=function(a,b){var c=this,k=a||"BESbswy",q=0,D=b||3E3,H=(new Date).getTime();return new Promise(function(a,b){if(J()&&!G()){var M=new Promise(function(a,b){function e(){(new Date).getTime()-H>=D?b():document.fonts.load(L(c,'"'+c.family+'"'),k).then(function(c){1<=c.length?a():setTimeout(e,25)},function(){b()})}e()}),N=new Promise(function(a,c){q=setTimeout(c,D)});Promise.race([N,M]).then(function(){clearTimeout(q);a(c)},function(){b(c)})}else m(function(){function u(){var b;if(b=-1!= f&&-1!=g||-1!=f&&-1!=h||-1!=g&&-1!=h)(b=f!=g&&f!=h&&g!=h)||(null===B&&(b=/AppleWebKit\/([0-9]+)(?:\.([0-9]+))/.exec(window.navigator.userAgent),B=!!b&&(536>parseInt(b[1],10)||536===parseInt(b[1],10)&&11>=parseInt(b[2],10))),b=B&&(f==v&&g==v&&h==v||f==w&&g==w&&h==w||f==x&&g==x&&h==x)),b=!b;b&&(d.parentNode&&d.parentNode.removeChild(d),clearTimeout(q),a(c))}function I(){if((new Date).getTime()-H>=D)d.parentNode&&d.parentNode.removeChild(d),b(c);else{var a=document.hidden;if(!0===a||void 0===a)f=e.a.offsetWidth, g=n.a.offsetWidth,h=p.a.offsetWidth,u();q=setTimeout(I,50)}}var e=new r(k),n=new r(k),p=new r(k),f=-1,g=-1,h=-1,v=-1,w=-1,x=-1,d=document.createElement("div");d.dir="ltr";t(e,L(c,"sans-serif"));t(n,L(c,"serif"));t(p,L(c,"monospace"));d.appendChild(e.a);d.appendChild(n.a);d.appendChild(p.a);document.body.appendChild(d);v=e.a.offsetWidth;w=n.a.offsetWidth;x=p.a.offsetWidth;I();z(e,function(a){f=a;u()});t(e,L(c,'"'+c.family+'",sans-serif'));z(n,function(a){g=a;u()});t(n,L(c,'"'+c.family+'",serif')); z(p,function(a){h=a;u()});t(p,L(c,'"'+c.family+'",monospace'))})})};"object"===typeof module?module.exports=A:(window.FontFaceObserver=A,window.FontFaceObserver.prototype.load=A.prototype.load);}()); // Load and observe Lateef var Lateef = new FontFaceObserver('Lateef', {weight: 400}); Promise.all([Lateef.load()]).then(function() { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-lateef'); // Optimization for Repeat Views // Set a flag in localstorage so repeat views can skip processing FFO. sessionStorage.fontsLoadedLateef = true; }); // Load and observe Open Sans var os300 = new FontFaceObserver('Open Sans', {weight: 300}); var os400 = new FontFaceObserver('Open Sans', {weight: 400}); Promise.all([os300.load(), os400.load()]).then(function() { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-opensans'); // Optimization for Repeat Views // Set a flag in localstorage so repeat views can skip processing FFO. sessionStorage.fontsLoadedOpensans = true; }); // Load and observe NEWFONT /* var NEWFONT = new FontFaceObserver('NEWFONT', {weight: 400}); Promise.all([NEWFONT.load()]).then(function() { document.documentElement.classList.remove('wf-loading'); document.documentElement.classList.add('wf-NEWFONT'); // Optimization for Repeat Views // Set a flag in localstorage so repeat views can skip processing FFO. sessionStorage.fontsLoadedNEWFONT = true; }); */ })(); </script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <script src=https://slashdot.org/country.js></script> <script src="/themes/linuxjournal/js/ada.js"></script> <script src="/themes/linuxjournal/js/accessibility.js"></script> <script>window.addEventListener('load', function() { new Accessibility(); });</script> <script src="//a.fsdn.com/con/js/sftheme/cmp2.js"></script> <link rel="stylesheet" href="//a.fsdn.com/con/css/sftheme/sandiego/cmp.css" type="text/css"> <link rel="stylesheet" href="/themes/linuxjournal/css/ccpa.css" type="text/css"> <script>window.bizx.cmp.init({ geo: window });</script> <script> function bm_trace() { (function (w,d,t) { _ml = w._ml || {}; _ml.eid = '771'; var s, cd, tag; s = d.getElementsByTagName(t)[0]; cd = new Date(); tag = d.createElement(t); tag.async = 1; tag.src = 'https://ml314.com/tag.aspx?' + cd.getDate() + cd.getMonth(); s.parentNode.insertBefore(tag, s); })(window,document,'script'); } bizx.cmp.ifConsent('', ['all', 'bombora'],bm_trace); </script> </head> <body class="path-taxonomy has-glyphicons"> <a href="#main-content" class="visually-hidden focusable skip-link"> Skip to main content </a> <div class="dialog-off-canvas-main-canvas" data-off-canvas-main-canvas> <div id="wrap"> <div class="leader-wrapper" id="leader-wrapper"> </div> <div class="brand-wrapper" id="brand-wrapper"> <div class="brand container"> <div class="region region-brand"> <a class="logo navbar-btn" href="/" title="Home" rel="home"> <h1><img src="/themes/linuxjournal/images/ljlogo.png" alt="Linux Journal" /></h1> </a> <section id="block-topbannernearlogo" class="block block-block-content block-block-contenta8e75a3d-967c-416d-8944-4015d1f90a84 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><a href="https://www.windriver.com/products/elxr-pro?utm_source=ba&amp;utm_medium=pa&amp;utm_campaign=ba-dg-amer-awa-vsmf-eLxrProLau_lin_dis_09172024"><img alt="Windriver eLxrPro" data-entity-type="file" data-entity-uuid="8ba04368-7803-4329-a196-dc1ea780ec2a" src="/sites/default/files/inline-images/WindRiver-eLxrPro_0.png" width="728" height="90" loading="lazy" /></a></div> </section> </div> </div> <div class="header-wrapper"> <header class="navbar navbar-default container" id="navbar" role="banner"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#navbar-collapse"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <div id="navbar-collapse" class="navbar-collapse collapse"> <div class="region region-navigation-collapsible"> <section id="block-linuxjournal-main-menu" class="block block-system block-system-menu-blockmain clearfix navbar__menu col-xs-12 col-sm-8"> <ul class="menu menu--main nav navbar-nav"> <li class="expanded dropdown active active-trail first"> <a href="/" class="dropdown-toggle active-trail" data-toggle="dropdown" data-drupal-link-system-path="&lt;front&gt;">Topics+ <span class="caret"></span></a> <ul class="dropdown-menu"> <li class="first"> <a href="/tag/cloud">Cloud</a> </li> <li class="active active-trail"> <a href="/tag/containers" class="active-trail is-active" data-drupal-link-system-path="taxonomy/term/978">Containers</a> </li> <li> <a href="/tag/desktop">Desktop</a> </li> <li> <a href="/tag/kernel" data-drupal-link-system-path="taxonomy/term/662">Kernel</a> </li> <li> <a href="/tag/mobile">Mobile</a> </li> <li> <a href="/tag/networking">Networking</a> </li> <li> <a href="/tag/privacy">Privacy</a> </li> <li> <a href="/tag/programming">Programming</a> </li> <li> <a href="/tag/security" data-drupal-link-system-path="taxonomy/term/31">Security</a> </li> <li> <a href="/tag/servers">Servers</a> </li> <li class="last"> <a href="/tag/sysadmin" data-drupal-link-system-path="taxonomy/term/21">SysAdmin</a> </li> </ul> </li> <li> <a href="/news" data-drupal-link-system-path="news">News</a> </li> <li class="last"> <a href="/books" data-drupal-link-system-path="books">eBooks</a> </li> </ul> </section> <section class="search-block-form block block-search block-search-form-block clearfix navbar__search col-xs-12 col-sm-4 col-md-4 col-md-offset-0" data-drupal-selector="search-block-form" id="block-linuxjournal-search" role="search"> <h2 class="block-title sr-only">Search</h2> <form action="/search/node" method="get" id="search-block-form" accept-charset="UTF-8"> <div class="form-item js-form-item form-type-search js-form-type-search form-item-keys js-form-item-keys form-no-label form-group"> <label for="edit-keys" class="control-label sr-only">Search</label> <div class="input-group"><input title="Enter the terms you wish to search for." data-drupal-selector="edit-keys" class="form-search form-control" placeholder="Search" type="search" id="edit-keys" name="keys" value="" size="15" maxlength="128" /><span class="input-group-btn"><button type="submit" value="Search" class="button js-form-submit form-submit btn-primary btn icon-only" name=""><span class="sr-only">Search</span><span class="icon glyphicon glyphicon-search" aria-hidden="true"></span></button></span></div> <div id="edit-keys--description" class="description help-block"> Enter the terms you wish to search for. </div> </div> <div class="form-actions form-group js-form-wrapper form-wrapper" data-drupal-selector="edit-actions" id="edit-actions"></div> </form> </section> </div> </div> <div class="navbar-header"> <div class="region region-navigation"> <section id="block-mobilenavigation" class="block block-system block-system-menu-blockmenu-mobile-navbar clearfix col-xs-12 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-0 navbar__menu navbar__mobilenavigation"> <ul class="menu menu--menu-mobile-navbar nav"> <li class="first"> <a href="/news" data-drupal-link-system-path="news">News</a> </li> <li> <a href="/popular" data-drupal-link-system-path="popular">Popular</a> </li> <li class="last"> <a href="/recent" data-drupal-link-system-path="recent">Recent</a> </li> </ul> </section> </div> </div> </header> </div> </div> <div role="main" class="main-container container js-quickedit-main-content" id="main"> <div class="row"> <section class="col-sm-12"> <div class="highlighted"> <div class="region region-highlighted"> <div data-drupal-messages-fallback class="hidden"></div> </div> </div> <a id="main-content"></a> <div class="region region-content"> <h1 class="page-header">Containers</h1> <div class="views-element-container form-group"><div class="view view-taxonomy-term view-id-taxonomy_term view-display-id-page_1 js-view-dom-id-bf09decfea275b64889ccd8183fec94b461e234629c99b9f89c2f6f2ae4c4f76"> <div class="view-header"> <div about="/tag/containers" typeof="schema:Thing"> <span property="schema:name" content="Containers" class="hidden"></span> </div> </div> <div class="view-content"> <div class="views-row"><article data-history-node-id="1340759" role="article" about="/content/running-gnome-container" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/running-gnome-container" rel="bookmark"> <span>Running GNOME in a Container</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/adam-verslype" lang="" about="/users/adam-verslype" typeof="schema:Person" property="schema:name" datatype="">Adam Verslype</a></span> - August 7, 2019 </div> </footer> <div class="content-body"> Containerizing the GUI separates your work and play. Virtualization has always been a rich man&#039;s game, and more frugal enthusiasts—unable to afford fancy server-class components—often struggle to keep up. Linux provides free high-quality hypervisors, but when you start to throw real workloads at the host, its resources become saturated quickly. No amount of spare RAM shoved into an old Dell desktop is going to remedy this situation. If a properly decked-out host is out of your reach, you might want to consider containers instead. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340761" role="article" about="/content/how-build-enterprise-kubernetes-strategy" class="special-content teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <div class="special-message">Sponsored Content</div> <h2> <a href="/content/how-build-enterprise-kubernetes-strategy" rel="bookmark"> <span>How to Build an Enterprise Kubernetes Strategy</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/user/800005" lang="" about="/user/800005" typeof="schema:Person" property="schema:name" datatype="">LJ Staff</a></span> - July 21, 2019 </div> </footer> <div class="content-body"> In today’s emerging cloud-native environments, Kubernetes is everywhere. Organizations love Kubernetes because it helps significantly increase the agility and efficiency of their software development teams, enabling them to reduce the time and perils associated with putting new software into production. Information technology operations teams love Kubernetes because it helps boost productivity, reduce costs and risks, and moves organizations closer to achieving their hybrid cloud goals. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340654" role="article" about="/content/bringing-benefits-linux-containers-operational-technology" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/bringing-benefits-linux-containers-operational-technology" rel="bookmark"> <span>Bringing the Benefits of Linux Containers to Operational Technology</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/pavan-singh" lang="" about="/users/pavan-singh" typeof="schema:Person" property="schema:name" datatype="">Pavan Singh</a></span> - May 22, 2019 </div> </footer> <div class="content-body"> Linux container technology was introduced more than a decade ago and has recently jumped in adoption in IT environments. However, the OT (operational technology) environments, typically made up of heterogenous embedded systems, have lagged in the adoption of container technologies, due to both the unique technology requirements and the business models that relied on proprietary systems. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340551" role="article" about="/content/kubernetes-identity-management-authentication" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/kubernetes-identity-management-authentication" rel="bookmark"> <span>Kubernetes Identity Management: Authentication</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/marc-boorshtein" lang="" about="/users/marc-boorshtein" typeof="schema:Person" property="schema:name" datatype="">Marc Boorshtein</a></span> - April 22, 2019 </div> </footer> <div class="content-body"> You&#039;ve deployed Kubernetes, but now how are you going to get it into the hands of your developers and admins securely? </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340167" role="article" about="/content/weekend-reading-containers" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/weekend-reading-containers" rel="bookmark"> <span>Weekend Reading: Containers</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/carlie-fairchild" lang="" about="/users/carlie-fairchild" typeof="schema:Person" property="schema:name" datatype="">Carlie Fairchild</a></span> - February 9, 2019 </div> </footer> <div class="content-body"> The software enabling this technology comes in many forms, with Docker as the most popular. The recent rise in popularity of container technology within the data center is a direct result of its portability and ability to isolate working environments, thus limiting its impact and overall footprint to the underlying computing system. To understand the technology completely, you first need to understand the many pieces that make it all possible. Join us this weekend as we learn about Containers. Before we get started, many ask what the difference is between a container and virtual machines? Editor Petros Koutoupis explains: Both have a specific purpose and place with very little overlap, and one doesn&#039;t obsolete the other. A container is meant to be a lightweight environment that you spin up to host one to a few isolated applications at bare-metal performance. You should opt for virtual machines when you want to host an entire operating system or ecosystem or maybe to run applications incompatible with the underlying environment. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340036" role="article" about="/content/sharing-docker-containers-across-devops-environments" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/sharing-docker-containers-across-devops-environments" rel="bookmark"> <span>Sharing Docker Containers across DevOps Environments</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/todd-jacobs" lang="" about="/users/todd-jacobs" typeof="schema:Person" property="schema:name" datatype="">Todd A. Jacobs</a></span> - December 18, 2018 </div> </footer> <div class="content-body"> Docker provides a powerful tool for creating lightweight images and containerized processes, but did you know it can make your development environment part of the DevOps pipeline too? Whether you&#039;re managing tens of thousands of servers in the cloud or are a software engineer looking to incorporate Docker containers into the software development life cycle, this article has a little something for everyone with a passion for Linux and Docker. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339997" role="article" about="/content/everything-you-need-know-about-containers-part-iii-orchestration-kubernetes" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/everything-you-need-know-about-containers-part-iii-orchestration-kubernetes" rel="bookmark"> <span>Everything You Need to Know about Containers, Part III: Orchestration with Kubernetes</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/petros-koutoupis" lang="" about="/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="">Petros Koutoupis</a></span> - November 28, 2018 </div> </footer> <div class="content-body"> A look at using Kubernetes to create, deploy and manage thousands of container images. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340190" role="article" about="/content/foss-project-spotlight-bluek8s" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/foss-project-spotlight-bluek8s" rel="bookmark"> <span>FOSS Project Spotlight: BlueK8s</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/tom-phelan" lang="" about="/users/tom-phelan" typeof="schema:Person" property="schema:name" datatype="">Tom Phelan</a></span> - November 16, 2018 </div> </footer> <div class="content-body"> Deploying and managing complex stateful applications on Kubernetes. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339992" role="article" about="/content/everything-you-need-know-about-linux-containers-part-ii-working-linux-containers-lxc" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/everything-you-need-know-about-linux-containers-part-ii-working-linux-containers-lxc" rel="bookmark"> <span>Everything You Need to Know about Linux Containers, Part II: Working with Linux Containers (LXC)</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/petros-koutoupis" lang="" about="/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="">Petros Koutoupis</a></span> - August 27, 2018 </div> </footer> <div class="content-body"> Part I of this Deep Dive on containers introduces the idea of kernel control groups, or cgroups, and the way you can isolate, limit and monitor selected userspace applications. Here, I dive a bit deeper and focus on the next step of process isolation—that is, through containers, and more specifically, the Linux Containers (LXC) framework. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339985" role="article" about="/content/everything-you-need-know-about-linux-containers-part-i-linux-control-groups-and-process" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/everything-you-need-know-about-linux-containers-part-i-linux-control-groups-and-process" rel="bookmark"> <span>Everything You Need to Know about Linux Containers, Part I: Linux Control Groups and Process Isolation</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/petros-koutoupis" lang="" about="/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="">Petros Koutoupis</a></span> - August 21, 2018 </div> </footer> <div class="content-body"> Everyone&#039;s heard the term, but what exactly are containers? The software enabling this technology comes in many forms, with Docker as the most popular. The recent rise in popularity of container technology within the data center is a direct result of its portability and ability to isolate working environments, thus limiting its impact and overall footprint to the underlying computing system. To understand the technology completely, you first need to understand the many pieces that make it all possible. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340053" role="article" about="/content/new-issue-august-2018-containers-issue-now-available" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/new-issue-august-2018-containers-issue-now-available" rel="bookmark"> <span>New Issue: Linux Journal August 2018 with a Deep Dive into Containers</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/carlie-fairchild" lang="" about="/users/carlie-fairchild" typeof="schema:Person" property="schema:name" datatype="">Carlie Fairchild</a></span> - August 1, 2018 </div> </footer> <div class="content-body"> The recent rise in popularity of container technology within the data center is a direct result of its portability and ability to isolate working environments, thus limiting its impact and overall footprint to the underlying computing system. To understand the technology completely, you first need to understand the many pieces that make it all possible. With that, may we introduce Linux Journal&#039;s Container issue. Featured Articles in this Issue Include: </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339996" role="article" about="/content/search-gui-docker" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/search-gui-docker" rel="bookmark"> <span>The Search for a GUI Docker</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/shawn-powers" lang="" about="/users/shawn-powers" typeof="schema:Person" property="schema:name" datatype="">Shawn Powers</a></span> - July 31, 2018 </div> </footer> <div class="content-body"> Docker is everything but pretty; let&#039;s try to fix that. Here&#039;s a rundown of some GUI options available for Docker. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1340043" role="article" about="/content/interview-heptio-kubernetes-pioneers" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/interview-heptio-kubernetes-pioneers" rel="bookmark"> <span>An Interview with Heptio, the Kubernetes Pioneers</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/petros-koutoupis" lang="" about="/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="">Petros Koutoupis</a></span> - July 30, 2018 </div> </footer> <div class="content-body"> I recently spent some time chatting with Craig McLuckie, CEO of the leading Kubernetes solutions provider Heptio. Centered around both developers and system administrators, Heptio&#039;s products and services simplify and scale the Kubernetes ecosystem. Petros Koutoupis: For all our readers who have yet to hear of the remarkable things Heptio is doing in this space, please start by telling us, who is Craig McLuckie? </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339941" role="article" about="/content/kubernetes-four-years-later-and-amazon-redefining-container-orchestration" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/kubernetes-four-years-later-and-amazon-redefining-container-orchestration" rel="bookmark"> <span>Kubernetes, Four Years Later, and Amazon Redefining Container Orchestration</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/petros-koutoupis" lang="" about="/users/petros-koutoupis" typeof="schema:Person" property="schema:name" datatype="">Petros Koutoupis</a></span> - June 6, 2018 </div> </footer> <div class="content-body"> Well, here we are. Kubernetes turns four years old this month—technically, on June 7, 2018—the very same platform that brings users and data center administrators scalable container technologies. Its popularity has skyrocketed since its initial introduction by Google. Celebrating the project’s birthday is not the only thing making the headlines today. Amazon recently announced the general availability of its Elastic Container Services for Kubernetes (EKS), accessible via Amazon Web Services (AWS). </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339434" role="article" about="/content/aws-quickstart-kubernetes" class="story is-promoted is-sticky teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/aws-quickstart-kubernetes" rel="bookmark"> <span>AWS Quickstart for Kubernetes</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/craig-mcluckie-0" lang="" about="/users/craig-mcluckie-0" typeof="schema:Person" property="schema:name" datatype="">Craig McLuckie</a></span> - June 28, 2017 </div> </footer> <div class="content-body"> Kubernetes is an open-source cluster manager that makes it easy to run Docker and other containers in production environments of all types (on-premises or in the public cloud). What is now an open community project came from development and operations patterns pioneered at Google to manage complex systems at internet scale. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339422" role="article" about="/content/suse-caas-platform" class="story is-promoted is-sticky teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/suse-caas-platform" rel="bookmark"> <span>SUSE CaaS Platform</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/james-gray" lang="" about="/users/james-gray" typeof="schema:Person" property="schema:name" datatype="">James Gray</a></span> - June 26, 2017 </div> </footer> <div class="content-body"> There are a lot of decisions to be made before enterprises are ready for production and deployment of container apps, asserts SUSE. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1339140" role="article" about="/content/containercon-vendors-offer-flexible-solutions-managing-all-your-new-micro-vms" class="story is-promoted is-sticky teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/containercon-vendors-offer-flexible-solutions-managing-all-your-new-micro-vms" rel="bookmark"> <span>ContainerCon Vendors Offer Flexible Solutions for Managing All Your New Micro-VMs</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/john-s-tonello" lang="" about="/users/john-s-tonello" typeof="schema:Person" property="schema:name" datatype="">John S. Tonello</a></span> - August 24, 2016 </div> </footer> <div class="content-body"> As you might expect, this week&#039;s LinuxCon and ContainerCon 2016, held in Toronto, is heavy on the benefits and pitfalls of deploying containers, but several vendors aim to come to the rescue with flexible tools to manage it all. </div> </div> </article> </div> <div class="views-row"><article data-history-node-id="1338711" role="article" about="/content/infinite-busybox-systemd" class="story is-promoted teaser clearfix"> <div class="teaser-image"> </div> <div class="teaser-text"> <h2> <a href="/content/infinite-busybox-systemd" rel="bookmark"> <span>Infinite BusyBox with systemd</span> </a> </h2> <footer> <div class="author"> <span><a title="View user profile." href="/users/charles-fisher" lang="" about="/users/charles-fisher" typeof="schema:Person" property="schema:name" datatype="">Charles Fisher</a></span> - May 12, 2015 </div> </footer> <div class="content-body"> Lightweight virtual containers with PID 1. In this article, I demonstrate a method to build one Linux system within another using the latest utilities within the systemd suite of management tools. The guest OS container design focuses upon BusyBox and Dropbear for the userspace system utilities, but I also work through methods for running more general application software so the containers are actually useful. </div> </div> </article> </div> </div> <div class="feed-icons"> <a href="https://www.linuxjournal.com/taxonomy/term/978/feed" class="feed-icon"> Subscribe to Containers </a> </div> </div> </div> </div> </section> </div> </div> <footer class="footer container" role="contentinfo"> <div class="region region-footer"> <section class="views-element-container block block-views block-views-blocknewsletter-promo-block-block-1 clearfix" id="block-views-block-newsletter-promo-block-block-1"> <div class="form-group"><div class="view view-newsletter-promo-block view-id-newsletter_promo_block view-display-id-block_1 js-view-dom-id-96cc84870063d723458f9978cf60ce53adc03a14f9f11eb8b7027dfe31047f47"> <div class="view-content"> <div class="views-row"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="newsletter-bottom"> <div class="col-md-9 col-sm-12 signup-form"> <!--<h3>Linux Journal Week in Review</h3> <p>Sign up to get all the good stuff delivered to your inbox every week.</p> <form id="subForm" class="js-cm-form" action="https://www.createsend.com/t/subscribeerror?description=" method="post" data-id="A61C50BEC994754B1D79C5819EC1255CDBC34DDF3E170B13E2BAC2D68C42BF424F853383C84F5BAE38EAB4CFA5C73907CAC074FF8192503AF80F3699F7FE5CE1"> <div class="flexform">--> <!--<label for="fieldEmail">Email</label> <br />--> <!--<input id="fieldEmail" name="cm-gjjtdh-gjjtdh" type="email" class="js-cm-email-input" placeholder="Enter your email. Get the newsletter." required /> <button class="js-cm-submit-button" type="submit">Sign Up</button> </div> <div> <input id="cm-privacy-consent" name="cm-privacy-consent" required type="checkbox" /> <label for="cm-privacy-consent">I give my consent to be emailed</label> <input id="cm-privacy-consent-hidden" name="cm-privacy-consent-hidden" type="hidden" value="true" /> </div> </form> <script type="text/javascript" src="https://js.createsend1.com/javascript/copypastesubscribeformlogic.js"></script> </div>--> <!--<div class="col-md-3 col-sm-12 subs-callout"> <img src="/sites/default/files/styles/large/public/2019-01/LJ294-Jan2019-Cover_0.jpg" width="100px" /> <h3>The Value of Open Source Journalism</h3> <p> Subscribe and support our coverage for technology's biggest thinkers – with up to 52% savings. </p> <strong><a href="https://www.linuxjournal.com/subscribe">Subscribe <i class="fa fa-angle-double-right" aria-hidden="true"></i></a> </strong> </div>--> </div> </div> </div> </div> </div> </div> </section> </div> <div class="footer-blocks col-sm-12"> <div class="col-md-6 col-sm-12 footer-left"> <div class="region region-footer-left"> <section id="block-connectwithusfooter" class="block block-block-content block-block-content5e722bd4-5e08-454b-8507-956089bfa661 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="footer-heading">Connect With Us <span class="social-media sm-a-no-underline"><a href="https://youtube.com/linuxjournalonline" alt="Linux Journal on YouTube" aria-label="YouTube"><i class="fa fa-youtube fa-2x"></i></a><a href="https://www.facebook.com/linuxjournal/" alt="Linux Journal on Facebook" aria-label="Facebook"><i class="fa fa-facebook-f fa-2x"></i><a href="https://twitter.com/linuxjournal" alt="Linux Journal on Twitter" aria-label="Twitter"><i class="fa fa-twitter fa-2x"></i></a></span></div> <p>Linux Journal, representing 25+ years of publication, is the original magazine of the global Open Source community.</p></div> </section> <section id="block-linuxjournal-block-9" class="block block-block-content block-block-content8669793b-e217-4426-a79e-eb3c21ede127 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div id="copyright">© 2024 Slashdot Media, LLC. All rights reserved.</div> </div> </section> <section id="block-privacyterms" class="block block-block-content block-block-contenta203b8bd-80ef-4982-bf6e-784dd7b44120 clearfix"> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><ul class="menu menu--footer-submenu nav" id="terms-nav"> <li><a href="https://slashdotmedia.com/privacy-statement/" rel="nofollow" target="_blank">PRIVACY POLICY</a></li> <li><a href="https://slashdotmedia.com/terms-of-use/" rel="nofollow" target="_blank">TERMS OF SERVICE</a></li> <li><a href="/sponsors">ADVERTISE</a></li> </ul></div> </section> </div> </div> <div class="col-md-4 col-sm-8 footer-middle"> <div class="region region-footer-middle"> <nav role="navigation" aria-labelledby="block-footermenucolumn2-menu" id="block-footermenucolumn2"> <h2 class="visually-hidden" id="block-footermenucolumn2-menu">Footer Menu Column 2</h2> <ul class="menu menu--footer-menu-column-2 nav"> <li class="first"> <a href="/content/masthead" data-drupal-link-system-path="node/1007727">Masthead</a> </li> <li> <a href="/author" data-drupal-link-system-path="node/1009249">Authors</a> </li> <li class="last"> <a href="/form/contact" data-drupal-link-system-path="webform/contact">Contact Us</a> </li> </ul> </nav> <nav role="navigation" aria-labelledby="block-footermenucolumn3-menu" id="block-footermenucolumn3"> <h2 class="visually-hidden" id="block-footermenucolumn3-menu">Footer Menu Column 3</h2> <ul class="menu menu--footer-menu-column-3 nav"> <li class="first"> <a href="/rss_feeds" data-drupal-link-system-path="node/1000457">RSS Feeds</a> </li> <li class="last"> <a href="/aboutus" data-drupal-link-system-path="node/1000267">About Us</a> </li> </ul> </nav> </div> </div> </div> </footer> </div> </div> <script type="application/json" data-drupal-selector="drupal-settings-json">{"path":{"baseUrl":"\/","scriptPath":null,"pathPrefix":"","currentPath":"taxonomy\/term\/978","currentPathIsAdmin":false,"isFront":false,"currentLanguage":"en"},"pluralDelimiter":"\u0003","suppressDeprecationErrors":true,"bootstrap":{"forms_has_error_value_toggle":1,"popover_enabled":1,"popover_animation":1,"popover_auto_close":1,"popover_container":"body","popover_content":"","popover_delay":"0","popover_html":0,"popover_placement":"right","popover_selector":"","popover_title":"","popover_trigger":"click"},"linuxjournal":{"disqus":{"origin":"https:\/\/www.linuxjournal.com","prettyUrl":"\/tag\/containers","fullUrl":"https:\/\/www.linuxjournal.com\/tag\/containers","embedUrl":"https:\/\/linuxjournal.disqus.com\/embed.js","shortname":"linuxjournal"}},"ajaxTrustedUrl":{"\/search\/node":true},"user":{"uid":0,"permissionsHash":"a7b3a803411eb9cbd5d7d374ffb326721ee8274ab5a665df8f38311e3aad858c"}}</script> <script src="/core/assets/vendor/jquery/jquery.min.js?v=3.6.3"></script> <script src="/core/assets/vendor/underscore/underscore-min.js?v=1.13.6"></script> <script src="/core/misc/polyfills/element.matches.js?v=9.5.9"></script> <script src="/core/misc/polyfills/object.assign.js?v=9.5.9"></script> <script src="/core/assets/vendor/once/once.min.js?v=1.0.1"></script> <script src="/core/assets/vendor/jquery-once/jquery.once.min.js?v=9.5.9"></script> <script src="/core/misc/drupalSettingsLoader.js?v=9.5.9"></script> <script src="/core/misc/drupal.js?v=9.5.9"></script> <script src="/core/misc/drupal.init.js?v=9.5.9"></script> <script src="/themes/contrib/bootstrap/js/drupal.bootstrap.js?smwnh4"></script> <script src="/themes/contrib/bootstrap/js/attributes.js?smwnh4"></script> <script src="/themes/contrib/bootstrap/js/theme.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/affix.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/alert.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/button.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/carousel.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/collapse.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/dropdown.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/modal.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/tooltip.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/popover.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/scrollspy.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/tab.js?smwnh4"></script> <script src="/themes/linuxjournal/bootstrap/assets/javascripts/bootstrap/transition.js?smwnh4"></script> <script src="/themes/linuxjournal/js/lj-consentmanager.js?smwnh4"></script> <script src="/modules/contrib/webform/js/webform.behaviors.js?v=9.5.9"></script> <script src="/core/misc/jquery.once.bc.js?v=9.5.9"></script> <script src="/core/misc/states.js?v=9.5.9"></script> <script src="/themes/contrib/bootstrap/js/misc/states.js?smwnh4"></script> <script src="/modules/contrib/webform/js/webform.states.js?v=9.5.9"></script> <script src="/modules/contrib/webform/modules/webform_bootstrap/js/webform_bootstrap.states.js?v=9.5.9"></script> <script src="/themes/contrib/bootstrap/js/popover.js?smwnh4"></script> <!-- START EMBED --> <noscript><img src="https://api.b2c.com/api/noscript-448i7exgpyqpr9c144q.gif"></noscript> <!-- END EMBED --> <!-- Matomo --> <script type="text/javascript"> var _paq = _paq || []; function initPiwik() { _paq.push(['trackPageView']); _paq.push(['enableLinkTracking']); (function() { var u="https://analytics.linuxjournal.com/"; _paq.push(['setTrackerUrl', u+'piwik.php']); _paq.push(['setSiteId', '50']); var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s); })(); } </script> <noscript><p><img src="https://analytics.linuxjournal.com/piwik.php?idsite=50&amp;rec=1" style="border:0;" alt="" /></p></noscript> <!-- End Matomo Code --> <div class="modal-custom overlay-custom" id="ccpa-modal" style="margin-left: 0; display: none; max-width: 100%; width: 100%"> <div id="modal-content" class="modal-content"> <div class="modal-header" id="ccpa-modal-content-destination"></div> <span class="close" id="modal-close">&times;</span> </div> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10