docker mysql install
7.3.1 Basic Steps for MySQL Server Deployment with Docker
The MySQL Docker images maintained by the MySQL team are built specifically for Linux platforms. Other platforms are not supported, and users using these MySQL Docker images on them are doing so at their own risk.
Downloading a MySQL Server Docker Image
Downloading the server image in a separate step is not strictly necessary; however, performing this step before you create your Docker container ensures your local image is up to date. To download the MySQL Community Server image, run this command:
docker pull mysql/mysql-server:tag
The tag
is the label for the image version you want to pull (for example, 5.5
, 5.6
, 5.7
, 8.0
, or latest
). If :
is omitted, the tag
latest
label is used, and the image for the latest GA version of MySQL Community Server is downloaded. Refer to the list of tags for available versions on themysql/mysql-server page in the Docker Hub.
You can list downloaded Docker images with this command:
shell> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql/mysql-server latest 3157d7f55f8d 4 weeks ago 241MB
Starting a MySQL Server Instance
Start a new Docker container for the MySQL Server with this command:
docker run --name=mysql1 -d mysql/mysql-server:tag
The --name
option, for supplying a custom name for your server container (mysql1
in the example), is optional; if no container name is supplied, a random one is generated. If the Docker image of the specified name and tag has not been downloaded by an earlier docker pull or docker runcommand, the image is now downloaded. After download completes, initialization for the container begins, and the container appears in the list of running containers when you run the docker ps command; for example:
shell> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a24888f0d6f4 mysql/mysql-server "/entrypoint.sh my..." 14 seconds ago Up 13 seconds (health: starting) 3306/tcp, 33060/tcp mysql1
The container initialization might take some time. When the server is ready for use, the STATUS
of the container in the output of the docker pscommand changes from (health: starting)
to (healthy)
.
The -d
option used in the docker run command above makes the container run in the background. Use this command to monitor the output from the container:
docker logs mysql1
Once initialization is finished, the command's output is going to contain the random password generated for the root user; check the password with, for example, this command:
shell> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
Connecting to MySQL Server from within the Container
Once the server is ready, you can run the mysql client within the MySQL Server container you just started, and connect it to the MySQL Server. Use the docker exec -it command to start a mysql client inside the Docker container you have started, like the following:
docker exec -it mysql1 mysql -uroot -p
When asked, enter the generated root password (see the last step in Starting a MySQL Server Instance above on how to find the password). After you have connected a mysql client to the server, you should reset the server root password by issuing this statement:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
Substitute newpassword
with the password of your choice. Once the password is reset, the server is ready for use.
Container Shell Access
To have shell access to your MySQL Server container, use the docker exec -it command to start a bash shell inside the container:
shell> docker exec -it mysql1 bash
bash-4.2#
You can then run Linux commands inside the container. For example, to view contents in the server's data directory inside the container, use this command:
bash-4.2# ls /var/lib/mysql
auto.cnf ca.pem client-key.pem ib_logfile0 ibdata1 mysql mysql.sock.lock private_key.pem server-cert.pem sys
ca-key.pem client-cert.pem ib_buffer_pool ib_logfile1 ibtmp1 mysql.sock performance_schema public_key.pem server-key.pem
Stopping and Deleting a MySQL Container
To stop the MySQL Server container we have created, use this command:
docker stop mysql1
docker stop sends a SIGTERM signal to the mysqld process, so that the server is shut down gracefully.
Also notice that when the main process of a container (mysqld in the case of a MySQL Server container) is stopped, the Docker container stops automatically.
To start the MySQL Server container again:
docker start mysql1
To stop and start again the MySQL Server container with a single command:
docker restart mysql1
To delete the MySQL container, stop it first, and then use the docker rm command:
docker stop mysql1
docker rm mysql1
If you want the Docker volume for the server's data directory to be deleted at the same time, add the -v
option to the docker rm command.
More Topics on Deploying MySQL Server with Docker
For more topics on deploying MySQL Server with Docker like server configuration, persisting data and configuration, server error log, and container environment variables, see Section 7.3.2, “More Topics on Deploying MySQL Server with Docker”.