1) Kiểm tra docker đang chạy
root@work-space-u20:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@work-space-u20:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f0b85ad30e58 redis "docker-entrypoint.s…" 5 months ago Exited (255) 5 months ago 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp frosty_beaver
ee03d8f019e5 mrnim94/sops-ui:latest "/usr/bin/supervisor…" 7 months ago Exited (255) 5 months ago 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp sops-ui_laravel_1
89e2c94b60df mrnim94/sops-guardians:latest "./app" 7 months ago Exited (255) 5 months ago 9999/tcp sops-ui_golang_1
ceccd7efe17d build-oauth2_proxy_proxy "/bin/oauth2-proxy" 2 years ago Exited (255) 12 months ago 0.0.0.0:8084->4180/tcp, :::8084->4180/tcp build-oauth2_proxy_proxy_1
07697de0ca90 redis "docker-entrypoint.s…" 2 years ago Exited (255) 5 months ago 6379/tcp build-oauth2_proxy_redis_1
Bạn cũng có thể show ra các container IDs
root@work-space-u20:~# docker ps -aq
254d6f91062b
235c4bdb8283
7820adc4311a
07030c5c9a0d
2) Cài đặt database trên docker
2.1) Cài đặt mariadb
https://hub.docker.com/_/mariadb
docker run mariadb:11.6.2
2.2) Khai báo Environment trên docker
docker run -e MYSQL_ROOT_PASSWORD=**** mariadb:11.6.2
-e MYSQL_ROOT_PASSWORD=*****: Câu lệnh này đặt một biến môi trường trong container MariaDB. Biến này cấu hình mật khẩu cho tài khoản root của MariaDB. Trong trường hợp này, mật khẩu là ******* (có thể là mật khẩu bạn cung cấp thực tế). Điều này cần thiết để có thể truy cập vào cơ sở dữ liệu MariaDB với quyền root.
2.3) Yêu cầu Docker chạy container ở chế độ nền
docker run -d -e MYSQL_ROOT_PASSWORD=**** mariadb:11.6.2
-d (viết tắt của --detach): Tham số này yêu cầu Docker chạy container ở chế độ nền (detached mode), nghĩa là container sẽ chạy ngầm mà không chiếm dụng terminal của bạn. Điều này giúp bạn tiếp tục sử dụng terminal trong khi container vẫn hoạt động.
Bạn có thể đế ý là lúc này chúng ta lại chạy thêm 1 container nữa chứ không edit container cũ:
root@work-space-u20:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
254d6f91062b mariadb:11.6.2 "docker-entrypoint.s…" 3 seconds ago Up 2 seconds 3306/tcp exciting_lehmann
235c4bdb8283 mariadb:11.6.2 "docker-entrypoint.s…" 7 minutes ago Up 7 minutes 3306/tcp naughty_elbakyan
Bạn thấy là container có nhưng cài tên rất là lạ
2.4) Đặt tên cho container:
docker run -d --name center-mariadb -e MYSQL_ROOT_PASSWORD=**** mariadb:11.6.2
--name center-mariadb: Đây là tên mà bạn muốn đặt cho container. Container sẽ được gọi là center-mariadb, giúp bạn dễ dàng quản lý container sau này bằng cách sử dụng tên này.
2.5) Đi vào trong container
đương nhiên nếu bạn muốn run command mysql để tương với database mà đã tạo thì chúng ta cần đi vào trong container
Chúng ta có 2 cách đi vào bằng containerID
docker exec -it 254d6f91062b bash
Hoặc là đi vào container bằng container name
docker exec -it center-mariadb bash
rồi tiếp theo run command để cấu hình mariadb
mariadb -u root -p
Thay vì run bash bạn có thể run trước tiếp câu lệnh
docker exec -it center-mariadb mysql -u root -p
create database nimtechnology;
grant all privileges on nimtechnology.* to 'nim'@'localhost' identified by 'nimtechnology******';
grant all privileges on nimtechnology.* to 'nim'@'%' identified by 'nimtechnology******';
2.6) Xóa container
root@work-space-u20:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
254d6f91062b mariadb:11.6.2 "docker-entrypoint.s…" 24 minutes ago Up 24 minutes 3306/tcp exciting_lehmann
235c4bdb8283 mariadb:11.6.2 "docker-entrypoint.s…" 32 minutes ago Up 32 minutes 3306/tcp naughty_elbakyan
root@work-space-u20:~# docker rm -f 254d6f91062b 235c4bdb8283
254d6f91062b
235c4bdb8283
2.7) Export dịch vụ trên docker
root@work-space-u20:~# docker run -d -p 33006:3306 --name center-mariadb -e MYSQL_ROOT_PASSWORD=***** mariadb:11.6.2
018e2ea100fb85af6952eda66806424e39240b98f71962b81cb6469a6aa661ac
root@work-space-u20:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
018e2ea100fb mariadb:11.6.2 "docker-entrypoint.s…" 2 seconds ago Up 1 second 0.0.0.0:33006->3306/tcp, :::33006->3306/tcp center-mariadb
-p 3306:3306: Phần này chỉ định cổng mà container sẽ sử dụng.
3306ở bên trái là cổng trên máy chủ của bạn (host).3306ở bên phải là cổng trong container. Vì vậy, câu lệnh này mở cổng 3306 trên máy chủ của bạn và chuyển tiếp nó vào cổng 3306 trong container, giúp bạn truy cập vào MariaDB từ ngoài container.
Từ đây bạn có thể thực hiện kết nối vào database

