search
HomeDatabaseMysql TutorialUsing MySQL in a Docker Container for your Projects

Using MySQL in a Docker Container for your Projects

I am a firm believer of keeping my host system clean. And Docker containers are the perfect solution to this. Let's say you are working on a React app with a Node / Express backend and a MySQL server for your DB needs. Typically, you would install mysql in your host system, create a database, create a user with a password and grant the user privileges to work with that database.

Instead of wasting time in configuring this every single time for every single project, I just use a Docker image to create my MySQL database server, to be ready, up and running in a few seconds, with all the necessary setup I would ever need.

Trust me, once you figure out your workflow using this route, you will never go back to the old ways. So, here is how I go about it and a very simple, basic manner.

If you have some experience with Docker and wish to skip this tutorial and jump in with a TLDR version directly, this Gist would be much faster.

What will we need?

To use Docker, we need Docker, duh! I will not go into the detail of installing Docker here. If you aren't comfortable with a CLI or your are on Windows/MacOS, go for Docker Desktop, it will do all the heavy lifting for you behind the scenes.

Linux users could install Docker Engine with the Docker Compose plugin or Docker Desktop too if you aren't feeling it.

You typically don't need an account on Docker Hub to download public images likeMySQL official image that we will be using.

Alright, what now?

There are two ways of doing this.

Using Docker Run (Not Recommended)

To be able to directly run the container using the docker run command, you will have to have downloaded the MySQL image on your system first. To pull the image to your system, simply use this command:

docker pull mysql

Note: If you do not need a particular version of MySQL, then this command will download the latest one (the one with the latest tag). You could explore more tags and versions from the Docker Hub if you need.

Once Docker is done downloading, you can see your downloaded image like this:

docker image ls

Now, to run the container, you have to add a lot of flags with the docker run command. You can visit this link to check all the options you have. You also need to remember all the flags you need to add since missing some might throw errors or start an incapable container.

Besides, every time you wish to run your container, you will either have to fish out this long command from the terminal history, or type it out again. There is no point of that.

This is the reason why I DO NOT recommend this approach. There is a better way.

Docker Compose

We will create a Docker Compose file which will tell Docker what we need while launching the container. Once everything is laid out in the file, launching the container becomes a piece of cake.

Note: You can create your compose file with any name. If you use your own name or store your compose file in other folders, you will have to provide a flag -f to make it work. Alternatively, if you are running the command from the same folder as your file, then you can name the file docker-compose.yaml.

A Docker Compose file is a YAML file. Ours will look like this:

# This Docker Compose YAML deploys a MySQL database
services:
  container-name:

    image: mysql # Official MySQL image from Docker Hub
    restart: always

    environment:
      # Note - Root password is mandatory for the container to run and grant privileges to our User.
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}

      MYSQL_DATABASE: ${MYSQL_DATABASE} # Same name as used in your project

      # DB User Details
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}

    ports:
      # Adjust this port as per your needs -> <hostport>:<containerport>
      - 3308:3306 # DB is available at localhost:3308 on the host.

    volumes:
      - ./volumes/db-mnt:/var/lib/mysql
</containerport></hostport>

This file is also available on the Gist mentioned in the beginning.

Important To Know

  1. Port-Mapping: The first port is the host port (your system) which is mapped to the second port (the port inside the docker container). This means, in the above example, you can access the database at localhost:3308. Unless, you know what you are doing, keep the second port as 3306. This is the default port for MySQL.
  2. Volume Bind Mount: We are mounting a local volume to the container to persist the data inside the database. This makes it easy to backup and move around if needed. You could also let Docker manage it's own volume and create periodic backups on your host system. #### The Environment File To supply the necessary credentials to Docker while creating the container, we will create a .env file, just like how we do in our React or Backend apps.

You can either create this file in the same folder where your compose file is, or you can create it anywhere you like but will need to supply the path while calling docker-compose.

# Content of the Environment Variables file
MYSQL_ROOT_PASSWORD=rootpassword
MYSQL_DATABASE=nameofdatabase
MYSQL_USER=dbusername
MYSQL_PASSWORD=dbuserpassword

Once we have all this in place, we can simply use one little command and our database will be up and ready waiting for us.

docker-compose up -d

You are now ready to make a connection to the database using your preferred means.

