A Docker image contains the code used to create a Docker container, such as creating a Nginx web server, or a mySQL server, or a home grown app, and the list goes on. In this way, an image is like a template used to create a container. An image is kind of like a virtual machine, but much more light weight, using significantly less storage a memory (containers are usually megabytes in size).
The docker pull command can be used to pull down the latest MariaDB image.
~]# docker pull mariadb Using default tag: latest latest: Pulling from library/mariadb 7b1a6ab2e44d: Pull complete 034655750c88: Pull complete f0b757a2a0f0: Pull complete 5c37daf8b6b5: Pull complete b4cd9409b0f6: Pull complete dbcda06785eb: Pull complete a34cd90f184c: Pull complete fd6cef4ce489: Pull complete 3cb89a1550ea: Pull complete df9f153bd930: Pull complete Digest: sha256:c014ba1efc5dbd711d0520c7762d57807f35549de3414eb31e942a420c8a2ed2 Status: Downloaded newer image for mariadb:latest docker.io/library/mariadb:latest
The docker images command can be used to display the MariaDB image.
~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mariadb latest 12e05d5da3c5 13 days ago 409MB
The following command can then be used to create and start the MariaDB container. Let's break down this command.
docker run --detach --publish 3306:3306 --env MARIADB_ROOT_PASSWORD=itsasecret --name mariadb --restart unless-stopped mariadb
Optionally, you could also have the .my.cnf file somewhere on your Docker system, such as at /usr/local/docker/mariadb/root/.my.cnf, where the .my.cnf file contains root password, so that root can connect to MariaDB without having to provide password. The .my.cnf file would contain something like this.
You would then use the --volume option to mount /usr/local/docker/mariadb/root/.my.cnf on your Docker system to /root in the container.
docker run --detach --publish 3306:3306 --volume /usr/local/docker/mariadb/root:/root --env MARIADB_ROOT_PASSWORD=itsasecret --name mariadb --restart unless-stopped mariadb
You will most likely also want to configure MariaDB so that a remote connection can be made to MariaDB. To be able to make a remote connection to the container, the /etc/mysql/mariadb.conf.d/50-server.conf file in the container will need to have the bind address of the container. For this reason, you may want to use the docker cp command to copy the files in the /etc/mysql/mariadb.conf.d directory in the container to a directory on your Docker system, such as /usr/local/docker/mariadb/mariadb.conf.d.
docker cp mariadb:/etc/mysql/mariadb.conf.d /usr/local/docker/mariadb
Then edit the 50-server.conf file to have the IP address of the container.
You would then use the --volume option to mount /usr/local/docker/mariadb/mariadb.conf.d directory on your Docker system to /etc/mysql/mariadb.conf.d in the container, and also use the --ip option to assign an IP address to the container.
docker run --detach --publish 3306:3306 --volume /usr/local/docker/mariadb/root:/root --volume /usr/local/docker/mariadb/mariadb.conf.d:/etc/mysql/mariadb.conf.d --ip 172.16.0.2 --env MARIADB_ROOT_PASSWORD=itsasecret --name mariadb --restart unless-stopped mariadb
The docker container ls command can be used to ensure the container is running.
~]# docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c132e43cd93a mariadb "docker-entrypoint.sâ€¦" About a minute ago Up About a minute 0.0.0.0:3306->3306/tcp, :::3306->3306/tcp mariadb
The docker logs command should return something like this.
2021-10-30 1:19:40 0 [Note] mysqld: ready for connections. Version: '10.6.4-MariaDB-1:10.6.4+maria~focal' socket: '/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution
The docker exec command with the -it or --interactive --tty files can be used to get a shell on the container.
docker exec -it mariadb bash
You should be able to connect to MariaDB as root, using the password that you defined in the MARIADB_ROOT_PASSWORD variable.
root@c132e43cd93a:/# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 3 Server version: 10.6.4-MariaDB-1:10.6.4+maria~focal mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>