DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Please enter at least three characters to search
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

Modernize your data layer. Learn how to design cloud-native database architectures to meet the evolving demands of AI and GenAI workkloads.

Secure your stack and shape the future! Help dev teams across the globe navigate their software supply chain security challenges.

Releasing software shouldn't be stressful or risky. Learn how to leverage progressive delivery techniques to ensure safer deployments.

Avoid machine learning mistakes and boost model performance! Discover key ML patterns, anti-patterns, data strategies, and more.

Related

  • Docker Bake: A Modern Approach to Container Building
  • How to Effortlessly Host Your Angular Website on GitHub Pages
  • Angular vs. Flutter for Web App Development: Know Which One Is Best?
  • Using Environment Variable With Angular

Trending

  • Why I Started Using Dependency Injection in Python
  • The Role of Functional Programming in Modern Software Development
  • Testing SingleStore's MCP Server
  • It’s Not About Control — It’s About Collaboration Between Architecture and Security
  1. DZone
  2. Software Design and Architecture
  3. Cloud Architecture
  4. How to Dockerize Angular App?

How to Dockerize Angular App?

Learn how to Dockerize Angular App in detail with examples and photos to help you follow along with this tutorial!

By 
Sanjay Saini user avatar
Sanjay Saini
·
Jul. 06, 20 · Tutorial
Likes (5)
Comment
Save
Tweet
Share
140.6K Views

Join the DZone community and get the full member experience.

Join For Free

As you are checking out this article so I assume you have an Angular application that you want to dockerize and you might have the same knowledge about Docker as well or at least have heard about it.

Anyways, What Is Docker?

In brief, Docker is an open-source DevOps tool designed to help developers and operations guys to streamline application development and deployment.

By dockerizing, an application means deploying and running an application using containers.

Containers allow a developer to package up an application with all of the parts it needs, such as libraries and other dependencies, and deploy it as one package.

By doing so the application can be deployed on any target environment/machine regardless of any customized settings that machine might have that could differ from the machine used for writing and testing the code. Read DZone’s guide: What is DevOps?

Thus removing the deployment issues that occur due to various environment spec mismatch.

Prerequisite

  • First, we need to have a docker installed on our machine so that we can build a docker image and run docker containers. There are different installation for Mac and Windows. For Windows 10 Professional and Enterprise install docker for desktop but if you have Windows 10 Home edition as I have then you will have to install Docker Toolbox.
  • We also need to have an account at the Docker Hub registry so that we can pull and push Docker images. It’s free so if you already haven’t one, check out this link to create one for yourself.
  • Last, we need an Angular application that we want to dockerize. So if you already have one that’s great but if you don’t then you can get the Angular app code that I am using in this article from my GitHub repository.

Get Started…

To dockerize our Angular app we need to perform the following steps.

  • Launch the Docker machine.
  • Create Dockerfile in our Angular app folder.
  • Create a Docker image from the Dockerfile.
  • And last, run the Angular app in the container using Docker image.

So let’s get started… 

Launch Docker Machine

Docker machine is a small Linux VM that hosts the Docker Engine which is a client-server application consisting of Docker Daemon and Docker CLI that interacts with Docker Daemon to create Docker images or running containers etc.

  • In case, you have installed Docker Desktop for Windows or Mac when the installation finishes, Docker Machine is launched automatically. The whale image in the notification area indicates that Docker is running, and accessible from a terminal.
  • If you have installed Docker Toolbox then there are 2 ways to create a docker-machine locally.
    • By double-clicking on the Docker QuickStart Terminal icon on your desktop.
    • Using docker-machine CLI “create” command to create a new Docker machine.

Since I have Docker Toolbox installed so I will choose the easy way and click on the QuickStart Terminal icon that will open the terminal and launch the Docker machine.

MINGW64

You can run the following docker-machine CLI command to check the Docker machine details and note the URL that we will use to open our Angular app in the browser.

$ docker-machine ls

You can do much more with docker-machine CLI commands like create, kill, start, stop Docker machine, and much more but that is not in scope for this article however you can check-out docker.com for complete documentation on docker-machine CLI and also docker CLI as well.

