Skip to main content

Docker - Setting MySQL

Docker is a strong platform that makes it easy to deploy and manage apps using containers. In this guide on Docker - Setting MySQL, we will look at how to run MySQL databases with Docker. This helps with scaling and moving apps around while keeping things consistent in different places.

Knowing Docker - Setting MySQL is important for developers and system admins. They want to make database management easier. We will talk about important topics. This includes how to pull the MySQL Docker image and how to create and set up a MySQL container. We will also see how to use Docker volumes for keeping data safe.

Moreover, we will explain how to manage MySQL containers with Docker Compose. This will give us a good understanding for deploying MySQL in Docker well.

Docker Installation

To set up MySQL with Docker, we first need to install Docker on our system. Docker works on many platforms like Windows, macOS, and Linux. Here is a simple guide to install Docker for each operating system.

For Windows:

  1. Download Docker Desktop from the official Docker website.
  2. We run the installer and follow the steps to install.
  3. After it installs, we launch Docker Desktop and finish the setup.

For macOS:

  1. Download Docker Desktop for Mac from the official Docker website.
  2. We drag the Docker icon into our Applications folder.
  3. Then, we launch Docker from Applications and finish the setup.

For Linux:

  1. We use the package manager for our distribution to install Docker. For example, if we use Ubuntu, we can do this:

    sudo apt update
    sudo apt install docker.io
  2. Next, we start and enable Docker:

    sudo systemctl start docker
    sudo systemctl enable docker
  3. We check if the installation is successful with:

    docker --version

After we install, we need to make sure we can run Docker commands without using sudo. We can add our user to the Docker group by running:

sudo usermod -aG docker $USER

Now we are ready to go and pull the MySQL Docker image.

Pulling the MySQL Docker Image

To set up MySQL in Docker, we first need to pull the MySQL Docker image from Docker Hub. This image has all we need to run MySQL in a container. We can get the latest version of the MySQL image with this command:

docker pull mysql:latest

This command will get the latest MySQL image. If we want a specific version, we can change latest to the version we need, like mysql:5.7 or mysql:8.0.

After we pull the image, we can check the downloaded images by running:

docker images

This will show us all images on our local machine, including the MySQL image we just downloaded.

For better management of MySQL containers, we can look at Docker Compose. It helps us with multi-container setups. We may also want to learn about Docker Networking to make sure our MySQL container can talk to other services.

Now that we have the MySQL Docker image, we can create a MySQL container for our applications.

Creating a MySQL Container

To create a MySQL container with Docker, we need to run a command that uses the MySQL image and sets some important options. Here is a simple guide:

  1. Pull the MySQL Image: First, we should get the MySQL Docker image from Docker Hub. We can do this with the command below:

    docker pull mysql:latest
  2. Run the MySQL Container: Next, we use the docker run command to make and start a new MySQL container. Here’s an example command:

    docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=root_password -d -p 3306:3306 mysql:latest

    In this command:

    • --name mysql-container gives a name to our container.
    • -e MYSQL_ROOT_PASSWORD=root_password sets the password for the root user in MySQL.
    • -d runs the container in the background.
    • -p 3306:3306 connects the host port 3306 to the container’s port 3306.
  3. Verify the Container: We can check if the MySQL container is running by using this command:

    docker ps

After these steps, we have made a MySQL container. Now we can set environment variables and manage the container. For more info on managing containers, see our guide on Docker Compose.

Configuring MySQL Environment Variables

When we set up MySQL using Docker, we need to configure environment variables. This helps us customize how the database behaves and makes sure it starts correctly. Here are some important environment variables we can set when we create a MySQL container:

  • MYSQL_ROOT_PASSWORD: This sets the password for the MySQL root user. We must use this variable.
  • MYSQL_DATABASE: This automatically makes a new database with the name we choose.
  • MYSQL_USER: This creates a new user with the name we want.
  • MYSQL_PASSWORD: This sets the password for the new user we created.

Here is an example of how we can set these environment variables when we create a MySQL Docker container:

docker run --name mysql-container \
    -e MYSQL_ROOT_PASSWORD=my-secret-pw \
    -e MYSQL_DATABASE=mydb \
    -e MYSQL_USER=myuser \
    -e MYSQL_PASSWORD=myuserpw \
    -p 3306:3306 \
    -d mysql:latest

This command starts a MySQL container called mysql-container. It sets the root password. It also creates a new database and a user with the credentials we defined. For more details on how to set this up, we can look at the official MySQL Docker documentation.

Setting these environment variables correctly is very important. It helps keep our MySQL instance secure and running well in Docker. If we want to know more about managing Docker containers, we can check our guide on Docker Compose.

Exposing MySQL Ports

When we set up MySQL in Docker, exposing the right ports is important. This helps MySQL container talk with outside applications. By default, MySQL uses port 3306. To expose this port, we need to map it from the container to our host machine when we create the container.

Here is how we can expose the MySQL port when we create a Docker container:

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -d -p 3306:3306 mysql:latest

In this command:

  • --name mysql-container: This gives a name to the container.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw: This sets the root password for MySQL.
  • -d: This runs the container in detached mode.
  • -p 3306:3306: This maps port 3306 of the container to port 3306 of the host.

