MySQL Custom Docker Container | Docker Compose:
Here we are going to explore how to customize, MySQL Docker container using custom parameters in file, using volume, and Docker compose:
Create parameter file my.cnf locally, create Docker file which has mount volume (directory) configuration, bring up container using "docker-compose up -d", connect database and make sure everything is as expected.
Create directory for persistent data volume:
Create directory /mysql/mysql8020_data/docker_compose1/data_1 to store MySQL docker container persistent data.
Create my.cnf file at /mysql/docker_compose_1/conf.d/:
[mysqld]
default_authentication-plugin=mysql_native_password
server_id=7777
port=7399
Note: You might be wondering how local conf.d director's my.cnf file is read by docker container. Local my.cnf file is mapped to container /etc/mysql/conf.d directory which can be access by following command. File my.cnf is not mapped, directory conf.d is mapped to /etc/mysql/conf.d After creating docker you can explore it by using command docker exec -it <container_name> bash
Create Docker file /mysql/docker_compose_1/docker_compose.yml:
version: '3.7'
services:
<service_name>:
container_name: <container_name>
image: mysql:8.0.20
restart: always
environment:
MYSQL_ROOT_PASSWORD: "<password>"
volumes:
- /mysql/mysql8020_data/docker_compose1/data_1:/var/lib/mysql
- /mysql/mysql8020_data/docker_compose1/conf.d:/etc/mysql/conf.d
# docker exec -it <caontainer_name> mysql -uroot -p
mysql > show variables like '%port%';
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
Here we are going to explore how to customize, MySQL Docker container using custom parameters in file, using volume, and Docker compose:
Create parameter file my.cnf locally, create Docker file which has mount volume (directory) configuration, bring up container using "docker-compose up -d", connect database and make sure everything is as expected.
Create directory for persistent data volume:
Create directory /mysql/mysql8020_data/docker_compose1/data_1 to store MySQL docker container persistent data.
Create my.cnf file at /mysql/docker_compose_1/conf.d/:
[mysqld]
default_authentication-plugin=mysql_native_password
server_id=7777
port=7399
Note: You might be wondering how local conf.d director's my.cnf file is read by docker container. Local my.cnf file is mapped to container /etc/mysql/conf.d directory which can be access by following command. File my.cnf is not mapped, directory conf.d is mapped to /etc/mysql/conf.d After creating docker you can explore it by using command docker exec -it <container_name> bash
Create Docker file /mysql/docker_compose_1/docker_compose.yml:
version: '3.7'
services:
<service_name>:
container_name: <container_name>
image: mysql:8.0.20
restart: always
environment:
MYSQL_ROOT_PASSWORD: "<password>"
volumes:
- /mysql/mysql8020_data/docker_compose1/data_1:/var/lib/mysql
- /mysql/mysql8020_data/docker_compose1/conf.d:/etc/mysql/conf.d
Bring up MySQL Docker container using Docker-compose:
# docker-compose up -d
Connect MySQL instance check custom parameters implementation:# docker exec -it <caontainer_name> mysql -uroot -p
mysql > show variables like '%port%';
+--------------------------+-----------+
| Variable_name | Value |
+--------------------------+-----------+
| port | 7399 |
+--------------------------+-----------+
| server_id | 7777 |
+--------------------------+----------------------------------------------+
| default_authentication_plugin | mysql_native_password |
+--------------------------+----------------------------------------------+
Connect Docker container bash and inspect container:
# docker exec -it <container_name> bash
# docker inspect shrenik_20 | grep -i conf.d
"/mysql/mysql8020_data/docker_compose1/conf.d:/etc/mysql/conf.d:rw"
"Source": "/mysql/mysql8020_data/docker_compose1/conf.d",
"Destination": "/etc/mysql/conf.d",
"/etc/mysql/conf.d": {},
Processes running on OS:
Check Docker Process:
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79cbce4c0d05 mysql:8.0.20 "docker-entrypoint.s…" 4 days ago Up 4 days 3306/tcp, 33060/tcp <container_name>
# ps -ef | grep docker
root 49814 1171 0 Jun06 ? 00:00:07 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/79cbce4c0d05c93643327bcf4e4f486d87da2eefed48cdf76f2ce5a41e57e667 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
Note: For each container there will be a process for containerd to abstract resources for container from host OS.
Connect Docker container bash and inspect container:
# docker exec -it <container_name> bash
# docker inspect shrenik_20 | grep -i conf.d
"/mysql/mysql8020_data/docker_compose1/conf.d:/etc/mysql/conf.d:rw"
"Source": "/mysql/mysql8020_data/docker_compose1/conf.d",
"Destination": "/etc/mysql/conf.d",
"/etc/mysql/conf.d": {},
Processes running on OS:
Check Docker Process:
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
79cbce4c0d05 mysql:8.0.20 "docker-entrypoint.s…" 4 days ago Up 4 days 3306/tcp, 33060/tcp <container_name>
# ps -ef | grep docker
root 49814 1171 0 Jun06 ? 00:00:07 containerd-shim -namespace moby -workdir /var/lib/containerd/io.containerd.runtime.v1.linux/moby/79cbce4c0d05c93643327bcf4e4f486d87da2eefed48cdf76f2ce5a41e57e667 -address /run/containerd/containerd.sock -containerd-binary /usr/bin/containerd -runtime-root /var/run/docker/runtime-runc
Note: For each container there will be a process for containerd to abstract resources for container from host OS.
- Explore more about containerd and OCI (Open Container Initiative)
- Explore Docker Compose file version 3 parameters
- Explore environment variables for Docker MySQL
- Explore Docker MySQL container with Galera and Percona Xtrabackup
Comments
Post a Comment