{"id":35069706,"url":"https://github.com/nabilshadman/learning-docker","last_synced_at":"2026-05-22T03:03:28.363Z","repository":{"id":318284968,"uuid":"1070625984","full_name":"nabilshadman/learning-docker","owner":"nabilshadman","description":"Exercise files of the Learning Docker course (on LinkedIn Learning)","archived":false,"fork":false,"pushed_at":"2025-10-06T08:20:06.000Z","size":193,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-06T10:25:25.143Z","etag":null,"topics":["devops","docker"],"latest_commit_sha":null,"homepage":"https://www.linkedin.com/learning/learning-docker-17236240","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nabilshadman.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-06T08:06:35.000Z","updated_at":"2025-10-06T08:20:09.000Z","dependencies_parsed_at":"2025-10-06T10:25:27.153Z","dependency_job_id":"ceb54652-f66f-4df4-bf78-d6575bc5adc2","html_url":"https://github.com/nabilshadman/learning-docker","commit_stats":null,"previous_names":["nabilshadman/learning-docker"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/nabilshadman/learning-docker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Flearning-docker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Flearning-docker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Flearning-docker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Flearning-docker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nabilshadman","download_url":"https://codeload.github.com/nabilshadman/learning-docker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nabilshadman%2Flearning-docker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33326656,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-21T12:23:38.849Z","status":"online","status_checked_at":"2026-05-22T02:00:06.671Z","response_time":265,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["devops","docker"],"created_at":"2025-12-27T11:46:35.047Z","updated_at":"2026-05-22T03:03:28.353Z","avatar_url":"https://github.com/nabilshadman.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Learning Docker - Exercise Files\n\nA comprehensive collection of hands-on exercises and practice materials for the LinkedIn Learning course \"Learning Docker\" taught by Carlos Nunez. These files provide practical experience with Docker fundamentals, from basic container creation to troubleshooting common issues.\n\n## About This Repository\n\nThis repository contains the complete exercise files used throughout the Docker course. Each directory corresponds to a specific lesson and includes all necessary files to follow along with the instructor and practice Docker commands in real-world scenarios.\n\n## Course Information\n\n**Instructor:** Carlos Nunez (Cloud and Software Consultant, VMware)  \n**Duration:** 2 hours 6 minutes  \n**Level:** Beginner  \n\nThe course covers essential Docker concepts including containers, Dockerfiles, the Docker CLI, image management, and troubleshooting techniques.\n\n## Repository Structure\n\nThe exercises are organized by chapter and lesson number using the format `chapter_lesson`. Below is an overview of what each directory contains.\n\n### Chapter 3: Using Docker\n\n**03_05 - Create a Docker container from Dockerfiles, part 1**\n\nIntroduction to writing Dockerfiles with a practical example that demonstrates package installation, file copying, and entrypoint configuration.\n\n- `Dockerfile` - Multi-stage build demonstrating package installation and user management\n- `entrypoint.bash` - Script that validates Bash and curl installation, then fetches the current date\n\nKey concepts: Base images, package management, security practices with non-root users, entrypoint scripts\n\n**03_06 - Create a Docker container from Dockerfiles, part 2**\n\nAdvanced Dockerfile techniques building upon the previous lesson.\n\n- `Dockerfile` - Extended build configuration\n- `entrypoint.bash` - Enhanced entrypoint script\n- `server.bash` - Server implementation script\n- `server.Dockerfile` - Server-specific Dockerfile\n\nKey concepts: Multiple Dockerfiles, modular script design, server containerization\n\n**03_08 - Stopping and removing the container**\n\nPractice with container lifecycle management using a web server example.\n\n- `web-server.bash` - Web server startup script\n- `web-server.Dockerfile` - Web server container definition\n\nKey concepts: Container lifecycle, cleanup procedures, resource management\n\n**03_14_before - Challenge: Starting NGINX**\n\nA hands-on challenge to test your understanding of running web servers in containers. This directory contains the starting point for the NGINX challenge.\n\n- `web-server.bash` - Web server configuration script\n- `web-server.Dockerfile` - NGINX container setup\n- `website/` - Complete static website with HTML, CSS, JavaScript, and assets\n\nKey concepts: NGINX configuration, static file serving, port binding, volume mounting\n\n**03_14_after - Solution: Starting NGINX**\n\nThe complete solution to the NGINX challenge, showing best practices for containerizing web applications.\n\n- `website/` - Fully configured static website demonstrating the correct implementation\n\n### Chapter 4: When Things Go Wrong\n\n**04_03_before - Challenge: Fix a broken container**\n\nA troubleshooting exercise where you'll diagnose and fix a non-functional container. This represents a common real-world scenario where containers fail to run properly.\n\n- `app.sh` - Application script with potential issues\n- `Dockerfile` - Container definition that may have problems\n\nKey concepts: Debugging techniques, common failure modes, dependency issues\n\n**04_03_after - Solution: Fix a broken container**\n\nThe corrected version showing how to properly resolve container issues.\n\n- `app.sh` - Fixed application script\n- `Dockerfile` - Corrected container definition using `ubuntu:xenial` base image with proper permissions\n\nKey concepts: Base image selection, file permissions, dependency management, troubleshooting methodology\n\n## Prerequisites\n\nBefore working with these exercises, you should have:\n\n- Docker Desktop installed (Mac/Windows) or Docker Engine (Linux)\n- Basic command line familiarity\n- A text editor for viewing and modifying files\n- Access to the LinkedIn Learning course (recommended but not required)\n\n## Getting Started\n\n1. Clone this repository to your local machine:\n```bash\ngit clone \u003crepository-url\u003e\ncd learning-docker-exercises\n```\n\n2. Navigate to the exercise directory you want to work with:\n```bash\ncd 03_05\n```\n\n3. Follow the lesson instructions to build and run the containers:\n```bash\ndocker build -t exercise-name .\ndocker run exercise-name\n```\n\n## Working with the Exercises\n\nEach exercise directory is self-contained with all necessary files. The typical workflow is:\n\n1. Review the Dockerfile to understand the container configuration\n2. Examine any scripts or application files\n3. Build the Docker image using `docker build`\n4. Run the container and observe the output\n5. Experiment with modifications to deepen your understanding\n\nFor challenge exercises (those with `_before` and `_after` versions), try solving the problem yourself before looking at the solution.\n\n## Common Docker Commands\n\nHere are the essential commands you'll use throughout these exercises:\n\n```bash\n# Build an image\ndocker build -t image-name .\n\n# Run a container\ndocker run image-name\n\n# Run a container interactively\ndocker run -it image-name /bin/bash\n\n# List running containers\ndocker ps\n\n# List all containers (including stopped)\ndocker ps -a\n\n# Stop a container\ndocker stop container-id\n\n# Remove a container\ndocker rm container-id\n\n# List images\ndocker images\n\n# Remove an image\ndocker rmi image-name\n```\n\n## Troubleshooting Tips\n\nIf you encounter issues while working through the exercises:\n\n- Ensure Docker is running (check Docker Desktop or `docker ps`)\n- Verify file permissions on scripts (they should be executable)\n- Check that you're in the correct directory when building images\n- Review error messages carefully - they often indicate the specific problem\n- Use `docker logs container-id` to view container output\n- Try `docker run -it image-name /bin/bash` to explore the container interactively\n\n## Additional Resources\n\n- [Docker Documentation](https://docs.docker.com/)\n- [Docker Hub](https://hub.docker.com/) - Official Docker image registry\n- [Dockerfile Best Practices](https://docs.docker.com/develop/dev-best-practices/)\n- [Docker CLI Reference](https://docs.docker.com/engine/reference/commandline/cli/)\n\n## Course Learning Objectives\n\nBy completing these exercises, you will:\n\n- Understand the fundamental differences between containers and virtual machines\n- Create and manage Docker containers using the CLI\n- Write Dockerfiles to build custom container images\n- Bind ports and persist data from containers\n- Push images to Docker Hub and other registries\n- Troubleshoot common container issues\n- Apply Docker best practices in real-world scenarios\n\n## Notes\n\n- The `website` directories contain complete static websites used for the NGINX exercises\n- Some exercises build upon previous ones, so working through them sequentially is recommended\n- Feel free to modify the files and experiment - that's the best way to learn\n- The `_before` and `_after` directories represent challenge problems and their solutions\n\n## License\n\nThese exercise files are provided for educational purposes as part of the LinkedIn Learning course \"Learning Docker\" by Carlos Nunez.\n\n## Acknowledgments\n\nCourse created by Carlos Nunez, Cloud and Software Consultant at VMware. All exercise files and examples are designed to provide practical, hands-on experience with Docker fundamentals.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnabilshadman%2Flearning-docker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnabilshadman%2Flearning-docker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnabilshadman%2Flearning-docker/lists"}