And since we have configured our containers to run from a compose file, you could safely back it up in a git system in your repo. Just make sure you .gitignore the .env file.

The above is the detailed content of Using MySQL in a Docker Container for your Projects. For more information, please follow other related articles on the PHP Chinese website!

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to sort and rank data in MySQLHow to sort and rank data in MySQLApr 29, 2025 pm 03:48 PM

In MySQL, sorting uses the ORDERBY clause, and ranking uses the RANK(), DENSE_RANK(), and ROW_NUMBER() functions. 1. Sort: Use ORDERBY clause, such as SELECT*FROMemployeesORDERBYsalaryDESC; 2. Ranking: Use window functions, such as SELECTemployee_name, salary, RANK()OVER(ORDERBYsalaryDESC)ASrankFROMemployees; these operations are based on SQL query optimizer and execution engine, and are often used to sort quickly or merge sort, and ranking depends on window function calculation.

Creation and calling methods of MySQL stored proceduresCreation and calling methods of MySQL stored proceduresApr 29, 2025 pm 03:45 PM

To create and call stored procedures in MySQL, follow the following steps: 1. Create stored procedures: Use the CREATEPROCEDURE statement to define stored procedures, including names, parameters, and SQL statements. 2. Compile stored procedures: MySQL compiles stored procedures into executable code and stores them. 3. Call stored procedure: use CALL statement and pass parameters. 4. Execute stored procedures: MySQL executes the SQL statements in it, processes parameters and returns the result.

How to set up MySQL service automatically startsHow to set up MySQL service automatically startsApr 29, 2025 pm 03:42 PM

The MySQL service can be set to automatically start on Windows, Linux, and macOS. 1) On Windows, use the command "scconfigmysqlstart=auto" to configure. 2) On Linux, enable it using "sudosystemctlenablemysql". 3) On macOS, create and load the launchd configuration file to achieve automatic startup.

How to view detailed structure information of MySQL tablesHow to view detailed structure information of MySQL tablesApr 29, 2025 pm 03:39 PM

The methods to view the MySQL table structure include: 1. Use the DESCRIBE command to view column information; 2. Use the SHOWCREATETABLE command to view table creation statements; 3. Use information_schema to query more detailed information. These methods help to quickly understand table structure and improve work efficiency.

Detailed explanation of the installation steps of MySQL on macOS systemDetailed explanation of the installation steps of MySQL on macOS systemApr 29, 2025 pm 03:36 PM

Installing MySQL on macOS can be achieved through the following steps: 1. Install Homebrew, using the command /bin/bash-c"$(curl-fsSLhttps://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)". 2. Update Homebrew and use brewupdate. 3. Install MySQL and use brewinstallmysql. 4. Start MySQL service and use brewservicesstartmysql. After installation, you can use mysql-u

How to use conditional filtering and grouping in MySQL queryHow to use conditional filtering and grouping in MySQL queryApr 29, 2025 pm 03:33 PM

In MySQL, conditional filtering is implemented through the WHERE clause and grouping is completed through the GROUPBY clause. 1. Use the WHERE clause to filter data, such as finding employees with salary above 5,000. 2. Use the GROUPBY clause to group and aggregate data, such as counting the number of employees by department. 3. Choose the appropriate index to optimize query performance and avoid using functions or expressions as WHERE conditions. 4. Combining subqueries and EXPLAIN commands improve the efficiency of complex queries.

How to clear MySQL table data but preserve table structureHow to clear MySQL table data but preserve table structureApr 29, 2025 pm 03:30 PM

In MySQL, clearing table data but preserving table structure can be implemented through the TRUNCATETABLE and DELETE commands. 1. The TRUNCATETABLE command quickly deletes all records and resets the self-increment column. 2. The DELETE command deletes data line by line, does not reset the self-increment column, and can delete specific records in combination with the WHERE clause.

Methods to deduplicate MySQL query resultsMethods to deduplicate MySQL query resultsApr 29, 2025 pm 03:27 PM

Deduplication in MySQL mainly uses DISTINCT and GROUPBY. 1.DISTINCT is used to return unique values, such as SELECTDISTINCTname, ageFROMusers. 2. GROUPBY realizes deduplication through grouping and can perform aggregation operations, such as SELECTid, name, MAX(created_at)aslatest_dateFROMusersGROUPBYname.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment