This solution can also be used to move from raw format back to qcow2 format.

I used to have Docker on MacOS Sierra, which created the image files using the qcow2 format. Then I upgraded to Yosemite, but due to a disk failure of the external SSD that has the qcow2 images file, it created a raw format image file (for more see this one: https://docs.docker.com/docker-for-mac/faqs/#qcow2-or-raw)

This shouldn’t be a problem in general, but in my case I use it for development purposes and I still have uncommitted images. Also using the Docker Preferences GUI I can only select the directory, not the actual file. Solution is pretty simple:

Navigate. to:

~/Library/Group\ Containers/group.com.docker/settings.json

and change the diskPath file to the qcow2 file. That should do it.

 

I need to start a MySQL server in order to do some tests. Luckily MySQL has an official docker image. So in 3 simple steps:

Step 1: Download the Image

docker pull mysql/mysql-server:8.0.13

In this case I wanted to download a specific version of MySQL, 8.0.13.

Step 2: Run the Container

docker run -d --name mysql-8 -v /Volumes/USBHDD/mysql/data/:/var/lib/mysql/ -e lower_case_table_names=1 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_ROOT_HOST=% -p 3306:3306 mysql/mysql-server:8.0.13

Explanation of params:

ParameterExplanation
-dDetached mode so that it runs the container in the background.
–name Provide a friendly name to the container so that we can start/stop it in the future
-vI want to store the MySQL data from the container to an external USB Volume mounted on the host at: /Volumes/USBHDD/mysql/data/. So all data saved by MySQL in will be available in the external USB drive. I believe the proper way is to do it using docker volumes, but this is a quick way as the title says.
-e lower_case_table_names=1 The -e parameter allows us to pass properties to the container process. lower_case_table_names=1 is required in a MacOS and Windows Host because the file system is case insensitive.
-e MYSQL_ROOT_PASSWORD=rootThe password of the root user.
-e MYSQL_ROOT_HOST=%By default the root user is only allowed to connect from ‘localhost’ (i.e. from within the container). I want to be able to connect as root from the host machine, that’s why this option is required. Note: This is obviously a security hole, but for a dev environment it should be ok.
-p 3306:3306Map port 3306 (the default MySQL port) from container to host.


Step 3: Connect to container from host

Using MySQL Workbench from the Host machine and connection params:

Host: 127.0.0.1
Username: root
Password: root

we can connect to the MySQL running on the container and create a new DB.

That’s it! Now we may want to stop the container.

Step 4: Stop the container

docker stop mysql-8

Step 5: Start the container again

docker start mysql-8

Connecting again using the MySQL Workbench we can see our data and continue development.