{"id":23599,"date":"2025-07-01T07:07:45","date_gmt":"2025-07-01T07:07:45","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=23599"},"modified":"2025-07-12T05:38:38","modified_gmt":"2025-07-12T05:38:38","slug":"docker-lab-excercise-assignment-3-docker-volume","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/docker-lab-excercise-assignment-3-docker-volume\/","title":{"rendered":"Docker Lab, Excercise &amp; Assignment &#8211; 3"},"content":{"rendered":"\n<p>Here\u2019s a practical <strong>Lab Guide\/Tutorial<\/strong> for each Docker command you listed, with clear explanations and <strong>step-by-step examples<\/strong> using <code>httpd<\/code> (Apache) and <code>ubuntu<\/code> images.<br>This is designed so a student can follow on their laptop and actually practice each command.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Docker Command Lab Guide<\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">1. <code>cp<\/code> \u2014 Copy files\/folders between a container and the local filesystem<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Copies files\/folders <strong>from your computer to a container<\/strong> or <strong>from the container to your computer<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\n\n\n\n<p><strong>a. Copying from local to container:<\/strong><\/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\"># Start an ubuntu container in detached mode<\/span>\ndocker run -dit --name test-ubuntu ubuntu\n\n<span class=\"hljs-comment\"># Create a test file on your host<\/span>\n<span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Hello from your host!\"<\/span> &gt; myfile.txt\n\n<span class=\"hljs-comment\"># Copy file into the container's \/tmp directory<\/span>\ndocker cp myfile.txt test-ubuntu:\/tmp\/\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><strong>b. Copying from container to local:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker cp test-ubuntu:<span class=\"hljs-regexp\">\/tmp\/my<\/span>file.txt .\/copied_from_container.txt\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. <code>diff<\/code> \u2014 Inspect changes to files or directories on a container\u2019s filesystem<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Shows changes (added\/modified\/deleted files) made to the container since it started.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\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\">docker run -dit --name diff-ubuntu ubuntu\ndocker exec diff-ubuntu touch \/root\/newfile.txt\ndocker diff diff-ubuntu\n<span class=\"hljs-comment\"># Output will show A \/root\/newfile.txt (A = Added)<\/span>\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\">3. <code>inspect<\/code> \u2014 Return low-level information on Docker objects<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Displays detailed JSON info about containers, images, networks, etc.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\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\">docker run -dit --name inspect-httpd httpd\ndocker inspect inspect-httpd\n<span class=\"hljs-comment\"># Look for \"IPAddress\", \"Mounts\", \"Config\" in the output<\/span>\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\">4. <code>port<\/code> \u2014 List port mappings or a specific mapping for the container<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Shows how the container\u2019s ports are mapped to your host.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">docker run -d -p <span class=\"hljs-number\">8080<\/span>:<span class=\"hljs-number\">80<\/span> --name httpd-port httpd\ndocker port httpd-port\n<span class=\"hljs-comment\"># Output: 80\/tcp -&gt; 0.0.0.0:8080<\/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\">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\">5. <code>update<\/code> \u2014 Update configuration of one or more containers<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Change resource limits (like CPU, memory) for running containers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\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\">docker run -dit --name update-ubuntu ubuntu\n<span class=\"hljs-comment\"># Update CPU shares to 512 (default is 1024)<\/span>\ndocker update --cpu-shares <span class=\"hljs-number\">512<\/span> update-ubuntu\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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. <code>wait<\/code> \u2014 Block until one or more containers stop, then print their exit codes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Waits for a container to stop and prints its exit code.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\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\">docker run --name wait-ubuntu ubuntu sleep <span class=\"hljs-number\">5<\/span>\ndocker wait wait-ubuntu\n<span class=\"hljs-comment\"># Output: 0 (means sleep exited successfully)<\/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\">7. <code>logs<\/code> \u2014 Fetch the logs of a container<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Shows the output (stdout\/stderr) of the main process (PID 1) in a container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run -d --name logs-httpd httpd\ndocker logs logs-httpd\n<\/code><\/span><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-8\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">docker run --name logs-ubuntu ubuntu <span class=\"hljs-keyword\">echo<\/span> <span class=\"hljs-string\">\"Hello from Ubuntu\"<\/span>\ndocker logs logs-ubuntu\n<span class=\"hljs-comment\"># Output: Hello from Ubuntu<\/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\">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\">8. <code>ps<\/code> \u2014 List containers<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Shows all running containers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-9\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">docker ps                 <span class=\"hljs-comment\"># Running containers only<\/span>\ndocker ps -a              <span class=\"hljs-comment\"># All containers, including stopped<\/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\">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\">9. <code>stats<\/code> \u2014 Display a live stream of container(s) resource usage statistics<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Shows CPU, memory, network, and disk stats live.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\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\">docker run -dit --name stats-httpd httpd\ndocker stats stats-httpd\n<span class=\"hljs-comment\"># Press Ctrl+C to stop viewing stats<\/span>\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<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">10. <code>top<\/code> \u2014 Display the running processes of a container<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Lists the active processes inside a container.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run -dit --name top-ubuntu ubuntu bash\ndocker top top-ubuntu\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">11. <code>events<\/code> \u2014 Get real time events from the server<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>What it does:<\/strong><\/h3>\n\n\n\n<p>Shows real-time Docker events (container start\/stop, image pull, etc).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Example:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-11\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">docker events\n<span class=\"hljs-comment\"># In another terminal, start\/stop containers to see events in real time<\/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\">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\">12. <strong>Detach from container without stopping it:<\/strong><\/h2>\n\n\n\n<p>When you\u2019re attached to a container (e.g., after <code>docker attach<\/code>), use:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">CTRL + P + Q\n<\/code><\/span><\/pre>\n\n\n<p><strong>(This detaches your terminal from the container, but leaves the container running!)<\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Lab Flow Example (httpd &amp; ubuntu)<\/strong><\/h1>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-12\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># 1. Start containers<\/span>\ndocker run -dit --name myubuntu ubuntu\ndocker run -d -p <span class=\"hljs-number\">8080<\/span>:<span class=\"hljs-number\">80<\/span> --name myhttpd httpd\n\n<span class=\"hljs-comment\"># 2. Practice each command:<\/span>\ndocker cp myfile.txt myubuntu:\/tmp\/\ndocker diff myubuntu\ndocker inspect myhttpd\ndocker port myhttpd\ndocker update --cpu-shares <span class=\"hljs-number\">512<\/span> myhttpd\ndocker wait myubuntu\ndocker logs myhttpd\ndocker ps\ndocker ps -a\ndocker stats myhttpd\ndocker top myubuntu\ndocker events\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-12\"><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\"><strong>Summary Table<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>What it Does<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td>cp<\/td><td>Copy files to\/from container<\/td><td><code>docker cp foo.txt cont:\/tmp\/<\/code><\/td><\/tr><tr><td>diff<\/td><td>Show filesystem changes<\/td><td><code>docker diff cont<\/code><\/td><\/tr><tr><td>inspect<\/td><td>Show low-level object info<\/td><td><code>docker inspect cont<\/code><\/td><\/tr><tr><td>port<\/td><td>Show port mappings<\/td><td><code>docker port cont<\/code><\/td><\/tr><tr><td>update<\/td><td>Change container resources<\/td><td><code>docker update --cpu-shares 512<\/code><\/td><\/tr><tr><td>wait<\/td><td>Wait for container exit<\/td><td><code>docker wait cont<\/code><\/td><\/tr><tr><td>logs<\/td><td>Show container logs (PID 1 output)<\/td><td><code>docker logs cont<\/code><\/td><\/tr><tr><td>ps<\/td><td>List containers<\/td><td><code>docker ps -a<\/code><\/td><\/tr><tr><td>stats<\/td><td>Live resource stats<\/td><td><code>docker stats cont<\/code><\/td><\/tr><tr><td>top<\/td><td>Show processes in container<\/td><td><code>docker top cont<\/code><\/td><\/tr><tr><td>events<\/td><td>Real-time Docker events<\/td><td><code>docker events<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><\/h3>\n\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_14061\"><iframe loading=\"lazy\"  id=\"_ytid_45268\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&autoplay=0&cc_load_policy=0&cc_lang_pref=&iv_load_policy=1&loop=0&rel=1&fs=1&playsinline=0&autohide=2&theme=dark&color=red&controls=1&disablekb=0&\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_14061\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Here\u2019s a practical Lab Guide\/Tutorial for each Docker command you listed, with clear explanations and step-by-step examples using httpd (Apache) and ubuntu images.This is designed so a student can follow&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[4862],"tags":[],"class_list":["post-23599","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/23599","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=23599"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/23599\/revisions"}],"predecessor-version":[{"id":49906,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/23599\/revisions\/49906"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=23599"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=23599"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=23599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}