{"id":23597,"date":"2025-07-01T04:22:22","date_gmt":"2025-07-01T04:22:22","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=23597"},"modified":"2025-07-12T05:38:38","modified_gmt":"2025-07-12T05:38:38","slug":"docker-lab-excercise-assignment-2","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/docker-lab-excercise-assignment-2\/","title":{"rendered":"Docker Lab, Excercise &#038; Assignment &#8211; 2"},"content":{"rendered":"\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 1: How to Access the Docker Container<\/h2>\n\n\n\n<p>Accessing containers is a fundamental skill. Whether you want to debug, update configuration, or inspect running services, you\u2019ll need to \u201cget inside\u201d the container or reach its running applications.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Scenario:<\/strong><\/h3>\n\n\n\n<p>You are running an Apache HTTP Server (<code>httpd<\/code>) in a Docker container. How do you access the server or the container itself?<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 1: Go Inside Using <code>docker exec<\/code><\/strong><\/h3>\n\n\n\n<p>The <code>docker exec<\/code> command lets you start a new interactive shell session inside a running container.<\/p>\n\n\n\n<p><strong>Step-by-Step Example (using httpd):<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Run an httpd container in the background:<\/strong> <code>docker run -d --name my-httpd httpd<\/code><\/li>\n\n\n\n<li><strong>Access the container shell using <code>exec<\/code>:<\/strong> <code>docker exec -it my-httpd \/bin\/bash<\/code><ul><li>The <code>-it<\/code> flags mean interactive terminal.<\/li><li><code>\/bin\/bash<\/code> starts a bash shell.<\/li><\/ul>Note: Some images (like <code>httpd<\/code>) might only have <code>\/bin\/sh<\/code>. Try that if <code>\/bin\/bash<\/code> is missing.<\/li>\n\n\n\n<li><strong>You\u2019re now inside the container! Try:<\/strong> <code>ls \/usr\/local\/apache2\/htdocs<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Method 2: Access via IP Address (Container Networking)<\/strong><\/h3>\n\n\n\n<p>You can access running services inside a container using the container\u2019s IP address (on the Docker bridge network) <strong>from your host<\/strong>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Example: Find the IP address and access httpd homepage<\/strong><\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Find the container\u2019s IP address:<\/strong><code>docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' my-httpd<\/code>\n<ul class=\"wp-block-list\">\n<li>Output: e.g., <code>172.17.0.2<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Access the HTTP server using <code>curl<\/code>:<\/strong> <code>curl http:\/\/172.17.0.2\/<\/code><ul><li>This should return the Apache HTTP Server default page HTML.<\/li><\/ul><strong>Note:<\/strong> By default, Docker containers are on a private bridge network. <code>curl<\/code> using the container\u2019s IP works <strong>from the host machine<\/strong>. To access from outside, you must use port mapping (see below).<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Bonus: Expose the Container on a Host Port<\/strong><\/h4>\n\n\n\n<p>To access the container\u2019s web server from your browser or network, map container\u2019s port 80 to host port 8080:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">docker<\/span> <span class=\"hljs-selector-tag\">run<\/span> <span class=\"hljs-selector-tag\">-d<\/span> <span class=\"hljs-selector-tag\">--name<\/span> <span class=\"hljs-selector-tag\">my-httpd<\/span> <span class=\"hljs-selector-tag\">-p<\/span> 8080<span class=\"hljs-selector-pseudo\">:80<\/span> <span class=\"hljs-selector-tag\">httpd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Now, open <a href=\"http:\/\/localhost:8080\/\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:8080<\/a> in your browser.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 2: Docker Run Commands (With Examples)<\/h2>\n\n\n\n<p>The <code>docker run<\/code> command is the workhorse of Docker. It\u2019s used to pull images, create and start containers, and decide whether to attach to their console or run in the background.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>A. <code>docker run<\/code> \u2013 Foreground Mode (Attached)<\/strong><\/h3>\n\n\n\n<p>This command:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pulls the image if not available locally<\/li>\n\n\n\n<li>Creates a container from it<\/li>\n\n\n\n<li>Starts the container<\/li>\n\n\n\n<li>Attaches your terminal to its output<\/li>\n<\/ul>\n\n\n\n<p><strong>Example with Ubuntu:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run -it ubuntu\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Launches an Ubuntu container and attaches your terminal.<\/li>\n\n\n\n<li>You get a shell prompt (<code>root@containerid:\/#<\/code>).<\/li>\n\n\n\n<li>Exit by typing <code>exit<\/code>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Example with httpd (Not interactive):<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker run httpd\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>This attaches output of Apache server to your terminal (not common; it will show logs).<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B. <code>docker run -d<\/code> \u2013 Detached Mode (Background)<\/strong><\/h3>\n\n\n\n<p><code>-d<\/code> stands for &#8220;detached.&#8221; You won&#8217;t see the container\u2019s output in your terminal.<\/p>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">docker<\/span> <span class=\"hljs-selector-tag\">run<\/span> <span class=\"hljs-selector-tag\">-d<\/span> <span class=\"hljs-selector-tag\">--name<\/span> <span class=\"hljs-selector-tag\">my-httpd<\/span> <span class=\"hljs-selector-tag\">-p<\/span> 8080<span class=\"hljs-selector-pseudo\">:80<\/span> <span class=\"hljs-selector-tag\">httpd<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>The container runs in the background.<\/li>\n\n\n\n<li>Visit <code>http:\/\/localhost:8080<\/code> in your browser to see the Apache welcome page.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Manual Attach: <code>docker attach<\/code><\/strong><\/h3>\n\n\n\n<p>If you want to attach your terminal to a running container\u2019s main process output:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker attach my-httpd\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>(To detach, use <code>Ctrl + p<\/code> then <code>Ctrl + q<\/code>.)<\/li>\n<\/ul>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p><strong>Tip:<\/strong> <code>docker attach<\/code> works best for containers running foreground processes (like <code>httpd<\/code> or <code>ubuntu<\/code> with a shell).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Part 3: Useful Docker Commands for Monitoring &amp; Management<\/h2>\n\n\n\n<p>Learn to monitor, inspect, and debug running containers:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Command<\/th><th>Purpose<\/th><th>Example<\/th><\/tr><\/thead><tbody><tr><td><code>logs<\/code><\/td><td>Fetch logs from a container<\/td><td><code>docker logs my-httpd<\/code><\/td><\/tr><tr><td><code>ps<\/code><\/td><td>List running containers<\/td><td><code>docker ps<\/code><\/td><\/tr><tr><td><code>stats<\/code><\/td><td>Show real-time resource usage (CPU, RAM, etc.)<\/td><td><code>docker stats<\/code><\/td><\/tr><tr><td><code>top<\/code><\/td><td>Display processes running inside a container<\/td><td><code>docker top my-httpd<\/code><\/td><\/tr><tr><td><code>events<\/code><\/td><td>Get real-time events from the Docker daemon<\/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\"><strong>A. Fetching Container Logs<\/strong><\/h3>\n\n\n\n<p>To see what\u2019s happening inside your container:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker logs my-httpd\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Shows output from the httpd process (access, error logs).<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>B. Listing Containers<\/strong><\/h3>\n\n\n\n<p>List only running containers:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker ps\n<\/code><\/span><\/pre>\n\n\n<p>List all containers (including stopped):<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker ps -a\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>C. Live Resource Usage Stats<\/strong><\/h3>\n\n\n\n<p>See real-time CPU, memory, and network usage for all containers:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker stats\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\"><strong>D. Inspect Processes Inside a Container<\/strong><\/h3>\n\n\n\n<p>See what\u2019s running inside:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker top my-httpd\n<\/code><\/span><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Displays a process table, similar to <code>ps aux<\/code>.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>E. Real-Time Docker Events<\/strong><\/h3>\n\n\n\n<p>Track what\u2019s happening on your Docker host (container start\/stop, images pulled, etc.):<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker events\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\"><strong>Summary Table: Key Docker Commands<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Task<\/th><th>Command Example<\/th><\/tr><\/thead><tbody><tr><td>Start an interactive Ubuntu shell<\/td><td><code>docker run -it ubuntu<\/code><\/td><\/tr><tr><td>Run Apache HTTPD in background<\/td><td><code>docker run -d --name my-httpd -p 8080:80 httpd<\/code><\/td><\/tr><tr><td>Exec into running container shell<\/td><td><code>docker exec -it my-httpd \/bin\/bash<\/code><\/td><\/tr><tr><td>Find container IP address<\/td><td><code>docker inspect -f '{{.NetworkSettings.IPAddress}}' my-httpd<\/code><\/td><\/tr><tr><td>View container logs<\/td><td><code>docker logs my-httpd<\/code><\/td><\/tr><tr><td>List running containers<\/td><td><code>docker ps<\/code><\/td><\/tr><tr><td>View container stats<\/td><td><code>docker stats<\/code><\/td><\/tr><tr><td>See processes in container<\/td><td><code>docker top my-httpd<\/code><\/td><\/tr><tr><td>Attach terminal to running container<\/td><td><code>docker attach my-httpd<\/code><\/td><\/tr><tr><td>View 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<h1 class=\"wp-block-heading\"><strong>Lab: Try It Yourself<\/strong><\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">1. <strong>Run httpd and access the server via browser:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">docker<\/span> <span class=\"hljs-selector-tag\">run<\/span> <span class=\"hljs-selector-tag\">-d<\/span> <span class=\"hljs-selector-tag\">--name<\/span> <span class=\"hljs-selector-tag\">lab-httpd<\/span> <span class=\"hljs-selector-tag\">-p<\/span> 8081<span class=\"hljs-selector-pseudo\">:80<\/span> <span class=\"hljs-selector-tag\">httpd<\/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\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>Open <a href=\"http:\/\/localhost:8081\/\" target=\"_blank\" rel=\"noopener\">http:\/\/localhost:8081<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">2. <strong>Enter the container shell and check Apache root:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker exec -it lab-httpd \/bin\/bash\nls \/usr\/local\/apache2\/htdocs\n<\/code><\/span><\/pre>\n\n\n<h3 class=\"wp-block-heading\">3. <strong>Get container IP and access via curl:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">docker inspect -f <span class=\"hljs-string\">'{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}'<\/span> lab-httpd\ncurl http:<span class=\"hljs-comment\">\/\/&lt;container-ip&gt;\/<\/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\">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<h3 class=\"wp-block-heading\">4. <strong>Check resource stats and logs:<\/strong><\/h3>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">docker stats\ndocker logs lab-httpd\ndocker top lab-httpd\n<\/code><\/span><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Here\u2019s a <strong>short, practical tutorial<\/strong> for understanding and using containers, including PID 1 concepts, basic Docker usage, and how container networking works. This is ideal for quick learning, labs, or sharing with new team members.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">Quick Tutorial: Using Containers &amp; Understanding PID 1<\/h1>\n\n\n\n<h2 class=\"wp-block-heading\">1. <strong>How to Use a Container<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>a. Go Inside a Running Container<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>List files:<\/strong> <code>docker exec &lt;container_id> ls<\/code><\/li>\n\n\n\n<li><strong>Get an interactive shell:<\/strong> <code>docker exec -it &lt;container_id> \/bin\/bash<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>b. How to Access Container from Outside<\/strong><\/h3>\n\n\n\n<p>Containers usually run <strong>inside a VM or physical server<\/strong>:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-attr\">&#091; YOU ]<\/span> <span class=\"hljs-selector-tag\">---<\/span>&gt; <span class=\"hljs-selector-attr\">&#091;VM IP:port]<\/span> <span class=\"hljs-selector-tag\">---<\/span>&gt; <span class=\"hljs-selector-tag\">Redirected<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-attr\">&#091;Container IP:port]<\/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\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Expose container ports to outside:<\/strong> <code>docker run -d -p 80:80 httpd # VM:80 --> Container:80 docker run -d -p 81:80 httpd # VM:81 --> Container:80 docker run -d -p 82:80 httpd # VM:82 --> Container:80<\/code><\/li>\n\n\n\n<li>Now, access using: <code>http:\/\/&lt;VM-IP>:80 http:\/\/&lt;VM-IP>:81 http:\/\/&lt;VM-IP>:82<\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2. <strong>Docker RUN Basics<\/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><\/tr><\/thead><tbody><tr><td><code>docker run httpd<\/code><\/td><td>Pull + create + start + attach to PID 1 (<code>httpd<\/code>)<\/td><\/tr><tr><td><code>docker run -d httpd<\/code><\/td><td>Pull + create + start, run in background<\/td><\/tr><tr><td><code>docker attach &lt;container_id&gt;<\/code><\/td><td>Attach to running container\u2019s main process (PID 1)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3. <strong>The Concept of PID 1<\/strong><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Physical\/VM:<\/strong>\n<ul class=\"wp-block-list\">\n<li>System is running because <strong>PID 1 (init\/systemd)<\/strong> is running.<\/li>\n\n\n\n<li><strong>PID 1 is always the main kernel\/system process.<\/strong><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Container:<\/strong>\n<ul class=\"wp-block-list\">\n<li>Container is running because <strong>PID 1 is running.<\/strong><\/li>\n\n\n\n<li><strong>PID 1 can be any executable<\/strong> (bash, nginx, java, etc.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><strong>Examples:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you run: <code>docker run ubuntu bash<\/code>\n<ul class=\"wp-block-list\">\n<li><code>bash<\/code> is PID 1 in the container.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If you run: <code>docker run mysql<\/code>\n<ul class=\"wp-block-list\">\n<li><code>mysqld<\/code> is PID 1 in the container.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>If PID 1 <strong>exits<\/strong>, the <strong>container stops<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4. <strong>Sample Lab\/Commands<\/strong><\/h2>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Create a container (stopped state)<\/span>\ndocker create httpd\n\n<span class=\"hljs-comment\"># List running containers<\/span>\ndocker ps\n\n<span class=\"hljs-comment\"># List all containers (including stopped)<\/span>\ndocker ps -a\n\n<span class=\"hljs-comment\"># Start a container<\/span>\ndocker start &lt;container_id&gt;\n\n<span class=\"hljs-comment\"># Exec into a container and list files<\/span>\ndocker exec &lt;container_id&gt; ls\n\n<span class=\"hljs-comment\"># Exec into a container and see processes<\/span>\ndocker exec &lt;container_id&gt; ps\n\n<span class=\"hljs-comment\"># Attach to a container's terminal<\/span>\ndocker attach &lt;container_id&gt;\n\n<span class=\"hljs-comment\"># Run Ubuntu interactively (PID 1 = bash)<\/span>\ndocker run -it ubuntu\n\n<span class=\"hljs-comment\"># Run a process in the background<\/span>\ndocker run -d httpd\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\">5. <strong>Networking Recap<\/strong><\/h2>\n\n\n\n<p>You access containers through the VM\u2019s public IP and mapped port:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-attr\">&#091;Your Browser]<\/span> <span class=\"hljs-selector-tag\">---<\/span>&gt; <span class=\"hljs-selector-attr\">&#091;VM Public IP:80]<\/span> <span class=\"hljs-selector-tag\">---<\/span>&gt; <span class=\"hljs-selector-attr\">&#091;Container:80]<\/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\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<ul class=\"wp-block-list\">\n<li>For port mapping:<br><code>docker run -d -p &lt;host_port>:&lt;container_port> &lt;image><\/code><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6. <strong>Summary Table<\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Where<\/th><th>Why is it running?<\/th><th>What is PID 1?<\/th><\/tr><\/thead><tbody><tr><td>Physical Server<\/td><td>PID 1 running<\/td><td>Kernel system (init)<\/td><\/tr><tr><td>Virtual Machine<\/td><td>PID 1 running<\/td><td>Kernel system (init)<\/td><\/tr><tr><td>Container<\/td><td>PID 1 running<\/td><td>Any executable you run<\/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\"><strong>Remember:<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In containers, <strong>your process is PID 1<\/strong>.<\/li>\n\n\n\n<li>If PID 1 stops, <strong>container stops<\/strong>.<\/li>\n\n\n\n<li>Use <code>docker ps<\/code>, <code>docker exec<\/code>, <code>docker run<\/code>, and port mapping for management and access.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_68060\"><iframe loading=\"lazy\"  id=\"_ytid_29374\"  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_68060\"  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>Part 1: How to Access the Docker Container Accessing containers is a fundamental skill. Whether you want to debug, update configuration, or inspect running services, you\u2019ll need to \u201cget inside\u201d&#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-23597","post","type-post","status-publish","format-standard","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/23597","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=23597"}],"version-history":[{"count":4,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/23597\/revisions"}],"predecessor-version":[{"id":49904,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/23597\/revisions\/49904"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=23597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=23597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=23597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}