{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/vecka4-implementation/docker-teori",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnéuniversitetet","language":"sv","courseCode":"1DV613"}},"mdx":{"fields":{"id":"b1121d46-1a73-540f-a3ce-99a91f407896","title":"Introduktion till containers","slug":"/vecka4-implementation/docker-teori"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Introduktion till containers\",\n  \"metaTitle\": \"1dv613 | vecka 4 | Containers & Docker\",\n  \"metaDescription\": \"metaDescription\",\n  \"order\": 4\n};\n\nvar makeShortcode = function makeShortcode(name) {\n  return function MDXDefaultShortcode(props) {\n    console.warn(\"Component \" + name + \" was not imported, exported, or provided by MDXProvider as global scope\");\n    return mdx(\"div\", props);\n  };\n};\n\nvar Youtube = makeShortcode(\"Youtube\");\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"h3\", null, \"Introduktion\"), mdx(\"p\", null, \"Denna modul fokuserar p\\xE5 containers och docker. Containers \\xE4r ett l\\xE4ttviktsalternativ till virtuella maskiner n\\xE4r man vill skeppa och drifts\\xE4tta sin kod. En stor del av modulen best\\xE5r av demos som visar hur man drifts\\xE4tter applikationer i containers (med Docker).\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://gitlab.lnu.se/1dv032/content/modul-4-containers/-/blob/master/F%C3%B6rel%C3%A4sningar/1.%20Intro/m41.pdf\"\n  }, \"Presentation\")), mdx(Youtube, {\n    link: \"https://youtu.be/EIJqkZJoKkA\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h3\", null, \"Containers\"), mdx(\"p\", null, \"Vad \\xE4r egentligen en container och hur skiljer den sig fr\\xE5n en virtuell maskin. Vilken overhead hos virtuella maskiner undviker containers, hur, och hur p\\xE5verkar detta isoleringen?\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://gitlab.lnu.se/1dv032/content/modul-4-containers/-/blob/master/F%C3%B6rel%C3%A4sningar/2.%20Containers/m42.pdf\"\n  }, \"Presentation\")), mdx(Youtube, {\n    link: \"https://youtu.be/2OHRk0mAsFc\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h3\", null, \"S\\xE4kerhet\"), mdx(\"p\", null, \"S\\xE4kerhet och containers \\xE4r stort och komplext, fr\\xE4mst p\\xE5 grund av att s\\xE4kerheten bygger p\\xE5 system i Linux s\\xE5som Capabilities och SELinux/AppArmor. D\\xE5 det \\xE4r utanf\\xF6r omf\\xE5nget p\\xE5 denna modul (och kurs) att ge en tillr\\xE4cklig introduktion till dessa ges bara n\\xE5gra tips om vad man b\\xF6r t\\xE4nka. F\\xF6r den som vill gr\\xE4va djupare finns mycket material tillg\\xE4ngligt p\\xE5 n\\xE4tet.\"), mdx(\"p\", null, mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://gitlab.lnu.se/1dv032/content/modul-4-containers/-/blob/master/F%C3%B6rel%C3%A4sningar/3.%20S%C3%A4kerhet/m43.pdf\"\n  }, \"Presentation\")), mdx(Youtube, {\n    link: \"https://youtu.be/lwU4xO72tRE\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h3\", null, \"Steg 1: Docker\"), mdx(\"p\", null, \"Kort introduktion till docker-kommandot och docker hub. Demot visar hur man h\\xE4mtar en image och startar en container fr\\xE5n denna, samt hur man kan k\\xF6ra kommandon inuti en k\\xF6rande container.\"), mdx(Youtube, {\n    link: \"https://youtu.be/QP97GOo6Dkw\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h4\", null, \"Kommandon som t\\xE4cks i denna demo.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# H\\xE4mta en image fr\\xE5n https://hub.docker.com/_/nginx/\\ndocker pull nginx\\n# Visar alla tillg\\xE4ngliga images lokalt\\ndocker images\\n# Startar en container fr\\xE5n nginx-image\\ndocker run nginx\\n# Visar alla k\\xF6rande och stoppade containrar\\ndocker container ls -a\\n# Tar bort en specifik container med <ID>\\ndocker container rm <ID>\\n# Startar en ny container och mappar port 8080 till port 80 i containern\\ndocker run -p 8080:80 nginx\\n# Startar en stoppad container\\ndocker start <ID>\\n# Stoppar en k\\xF6rande container\\ndocker stop <ID>\\n# Startar en interaktiv bash-session i en nginx-container\\ndocker run -it nginx bash\\n\")), mdx(\"h3\", null, \"F\\xF6rv\\xE4ntat resultat:\"), mdx(\"p\", null, \"N\\xE4r du har f\\xF6ljt dessa steg ska du kunna \\xF6ppna din webbl\\xE4sare och navigera till \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"localhost:8080\"), \". D\\xE4r b\\xF6r du se sidan \\\"Welcome to nginx\\\" som bekr\\xE4ftar att servern k\\xF6rs korrekt.\"), mdx(\"h3\", null, \"Steg 2: Dockerfiles, images, och unionfs\"), mdx(\"p\", null, \"Kort introduktion till hur man skapar en Dockerfile, bygger en image fr\\xE5n denna, och startar en container. Lager och unionfs/overlay \\xE4r en viktig del av containers och docker, s\\xE5 demot utforskar \\xE4ven hur detta fungerar och diskuterar lagring i image och tillf\\xE4llig lagring i en container.\"), mdx(Youtube, {\n    link: \"https://youtu.be/jk7g2ruBAnw\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h4\", null, \"Kommandon som t\\xE4cks i denna demo.\"), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\",\n    \"className\": \"language-bash\"\n  }, \"# Du kan ocks\\xE5 anv\\xE4nda nano eller Visual Studio Code f\\xF6r att skapa en tom Dockerfile\\nvi Dockerfile\\n# Bygg en ny Docker-image fr\\xE5n Dockerfile\\ndocker build -t <NYTT IMAGENAMN> .\\n# Ta bort en specifik Docker-image med tv\\xE5ng\\ndocker image rm -f <ID>\\n# Inspektera detaljerad information om Docker-image\\ndocker image inspect\\n# Inspektera detaljer om en specifik container\\ndocker container inspect\\n\")), mdx(\"h3\", null, \"Ytterligare anv\\xE4ndbara kommandon i detta skede:\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"docker init\"), \": Initierar ett projekt och st\\xE4ller n\\xE5gra fr\\xE5gor:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"\\xD6verskriv existerande filer? Svara \\\"Yes\\\".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Applikationsplattform? V\\xE4lj \\\"Node\\\".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Node-version? Ange \\\"20.17.0\\\".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Paketverktyg? V\\xE4lj \\\"npm\\\".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Startkommando? Skriv \\\"npm start\\\".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Serverport? Ange \\\"3000\\\".\")), mdx(\"p\", null, \"Efter att ha svarat skapas f\\xF6ljande filar:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \".dockerignore\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Dockerfile\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"compose.yaml\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"README.Docker.md\"))), mdx(\"p\", null, \"Detta s\\xE4tter upp milj\\xF6n f\\xF6r att bygga och hantera din applikation i Docker. Nu kan du anpassa Dockerfile till det du beh\\xF6ver.\"), mdx(\"h3\", null, \"Steg 3: Lagring och mounts\"), mdx(\"p\", null, \"Volymer och bind-mounts kan anv\\xE4ndas f\\xF6r att lagra filer oberoende av image, t.ex. s\\xE5 att filerna finns kvar efter en uppgradering av en image. Vi skapar en container med neo4j och anv\\xE4nder en volym f\\xF6r att spara data. Vi tittar \\xE4ven p\\xE5 hur bind-mount kan anv\\xE4nds f\\xF6r att dela filer fr\\xE5n en katalog med en container.\"), mdx(Youtube, {\n    link: \"https://youtu.be/VHw5M0-g48A\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h3\", null, \"Steg 4: Containern\\xE4tverk\"), mdx(\"p\", null, \"Vi har hittills tittat p\\xE5 hur man kan kommunicera mellan v\\xE4rdmaskin och containers. Ibland vill man skapa n\\xE4tverk som containers kan kommunicera med varandra \\xF6ver. Vi skapar en microservice i Python och Flask som kommunicerar med databasen fr\\xE5n Demo 3 \\xF6ver ett \\\"bridge\\\"-n\\xE4tverk.\"), mdx(Youtube, {\n    link: \"https://youtu.be/nkWcDc78FNs\",\n    mdxType: \"Youtube\"\n  }), mdx(\"h3\", null, \"\\xD6vning Docker\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"F\\xF6lj instruktionerna h\\xE4r: \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"introduktion-docker\"\n  }, \"\\xD6vning, Introduktion till Docker\"))), mdx(\"hr\", null), mdx(\"p\", null, \"Presentationer \\xE4r l\\xE5nade fr\\xE5n \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://coursepress.lnu.se/kurs/systemadministrationii\"\n  }, \"kursen 1DV032\"), \".\"));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#introduktion","title":"Introduktion"},{"url":"#containers","title":"Containers"},{"url":"#säkerhet","title":"Säkerhet"},{"url":"#steg-1-docker","title":"Steg 1: Docker","items":[{"url":"#kommandon-som-täcks-i-denna-demo","title":"Kommandon som täcks i denna demo."}]},{"url":"#förväntat-resultat","title":"Förväntat resultat:"},{"url":"#steg-2-dockerfiles-images-och-unionfs","title":"Steg 2: Dockerfiles, images, och unionfs","items":[{"url":"#kommandon-som-täcks-i-denna-demo-1","title":"Kommandon som täcks i denna demo."}]},{"url":"#ytterligare-användbara-kommandon-i-detta-skede","title":"Ytterligare användbara kommandon i detta skede:"},{"url":"#steg-3-lagring-och-mounts","title":"Steg 3: Lagring och mounts"},{"url":"#steg-4-containernätverk","title":"Steg 4: Containernätverk"},{"url":"#övning-docker","title":"Övning Docker"}]},"parent":{"relativePath":"vecka4-implementation/docker-teori.md"},"frontmatter":{"metaTitle":"1dv613 | vecka 4 | Containers & Docker","metaDescription":"metaDescription","fullWidth":null}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/","title":"🎉 Välkommen till Mjukvaruutvecklingsprojekt (1DV613)"}}},{"node":{"fields":{"slug":"/video-loggar","title":"Videologgar"}}},{"node":{"fields":{"slug":"/studieguiden","title":"Studieguiden"}}},{"node":{"fields":{"slug":"/studieguiden/kommunikationsstrategi","title":"Kommunikationsstrategi"}}},{"node":{"fields":{"slug":"/studieguiden/kursledning","title":"Kursledning"}}},{"node":{"fields":{"slug":"/studieguiden/kursplan","title":"Kursplan och betyg"}}},{"node":{"fields":{"slug":"/studieguiden/litteratur","title":"Kurslitteratur"}}},{"node":{"fields":{"slug":"/studieguiden/schema","title":"Schema och deadlines"}}},{"node":{"fields":{"slug":"/studieguiden/studieanvisningar","title":"Studieanvisningar"}}},{"node":{"fields":{"slug":"/studieguiden/utvarderingar","title":"Kursvärderingar"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/dokumentation","title":"Dokumentation"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision","title":"Vecka 1/2 - Planering och vision"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/todo","title":"📅 Att göra-lista"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/vision","title":"Projektvision"}}},{"node":{"fields":{"slug":"/vecka10-etik","title":"Vecka 10 - Etik & överlämning"}}},{"node":{"fields":{"slug":"/vecka10-etik/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/arbeta-i-projekt","title":"Att arbeta i projekt"}}},{"node":{"fields":{"slug":"/vecka3-krav-test","title":"Vecka 3 - Krav och testning"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/testning","title":"Testning"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka3-krav-test/vecka3-krav-test","title":"Kravhantering"}}},{"node":{"fields":{"slug":"/vecka4-implementation/arkitektur","title":"Introduktion till mjukvaruarkitektur"}}},{"node":{"fields":{"slug":"/vecka4-implementation/docker-teori","title":"Introduktion till containers"}}},{"node":{"fields":{"slug":"/vecka4-implementation","title":"Vecka 4 - Implementation"}}},{"node":{"fields":{"slug":"/vecka4-implementation/just-task-it-docker","title":"Introduktion till Docker"}}},{"node":{"fields":{"slug":"/vecka4-implementation/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering","title":"Vecka 5 - Versionshantering"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering/jobba-med-git","title":"Jobba med Git"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka5-versionshantering/versionshantering","title":"Versionshantering"}}},{"node":{"fields":{"slug":"/vecka6-drift/docker-compose-teori","title":"Introduktion till Docker compose"}}},{"node":{"fields":{"slug":"/vecka6-drift","title":"Vecka 6 - Driftsättning"}}},{"node":{"fields":{"slug":"/vecka6-drift/just-task-it-docker-compose","title":"JTI - Docker Compose"}}},{"node":{"fields":{"slug":"/vecka6-drift/just-task-it-production","title":"JTI - Production"}}},{"node":{"fields":{"slug":"/vecka6-drift/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd/ci-cd","title":"CI/CD"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd","title":"Vecka 7 - CI/CD"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd/just-task-it-deploy-pipeline","title":"JTI - Deploy through a pipeline"}}},{"node":{"fields":{"slug":"/vecka7-ci-cd/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka8-automatiska-test/automatiska-tester","title":"Automatiserad testning"}}},{"node":{"fields":{"slug":"/vecka8-automatiska-test","title":"Vecka 8 - Automatiserad testning"}}},{"node":{"fields":{"slug":"/vecka8-automatiska-test/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/extern-updragsgivare","title":"Extern uppdragsgivare"}}},{"node":{"fields":{"slug":"/vecka9-leverans","title":"Vecka 9 - Slutleverans"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/extern-updragsgivare/extern-uppdragsgivare-samverkan","title":"Samverkansinformation: studentprojekt med extern uppdragsgivare"}}},{"node":{"fields":{"slug":"/vecka9-leverans/todo","title":"Att göra lista"}}},{"node":{"fields":{"slug":"/vecka1-2-planering-vision/extern-updragsgivare/vagledning","title":"Vägledning för arbete med extern uppdragsgivare"}}}]}},"pageContext":{"id":"b1121d46-1a73-540f-a3ce-99a91f407896"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}