After we run this command, our MySQL server will be reachable from our host at localhost:3306. We should check that our firewall settings allow traffic on this port. This way, we can communicate with client applications.

For more settings and advanced networking options, we can look at our guide on Docker Networking. Good port management is key when we deploy applications using Docker. This includes working with other databases like MongoDB or services like Node.js.

Accessing MySQL from the Host

To access MySQL that runs in a Docker container from our host system, we need to make sure the MySQL container is set up right. It must expose the ports we need. By default, MySQL listens on port 3306. When we create our MySQL container, we can map this port to our host using the -p flag.

Here is how we can create a MySQL container and access it from the host:

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=my-secret-pw -p 3306:3306 -d mysql:latest

In this command:

  • --name mysql-container gives a name to our container.
  • -e MYSQL_ROOT_PASSWORD=my-secret-pw sets the root password.
  • -p 3306:3306 connects port 3306 of our container to port 3306 on the host.
  • -d starts the container in detached mode.

After the container is running, we can access MySQL from the host using a MySQL client or the command line:

mysql -h 127.0.0.1 -P 3306 -u root -p

It will ask for the password. We enter the one we set before. For more configurations, we can check the Docker - Setting MySQL documentation. Accessing MySQL from the host helps us manage databases easily while we use the benefits of Docker.

Using Docker Volumes for Data Persistence

When we set up MySQL in Docker, we need to make sure the data stays safe. This helps us avoid losing data when we stop or remove containers. Docker volumes give us a good way to manage this.

To make a volume for our MySQL container, we can use this command:

docker volume create mysql_data

Next, when we create our MySQL container, we can connect the volume using the -v flag. This way, our data will stay safe:

docker run --name mysql_container -e MYSQL_ROOT_PASSWORD=my-secret-pw -v mysql_data:/var/lib/mysql -d mysql:latest

In this command:

  • mysql_data is the name of the volume we created.
  • /var/lib/mysql is where MySQL keeps its data inside the container.

Using volumes helps us keep the data safe. It also makes it easy to upgrade and backup. For more info on Docker volume management, we can check our guide on Docker Volumes.

By using Docker volumes for data persistence in our MySQL setup, we can make sure our database stays safe. Even if we remove or recreate the container, our data will still be there. This is a good practice in Docker container management.

Managing MySQL Containers with Docker Compose

Managing MySQL containers is easier with Docker Compose. It helps us work with many containers in Docker. With Docker Compose, we can set up our MySQL service in a docker-compose.yml file. This way, we can configure and manage it easily.

Here is a simple example of a docker-compose.yml for a MySQL container:

version: "3.7"

services:
  mysql:
    image: mysql:latest
    container_name: mysql_container
    environment:
      MYSQL_ROOT_PASSWORD: example_password
      MYSQL_DATABASE: example_db
      MYSQL_USER: user
      MYSQL_PASSWORD: user_password
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

In this setup, we do several things:

  • We pull the MySQL image from Docker Hub.
  • We set environment variables for the root password, database name, user, and user password.
  • We expose port 3306 for outside access.
  • We create a Docker volume called mysql_data to keep our data safe.

To start the MySQL container, we just run:

docker-compose up -d

This command starts the MySQL container in detached mode. For more advanced settings and options, we can check the Docker Compose documentation.

Using Docker Compose to manage MySQL containers helps us work better and keeps our development environment consistent.

Docker - Setting MySQL - Full Example

In this guide, we will show how to set up MySQL using Docker. We will pull the MySQL image, create a container, set it up, and access it from our host.

  1. Pull the MySQL Image
    First, we need to pull the latest MySQL image from Docker Hub. We can do this with the command:

    docker pull mysql:latest
  2. Create a MySQL Container
    Next, we create a MySQL container. We need to change <password> to the root password we want:

    docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=<password> -d mysql:latest
  3. Configure Environment Variables
    We can set extra environment variables, like the database name. Here is how:

    -e MYSQL_DATABASE=mydb
  4. Expose Ports
    To reach MySQL from our host, we need to expose port 3306:

    -p 3306:3306
  5. Access MySQL
    We can connect to the MySQL server with a MySQL client using this command:

    mysql -h 127.0.0.1 -P 3306 -u root -p
  6. Using Docker Volumes
    To keep our data safe, we use volumes:

    -v mysql-data:/var/lib/mysql
  7. Docker Compose Example
    To make things easier, we can use Docker Compose. We will create a file called docker-compose.yml:

    version: "3"
    services:
      mysql:
        image: mysql:latest
        environment:
          MYSQL_ROOT_PASSWORD: <password>
          MYSQL_DATABASE: mydb
        ports:
          - "3306:3306"
        volumes:
          - mysql-data:/var/lib/mysql
    volumes:
      mysql-data:

This example shows how we can set up Docker - Setting MySQL for our development work. For more help on managing Docker containers, we can check our articles on Docker Compose and Docker Volumes.

Conclusion

In this article about Docker - Setting MySQL, we looked at the main steps for installing Docker. We also learned how to pull the MySQL image and create a MySQL container with the right setup.

When we understand these ideas, we can manage MySQL databases better in a Docker environment.

For more information, you can check our guides on Docker - Setting Nginx and Docker Volumes.

Comments