MySQL in Docker
Lots of projects need a database. One option is to run these databases on your host machine. I think a better option is to run these databases in Docker containers on your host.
I feel this way for three reasons:
- If you need to run different versions of the same database for different projects, you won’t run into conflicts.
- The filesystem on the host machine won’t be affected by the clutter of the database install and config files.
- Uninstalling the database is as simple as removing the containers and the image. This is much better than the situation for some popular database platforms.
I’m starting a project that will use the MySQL database. Here is how to run MySQL in a Docker container, and connect to it from your host.
$ docker pull mysql:8.0 # or whatever version you want $ docker run \ -d \ --name <db-name> \ -p3306:3306 \ -e MYSQL_ROOT_PASSWORD=<root-pw> \ mysql
At this point you will have a container named
<db-name> running mysql and
listening to port 3306, which is linked to your host port 3306. You can’t
connect to it from your host, though, since the only user is
‘root’@‘localhost’. And the localhost for the container is the container,
not your host machine.
So, drop a shell on the container and fix those privileges.
$ docker exec -it db-name bash root@c1db3879590c:/# mysql -u root -p Enter password: mysql> create user 'me'@'%' identified by 'secret'; mysql> grant all privileges on *.* to 'me'@'%' with grant option;
That sequence of commands will set up a new user with admin privileges. Now you can log in from your host.
$ mysql -u me -p