Our Docker setup is up and running now we will focus on creating Dockerfile for our Angular app.

Create Dockerfile

Now in the terminal change directory to your Angular app folder and create a file name “Dockerfile” without any file extension using any dev editor like VS Code or just use Notepad.

Write the following instructions in the Dockerfile and save it.

Dockerfile
 




x
23


 
1
# Stage 1
2

          
3
FROM node:10-alpine as build-step
4

          
5
RUN mkdir -p /app
6

          
7
WORKDIR /app
8

          
9
COPY package.json /app
10

          
11
RUN npm install
12

          
13
COPY . /app
14

          
15
RUN npm run build --prod
16

          
17
 
18

          
19
# Stage 2
20

          
21
FROM nginx:1.17.1-alpine
22

          
23
COPY --from=build-step /app/docs /usr/share/nginx/html



Explanation

  • In Stage 1 we are copying our app code in the “app” folder and installing app dependencies from package.json file and creating production build using Node image.
  • In Stage 2 we are using the Nginx server image to create the Nginx server and deploy our app on it by copying build items from /app/docs to Nginx server at /usr/share/Nginx/HTML location.

Note – if you are using your Angular app then replace docs with dist/<your app name> in the Dockerfile because by default build items are created at that location. In my case, I have changed it to the docs folder in the outputPath setting of the angular.json file in my app.

Create .dockerignore File

Although it’s not necessary to have this file it’s a good practice to have it since it can speed up the image build process and also keep the image lean by excluding the unnecessary code from the Docker build context so that it doesn’t get into the image.

So just the way we created Dockerfile at the same location we create .dockerignore file and add the following items that we don’t want to be copied into our docker image.

Markdown
 




xxxxxxxxxx
1
17


 
1
.git
2

          
3
.firebase
4

          
5
.editorconfig
6

          
7
/node_modules
8

          
9
/e2e
10

          
11
/docs
12

          
13
.gitignore
14

          
15
*.zip
16

          
17
*.md



Create Docker Image

Now run Docker build command to build Docker image of our app using Dockerfile that we have just created.

Note that I have given sanjaysaini2000/angular-app as name to my Docker image but you must replace it with the name you want to give to your app’s Docker image.

Also, note that the image name must be followed by the dot which means that the path of the Docker build context and Dockerfile is the current folder.

$ docker build -t sanjaysaini2000/angular-app .

docker build

This process will take 1-2 minutes to complete and in the end, you will get a successful message with an image tag name.

successfully tagged

You can run the following Docker command to list the images created along with your Angular app image. You will also find node and Nginx images that we used to create our app image and an intermediate image <none>. However, these images are not required and can be deleted.

$ docker images

angular tools

Run Docker Container

Finally, run the following command in the terminal to run your Angular app in the Docker container and make sure to replace sanjaysaini2000/angular-app with your image name in this command.

$ docker run -d -it -p 80:80/tcp --name angular-app

sanjaysaini2000/angular-app:latest

angular todos

We want to create and run an interactive container in the background so we have used options –d and –it with the Docker run command. Since the app in the container is available at port 80 so we used –p option and map the container port to the external host port using 80:80/TCP and name our container using –name option to angular-app followed by the image name.

Now open the browser and type URL HTTP://<docker machine URL>:80 in the address bar.

In my case it's http://192.168.99.100:80

You have successfully dockerized and hosted an angular app in a Docker container. Read our guide on how to perform a docker health check on your containers.

run docker container

I hope you have enjoyed this article…Cheers!!!

app Docker (software) AngularJS

Opinions expressed by DZone contributors are their own.

Related

  • Docker Bake: A Modern Approach to Container Building
  • How to Effortlessly Host Your Angular Website on GitHub Pages
  • Angular vs. Flutter for Web App Development: Know Which One Is Best?
  • Using Environment Variable With Angular

Partner Resources

×

Comments
Oops! Something Went Wrong

The likes didn't load as expected. Please refresh the page and try again.

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • support@dzone.com

Let's be friends:

Likes
There are no likes...yet! 👀
Be the first to like this post!
It looks like you're not logged in.
Sign in to see who liked this post!