This is a collection of some Docker statements. Mainly for myself to copy-paste and save time.
1. Docker file template with MySQL and adminer
- In your
root directory
, create following files. ├── scripts/ │ ├── schema.sql │ ├── data.sql │ └── mycustom.cnf └── docker-compose.yml
Edit your
docker-compose.yml
as followsversion: "3.8" services: db: image: mysql:8.0.33 container_name: mysql8.0.33 restart: always environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: playground volumes: - "./scripts/schema.sql:/docker-entrypoint-initdb.d/1.sql" - "./scripts/data.sql:/docker-entrypoint-initdb.d/2.sql" - "./scripts/mycustom.cnf:/etc/mysql/conf.d/custom.cnf" ports: - 3306:3306 adminer: image: adminer restart: always ports: - 8080:8080
- You can add your initial database schema in
scripts/schema.sql
CREATE TABLE `test` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
- You can add your initial data in
scripts/data.sql
INSERT INTO test (name) VALUES ("Dennis");
- Run your docker file with
docker-compose
docker-compose up
- Open your browser at
localhost:8080
, login to your MySQL instance and have fun.
2. Exploring the docker filesystem
docker exec -t -i <container_name> /bin/bash
-t
(terminal): This option allows you to interact with the container using a terminal-like interface. It is commonly used when you need to run interactive commands inside the container, such as an interactive shell session.
-i
(interactive): This option enables you to provide input to the command running inside the container.
3. Connect to mysql via command line
docker exec -t -i <container_name> mysql -u my_user -p
4. Copy a file from docker container to host machine
docker cp <container-id>:/file/path/within/container /host/file/path/target
5. Publish docker image to Docker Hub
- When you login to your Docker Hub, you will see the default command how to push a image to your docker hub. For example
docker push dcnis/popup-chinese-backend-quarkus:tagname
- If you would execute this command locally, you will probably get an error which says docker cannot find the image with the tag
dcnis/popup-chinese-backend-quarkus
. So first we have to create a newtag
. List docker images
docker images quarkus/popup-chinese-backend-quarkus
We can see we have one images with the name
quarkus/popup-chinese-backend-quarkus
. Based on this image, we create the new tag.Create a new
tag
from your existing docker image.docker tag quarkus/popup-chinese-backend-quarkus dcnis/popup-chinese-backend-quarkus
- Check the images
docker images quarkus/popup-chinese-backend-quarkus latest dcnis/popup-chinese-backend-quarkus latest
- Push the image
% docker push dcnis/popup-chinese-backend-quarkus Using default tag: latest The push refers to repository [docker.io/dcnis/popup-chinese-backend-quarkus] 48efe9a978d6: Pushed 5f77935eec15: Pushed 3b6ba2682483: Pushed 129f98c51b7a: Pushed 41c90dc5a18e: Pushed 5f70bf18a086: Pushed 5282f3464e78: Pushed latest: digest: sha256:0baf3b80fdc4ea7fd73f199f88d8c91099e3191ca8705dd0e79d68dd67013d01 size: 1780
- Continuous workflow: To speed up your development process, you can create the image directly with the correct name and then push the new image to Docker Hub.
% docker build -f src/main/docker/Dockerfile.native-micro -t dcnis/popup-chinese-backend-quarkus . % docker push dcnis/popup-chinese-backend-quarkus
6. Spin up PostgreSQL Database with Docker
docker run --name postgresql -p 5432:5432 -e POSTGRES_PASSWORD=postgres -d postgres