mirror of
https://github.com/bitnami/containers.git
synced 2026-03-21 15:29:05 +08:00
Improved README
This commit is contained in:
@@ -1,86 +1,457 @@
|
||||
# Bitnami MariaDB Docker Container
|
||||
# What is MariaDB?
|
||||
|
||||
## Introduction to Bitnami containers
|
||||
Bitnami provides easy-to-use, consistently configured, and always up-to-date container images. [Click here](https://bitnami.com) for more information on our packaging approach.
|
||||
|
||||
## What is MariaDB?
|
||||
MariaDB is a fast, reliable, scalable, and easy to use open-source relational database system. MariaDB Server is intended for mission-critical, heavy-load production systems as well as for embedding into mass-deployed software.
|
||||
|
||||
## Usage
|
||||
You can instantiate a Bitnami MariaDB container by doing:
|
||||
# TLDR
|
||||
|
||||
```
|
||||
HOST_MARIADB_CONF_DIR=`pwd`/conf
|
||||
HOST_MARIADB_DATA_DIR=`pwd`/data
|
||||
CONTAINER_MARIADB_SERVER_NAME=mariadb
|
||||
docker run -it \
|
||||
-v $HOST_MARIADB_CONF_DIR:/conf \
|
||||
-v $HOST_MARIADB_DATA_DIR:/data \
|
||||
--name $CONTAINER_MARIADB_SERVER_NAME
|
||||
bitnami/mariadb
|
||||
```bash
|
||||
docker run --name mariadb bitnami/mariadb
|
||||
```
|
||||
|
||||
## Data
|
||||
MariaDB data lives in $HOST_MARIADB_DATA_DIR on the host. Mapping an empty directory to `/data` inside the container will initialize the database.
|
||||
|
||||
## Configuration
|
||||
|
||||
### my.cnf
|
||||
MariaDB configuration files live in $HOST_MARIADB_CONF_DIR on the host. You can edit the default or place your own `my.cnf` file in there.
|
||||
|
||||
### Custom arguments/options
|
||||
You can specify custom arguments or options to the MariaDB server command, e.g., specifying a different port:
|
||||
## Docker Compose
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
```
|
||||
docker run ... bitnami/mariadb --port=4000
|
||||
```
|
||||
The following options cannot be overridden:
|
||||
|
||||
# Get this image
|
||||
|
||||
The recommended way to get the Bitnami MariaDB Docker Container is to pull the prebuilt image from the [Docker Hub Registry](https://hub.docker.com).
|
||||
|
||||
```bash
|
||||
docker pull bitnami/mariadb:5.5.42-0
|
||||
```
|
||||
--defaults-file=/opt/bitnami/mysql/my.cnf
|
||||
--log-error=/opt/bitnami/mysql/logs/mysqld.log
|
||||
--basedir=/opt/bitnami/mysql
|
||||
--datadir=/opt/bitnami/mysql/data
|
||||
--plugin-dir=/opt/bitnami/mysql/lib/plugin
|
||||
|
||||
To always get the latest version, pull the `latest` tag.
|
||||
|
||||
```bash
|
||||
docker pull bitnami/mariadb:latest
|
||||
```
|
||||
|
||||
If you wish, you can also build the image yourself.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/bitnami/docker-mariadb.git
|
||||
cd docker-mariadb
|
||||
docker build -t bitnami/mariadb
|
||||
```
|
||||
|
||||
# Persisting your database
|
||||
|
||||
If you remove the container all your data will be lost, and the next time you run the container the
|
||||
database will be reinitialized. To avoid this loss of data, you should mount a volume that will host
|
||||
the data.
|
||||
|
||||
**Note!**
|
||||
If you have already started using your database, follow the steps on
|
||||
[backing up](#backing-up-your-database) and [restoring](#restoring-a-backup) to pull the data from
|
||||
your running container down to your host.
|
||||
|
||||
The MariaDB container exposes a volume at `/bitnami/mariadb/data`, mounting a volume at this
|
||||
location will replace the container data with your own volume. If your volume is empty, the database
|
||||
will be initialized.
|
||||
|
||||
```bash
|
||||
docker run -v /path/to/data:/bitnami/mariadb/data bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
volumes:
|
||||
- /path/to/data:/bitnami/mariadb/data
|
||||
```
|
||||
|
||||
# Linking
|
||||
|
||||
If you want to connect to your MariaDB server inside another container, you can use the linking
|
||||
system provided by Docker.
|
||||
|
||||
## Connecting a MySQL client container to the MariaDB server container
|
||||
|
||||
### Step 1: Run the MariaDB container with a specific name
|
||||
|
||||
The first step is to start our MariaDB server.
|
||||
|
||||
Docker's linking system uses container ids or names to reference containers. We can explicitly
|
||||
specify a name for our MariaDB server to make it easier to connect to other containers.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb-server bitnami/mariadb
|
||||
```
|
||||
|
||||
### Step 2: Run MariaDB as a MySQL client and link to our server
|
||||
|
||||
Now that we have our MariaDB server running, we can create another container that links to it by
|
||||
giving Docker the `--link` option. This option takes the id or name of the container we want to link
|
||||
it to as well as a hostname to use inside the container, separated by a colon. For example, to have
|
||||
our MariaDB server accessible in another container with `mariadb` as it's hostname we would pass
|
||||
`--link mariadb-server:mariadb` to the Docker run command.
|
||||
|
||||
The Bitnami MariaDB container also ships with a MySQL client, but by default it will start a server.
|
||||
To start the client instead, we can override the default command Docker runs by stating the command
|
||||
we want to run after the image name.
|
||||
|
||||
```bash
|
||||
docker run --rm -it --link mariadb-server:mariadb bitnami/mariadb mysql -h mariadb -u root
|
||||
```
|
||||
|
||||
We started the MySQL client passing in the `-h` option that allows us to specify the hostname of the
|
||||
server, which we set to the hostname we created in the link.
|
||||
|
||||
**Note!**
|
||||
You can also run the MySQL client in the same container the server is running in using the Docker
|
||||
<a href="https://docs.docker.com/reference/commandline/cli/#exec" target="_blank">exec</a>
|
||||
command.
|
||||
|
||||
```bash
|
||||
docker exec -it mariadb-server mysql -u root
|
||||
```
|
||||
|
||||
## Linking with Docker Compose
|
||||
|
||||
### Step 1: Add a MariaDB entry in your `docker-compose.yml`
|
||||
|
||||
Copy the snippet below into your `docker-compose.yml` to add MariaDB to your application.
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
```
|
||||
|
||||
### Step 2: Link it to another container in your application
|
||||
|
||||
Update the definitions for containers you want to access your MariaDB server from to include a link
|
||||
to the `mariadb` entry you added in Step 1.
|
||||
|
||||
```less
|
||||
myapp:
|
||||
image: myapp
|
||||
links:
|
||||
- mariadb:mariadb
|
||||
```
|
||||
|
||||
Inside `myapp`, use `mariadb` as the hostname for the MariaDB server.
|
||||
|
||||
# Configuration
|
||||
|
||||
## Setting the root password on first run
|
||||
|
||||
Passing the `MARIADB_PASSWORD` environment variable when starting the container for the first time
|
||||
will set the password of the root user to the value of `MARIADB_PASSWORD`.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb -e MARIADB_PASSWORD=my_password bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
environment:
|
||||
- MARIADB_PASSWORD=my_password
|
||||
```
|
||||
|
||||
## Creating a database on first run
|
||||
|
||||
By passing the `MARIADB_DATABASE` environment variable when starting the container for the first time,
|
||||
a database will be created. This is useful if your application requires that a database already
|
||||
exists, saving you from having to manually create the database using the MySQL client.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb -e MARIADB_DATABASE=my_database bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
environment:
|
||||
- MARIADB_DATABASE=my_database
|
||||
```
|
||||
|
||||
## Creating a database user on first run
|
||||
|
||||
You can create a restricted database user that only has permissions for the database creating with
|
||||
the [`MARIADB_DATABASE`](#creating-a-database-on-first-run) environment variable. To do this,
|
||||
provide the `MARIADB_USER` environment variable.
|
||||
|
||||
**Warning!** In this case, a root user will not be created, and your restricted user will not have
|
||||
permissions to create a new database.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb -e MARIADB_USER=my_user -e MARIADB_DATABASE=my_database bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
environment:
|
||||
- MARIADB_USER=my_user
|
||||
- MARIADB_DATABASE=my_database
|
||||
```
|
||||
|
||||
## Command-line options
|
||||
|
||||
The simplest way to configure the MariaDB server is to pass custom command-line options when
|
||||
running the server.
|
||||
|
||||
```bash
|
||||
docker run bitnami/mariadb --open-files-limit=2
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
command: --open-files-limit=2
|
||||
```
|
||||
|
||||
**Further Reading:**
|
||||
- <a href="https://dev.mysql.com/doc/refman/5.1/en/server-options.html" target="_blank">MySQL Server Command Options</a>
|
||||
- [Caveats](#caveats)
|
||||
|
||||
## Configuration file
|
||||
|
||||
This container looks for configuration in `/bitnami/mariadb/conf`. You can mount a volume there with
|
||||
your own configuration, or the default configuration will be copied to your volume if it is empty.
|
||||
|
||||
### Step 1: Run the MariaDB image
|
||||
|
||||
Run the MariaDB image, mounting a volume from your host.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb -v /path/to/mariadb/conf:/bitnami/mariadb/conf bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
volumes:
|
||||
- /path/to/mariadb/conf:/bitnami/mariadb/conf
|
||||
```
|
||||
|
||||
### Step 2: Edit the configuration
|
||||
|
||||
Edit the configuration on your host using your favorite editor.
|
||||
|
||||
```bash
|
||||
vi /path/to/mariadb/conf/my.cnf
|
||||
```
|
||||
|
||||
### Step 3: Restart MariaDB
|
||||
|
||||
After changing the configuration, restart MariaDB for changes to take effect.
|
||||
|
||||
```bash
|
||||
docker restart mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```bash
|
||||
docker-compose restart mariadb
|
||||
```
|
||||
|
||||
**Further Reading:**
|
||||
- <a href="https://dev.mysql.com/doc/refman/5.1/en/mysqld-option-tables.html" target="_blank">Server Option and Variable Reference</a>
|
||||
- [Caveats](#caveats)
|
||||
|
||||
## Caveats
|
||||
|
||||
The following options cannot be modified, to ensure that the container runs correctly.
|
||||
|
||||
```bash
|
||||
--defaults-file=/usr/local/bitnami/mysql/my.cnf
|
||||
--log-error=/usr/local/bitnami/mysql/logs/mysqld.log
|
||||
--basedir=/usr/local/bitnami/mysql
|
||||
--datadir=/usr/local/bitnami/mysql/data
|
||||
--plugin-dir=/usr/local/bitnami/mysql/lib/plugin
|
||||
--user=mysql
|
||||
--socket=/opt/bitnami/mysql/tmp/mysql.sock
|
||||
--socket=/usr/local/bitnami/mysql/tmp/mysql.sock
|
||||
```
|
||||
|
||||
Anything else is fair game, you can see a full list of options here:
|
||||
https://dev.mysql.com/doc/refman/5.1/en/server-options.html
|
||||
# Logging
|
||||
|
||||
### Environment variables
|
||||
The Bitnami MariaDB container supports two different logging modes: logging to stdout, and logging
|
||||
to a file.
|
||||
|
||||
You can specify the `MARIADB_PASSWORD` and the `MARIADB_DATABASE` environment variables to specify a password and database to create when mounting an empty volume at `/data`.
|
||||
## Logging to stdout
|
||||
|
||||
## Linking
|
||||
The default behavior is to log to stdout, as Docker expects. These will be collected by Docker,
|
||||
converted to JSON and stored in the host, to be accessible via the `docker logs` command.
|
||||
|
||||
You can start up a MariaDB client by running:
|
||||
|
||||
```
|
||||
CONTAINER_MARIADB_LINK_NAME=mariadb
|
||||
docker run --rm -it \
|
||||
--link $CONTAINER_MARIADB_SERVER_NAME:$CONTAINER_MARIADB_LINK_NAME bitnami/mariadb \
|
||||
mysql -h $CONTAINER_MARIADB_LINK_NAME -u root -p
|
||||
```
|
||||
The client connects to the server we started in the previous command using a docker link. This exposes the `$CONTAINER_MARIADB_LINK_NAME` as the hostname for the link inside the container. We set the `-h` argument in the MariaDB client command to tell it to connect to the server running in the other container.
|
||||
|
||||
Similarly, you can link the MariaDB to a container running your application, e.g., using the Bitnami node container:
|
||||
|
||||
```
|
||||
CONTAINER_MARIADB_LINK_NAME=mariadb
|
||||
docker run --rm -it \
|
||||
--link $CONTAINER_MARIADB_SERVER_NAME:$CONTAINER_MARIADB_LINK_NAME bitnami/node \
|
||||
npm start --production
|
||||
```
|
||||
Inside your application, use the value of $CONTAINER_MARIADB_LINK_NAME when setting the MariaDB host.
|
||||
|
||||
## Logging
|
||||
|
||||
The container is set up to log to stdout, which means logs can be obtained as follows:
|
||||
|
||||
```
|
||||
```bash
|
||||
docker logs mariadb
|
||||
```
|
||||
|
||||
If you would like to log to a file instead, you can mount a volume at `/logs`.
|
||||
or using Docker Compose:
|
||||
|
||||
```bash
|
||||
docker-compose logs mariadb
|
||||
```
|
||||
|
||||
This method of logging has the downside of not being easy to manage. Without an easy way to rotate
|
||||
logs, they could grow exponentially and take up large amounts of disk space on your host.
|
||||
|
||||
## Logging to file
|
||||
|
||||
Run the MariaDB image, mounting a volume from your host at `/bitnami/mariadb/logs`. This will
|
||||
instruct the container to send logs to a `mysqld.log` file in the mounted volume.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb -v /path/to/mariadb/logs:/bitnami/mariadb/logs bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
volumes:
|
||||
- /path/to/mariadb/logs:/bitnami/mariadb/logs
|
||||
```
|
||||
|
||||
To perform operations (e.g. logrotate) on the logs, mount the same volume in a container designed to
|
||||
operate on log files, such as logstash.
|
||||
|
||||
# Maintenance
|
||||
|
||||
## Backing up your container
|
||||
|
||||
To backup your data, configuration and logs, follow these simple steps:
|
||||
|
||||
### Step 1: Stop the currently running container
|
||||
|
||||
```bash
|
||||
docker stop mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```bash
|
||||
docker-compose stop mariadb
|
||||
```
|
||||
|
||||
### Step 2: Run the backup command
|
||||
|
||||
We need to mount two volumes in a container we will use to create the backup: a folder on your host
|
||||
to store the backup in, and the volumes from the container we just stopped so we can access the
|
||||
data.
|
||||
|
||||
```bash
|
||||
docker run --rm -v /path/to/backups:/backups --volumes-from mariadb busybox \
|
||||
cp -a /bitnami/mariadb /backups/latest
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```bash
|
||||
docker run --rm -v /path/to/backups:/backups --volumes-from `docker-compose ps -q mariadb` busybox \
|
||||
cp -a /bitnami/mariadb /backups/latest
|
||||
```
|
||||
|
||||
**Note!**
|
||||
If you only need to backup database data, or configuration, you can change the first argument to
|
||||
`cp` to `/bitnami/mariadb/data` or `/bitnami/mariadb/conf` respectively.
|
||||
|
||||
## Restoring a backup
|
||||
|
||||
Restoring a backup is as simple as mounting the backup as volumes in the container.
|
||||
|
||||
```bash
|
||||
docker run -v /path/to/backups/latest/data:/bitnami/mariadb/data \
|
||||
-v /path/to/backups/latest/conf:/bitnami/mariadb/conf \
|
||||
-v /path/to/backups/latest/logs:/bitnami/mariadb/logs \
|
||||
bitnami/mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```less
|
||||
mariadb:
|
||||
image: bitnami/mariadb
|
||||
volumes:
|
||||
- /path/to/backups/latest/data:/bitnami/mariadb/data
|
||||
- /path/to/backups/latest/conf:/bitnami/mariadb/conf
|
||||
- /path/to/backups/latest/logs:/bitnami/mariadb/logs
|
||||
```
|
||||
|
||||
## Upgrade this image
|
||||
|
||||
Bitnami provides up-to-date versions of MariaDB, including security patches, soon after they are
|
||||
made upstream. We recommend that you follow these steps to upgrade your container.
|
||||
|
||||
### Step 1: Get the updated image
|
||||
|
||||
```bash
|
||||
docker pull bitnami/mariadb:5.5.42-0
|
||||
```
|
||||
|
||||
or if you're using Docker Compose, update the value of the image property to
|
||||
`bitnami/mariadb:5.5.42-0`.
|
||||
|
||||
### Step 2: Stop and backup the currently running container
|
||||
|
||||
Before continuing, you should backup your container's data, configuration and logs, unless you are
|
||||
mounting these volumes from your host.
|
||||
|
||||
Follow the steps on [creating a backup](#backing-up-your-container).
|
||||
|
||||
### Step 2: Remove the currently running container
|
||||
|
||||
```bash
|
||||
docker rm -v mariadb
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```bash
|
||||
docker-compose stop mariadb
|
||||
```
|
||||
|
||||
### Step 3: Run the new image
|
||||
|
||||
Re-create your container from the new image, [restoring your backup](#restoring-a-backup) if
|
||||
necessary.
|
||||
|
||||
```bash
|
||||
docker run --name mariadb bitnami/mariadb:5.5.42-0
|
||||
```
|
||||
|
||||
or using Docker Compose:
|
||||
|
||||
```bash
|
||||
docker-compose start mariadb
|
||||
```
|
||||
|
||||
# Contributing
|
||||
|
||||
We'd love for you to contribute to this container. You can request new features by creating an
|
||||
[issue](https://github.com/bitnami/bitnami-docker-mariadb/issues), or submit a
|
||||
[pull request](https://github.com/bitnami/bitnami-docker-mariadb/pulls) with your contribution.
|
||||
|
||||
# Issues
|
||||
|
||||
If you encountered a problem running this container, you can file an
|
||||
[issue](https://github.com/bitnami/bitnami-docker-mariadb/issues). For us to provide better support,
|
||||
be sure to include the following information in your issue:
|
||||
|
||||
- Host OS and version
|
||||
- Docker version (`docker version`)
|
||||
- Output of `docker info`
|
||||
- Version of this container (`echo $BITNAMI_APP_VERSION` inside the container)
|
||||
- The command you used to run the container, and any relevant output you saw (masking any sensitive
|
||||
information)
|
||||
|
||||
# License
|
||||
|
||||
Reference in New Issue
Block a user