---
title: Build and push your first image
keywords: concepts, container, docker desktop
description: This concept page will teach you how to build and push your first image
summary: |
Learn how to build your first Docker image, a key step in containerizing your
application. We'll guide you through the process of creating an image
repository and building and pushing your image to Docker Hub. This enables
you to share your image easily within your team.
weight: 3
aliases:
- /guides/getting-started/build-and-push-first-image/
---
{{< youtube-embed 7ge1s5nAa34 >}}
## Explanation
Now that you've updated the [to-do list app](develop-with-containers.md), you’re ready to create a container image for the application and share it on Docker Hub. To do so, you will need to do the following:
1. Sign in with your Docker account
2. Create an image repository on Docker Hub
3. Build the container image
4. Push the image to Docker Hub
Before you dive into the hands-on guide, the following are a few core concepts that you should be aware of.
### Container images
If you’re new to container images, think of them as a standardized package that contains everything needed to run an application, including its files, configuration, and dependencies. These packages can then be distributed and shared with others.
### Docker Hub
To share your Docker images, you need a place to store them. This is where registries come in. While there are many registries, Docker Hub is the default and go-to registry for images. Docker Hub provides both a place for you to store your own images and to find images from others to either run or use as the bases for your own images.
In [Develop with containers](develop-with-containers.md), you used the following images that came from Docker Hub, each of which are [Docker Official Images](/manuals/docker-hub/image-library/trusted-content.md#docker-official-images):
- [node](https://hub.docker.com/_/node) - provides a Node environment and is used as the base of your development efforts. This image is also used as the base for the final application image.
- [mysql](https://hub.docker.com/_/mysql) - provides a MySQL database to store the to-do list items
- [phpmyadmin](https://hub.docker.com/_/phpmyadmin) - provides phpMyAdmin, a web-based interface to the MySQL database
- [traefik](https://hub.docker.com/_/traefik) - provides Traefik, a modern HTTP reverse proxy and load balancer that routes requests to the appropriate container based on routing rules
Explore the full catalog of [Docker Official Images](https://hub.docker.com/search?image_filter=official&q=), [Docker Verified Publishers](https://hub.docker.com/search?q=&image_filter=store), and [Docker Sponsored Open Source Software](https://hub.docker.com/search?q=&image_filter=open_source) images to see more of what there is to run and build on.
## Try it out
In this hands-on guide, you'll learn how to sign in to Docker Hub and push images to Docker Hub repository.
## Sign in with your Docker account
To push images to Docker Hub, you will need to sign in with a Docker account.
1. Open the Docker Dashboard.
2. Select **Sign in** at the top-right corner.
3. If needed, create an account and then complete the sign-in flow.
Once you're done, you should see the **Sign in** button turn into a profile picture.
## Create an image repository
Now that you have an account, you can create an image repository. Just as a Git repository holds source code, an image repository stores container images.
1. Go to [Docker Hub](https://hub.docker.com).
2. Select **Create repository**.
3. On the **Create repository** page, enter the following information:
- **Repository name** - `getting-started-todo-app`
- **Short description** - feel free to enter a description if you'd like
- **Visibility** - select **Public** to allow others to pull your customized to-do app
4. Select **Create** to create the repository.
## Build and push the image
Now that you have a repository, you are ready to build and push your image. An important note is that the image you are building extends the Node image, meaning you don't need to install or configure Node, yarn, etc. You can simply focus on what makes your application unique.