2.8) Đưa data trong container ra ngoài máy
Điều này giúp bạn duy trì dữ liệu ngay cả khi container bị dừng hoặc xóa, vì dữ liệu sẽ được lưu trữ trên máy chủ thực và không bị mất đi.
docker run -d -p 3306:3306 --name center-mariadb -e MYSQL_ROOT_PASSWORD=***** -v /home/docker/mariadb:/var/lib/mysql mariadb:11.6.2
-v /home/docker/mariadb:/var/lib/mysql: Phần này tạo một volume (đĩa ảo) để lưu trữ dữ liệu của MariaDB.
/home/docker/mariadblà thư mục trên máy chủ của bạn (host), nơi dữ liệu của MariaDB sẽ được lưu trữ./var/lib/mysqllà thư mục mặc định trong container nơi MariaDB lưu trữ dữ liệu cơ sở dữ liệu của nó.
2.9) Xem log của một container Docker
docker logs <container_name or container_id>
Nếu log quá dài và bạn chỉ cần xem các dòng log gần đây nhất
docker logs -f --tail 10 container_name
Các phần của câu lệnh:
-
docker logs:- Lệnh
docker logsdùng để lấy các log (dữ liệu đầu ra) từ container. Đây là công cụ giúp bạn xem thông tin chi tiết về hoạt động của container trong quá trình chạy. Các log này có thể là thông tin lỗi, thông tin hoạt động của ứng dụng hoặc bất kỳ dữ liệu nào được xuất ra từ container.
- Lệnh
-
-f(viết tắt của--follow):- Tham số
-fcho phép bạn “theo dõi” (follow) log của container theo thời gian thực. Khi bạn sử dụng tham số này, bạn sẽ nhận được cập nhật liên tục về log mới nhất khi container có thêm hoạt động hoặc đầu ra mới. - Điều này tương tự như bạn sử dụng lệnh
tail -ftrên file log trong Linux. Các log sẽ được cập nhật liên tục mà không cần phải chạy lại lệnh.
- Tham số
-
--tail 10:- Tham số
--tailgiúp bạn chỉ lấy một số dòng cuối của log. 10ở đây có nghĩa là bạn chỉ muốn xem 10 dòng cuối cùng của log. Đây là cách nhanh chóng để xem các thông tin mới nhất mà không phải lướt qua toàn bộ log (đặc biệt nếu container đã chạy lâu và log rất dài).- Bạn có thể thay số
10bằng một số khác để xem nhiều hoặc ít dòng log.
- Tham số
2.10) Upgrade version cho ứng dụng.
docker rm -f 07064f7a3cb0
docker run -d -p 33006:3306 --name center-mariadb -e MYSQL_ROOT_PASSWORD=***** -v /root/mylab-docker/mariadb:/var/lib/mysql mariadb:11.7.2
Bạn cứ xóa container cũ và run container với tag mới hơn.
trược khi bạn upgrade thì bạn có thể đọc trước tài liệu hoặc run demo trên local trước để thấy được nhưng impact khi upgrade version.