[WIP] Các tiện ích mà Docker đem lại
Công nghệ container tiện thật đấy, cùng xem các tiện ích nó đem lại mà mình đã chôm được nhé.
Thử nghiệm linux
Muốn chạy một lệnh để test trên ubuntu nhưng sợ làm hỏng cái gì đó trên máy tính của mình, hãy thử nó trong container.
tuana9a@tuana9a-XPS-13-9370:~$ docker run --name nghich_ngu_vl -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
tuana9a@tuana9a-XPS-13-9370:~$ docker exec -it nghich_ngu_vl
root@49151b969ec0:/#
root@49151b969ec0:/# rm -rf --no-preserve-root /
...
rm: cannot remove '/sys/module/snd_pcm_dmaengine/sections/__ksymtab_strings': Read-only file system
rm: cannot remove '/sys/module/snd_pcm_dmaengine/sections/__ksymtab_gpl': Read-only file system
rm: cannot remove '/sys/module/snd_pcm_dmaengine/sections/.rodata.str1.8': Read-only file system
root@49151b969ec0:/#
root@49151b969ec0:/# ls
bash: /usr/bin/ls: No such file or directory
root@49151b969ec0:/# cd /op
bash: cd: /op: No such file or directory
root@49151b969ec0:/# ls l/a
bash: /usr/bin/ls: No such file or directory
root@49151b969ec0:/# exit
exit
tuana9a@tuana9a-XPS-13-9370:~$ ll
total 396
drwxr-x--- 57 tuana9a tuana9a 4096 Dec 1 20:42 ./
drwxr-xr-x 3 root root 4096 Feb 1 2023 ../
drwxrwxr-x 6 tuana9a tuana9a 4096 Feb 14 2023 .android/
drwxrwxr-x 3 tuana9a tuana9a 4096 Nov 14 2022 Android/
-rwxrwxr-x 1 tuana9a tuana9a 111 Sep 10 16:08 android-studio.sh*
-rw-rw-r-- 1 tuana9a tuana9a 225 Sep 7 2022 .angular-config.json
...
Các bạn có thể thấy mình chạy câu lệnh xóa hết nhưng khi thoát khỏi container, mọi thứ vẫn an toàn. Thực sự lúc chạy lệnh này tay mình cũng hơi run.
Dev container bất kỳ ngôn ngữ nào
Thay vì phải cài các package của các ngôn ngữ lên máy trực tiếp chúng ta có thể chạy project bằng docker-compose với phiên bản ngôn ngữ tương ứng.
node.js
docker-compose.yaml
version: '3'
services:
app:
image: node:16-alpine
ports:
- "8080:8080"
working_dir: /app
volumes:
- .:/app
command: sh -c "npm install && npm run dev"
java
docker-compose.yaml
version: '3'
services:
app:
image: openjdk:8u322-jdk-oraclelinux8
ports:
- "127.0.0.1:8080:8080"
working_dir: /app
volumes:
- .:/app
env_file:
- .env
command: sh -c "java -jar app-1.0.0.jar"
Dùng cli mà không cần cài thêm gì
Chán nản với việc phải chạy apt install
, wget tar.gz
, rồi nhét chúng vào /usr/local/bin/
, $PATH
env variable, giờ đa số các cli đều có thể có phiên bản docker của nó.
mysql client
VD: kết nối tới mysql-server
sử dụng image mysql
docker run --rm -it --network host mysql:5.7 mysql -h 172.19.0.2 -u root -p
vagrant@tuana9a-dev ~/github.com/tuana9a/infrastructure-as-code/mysql (main*?) $ docker run --rm -it --network host mysql:5.7 mysql -h 172.19.0.2 -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
mysql>
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.04 sec)
mysql>
mongo
kết nối tới mongo server
sudo docker run --rm -it --network host mongo:5.0 mongosh "mongodb://$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@localhost"
mongodump
sudo docker run --rm -it --network host -v /tmp/dump:/tmp/dump mongo:5.0 mongodump "mongodb://$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@localhost" --out /tmp/dump
mongorestore
sudo docker run --rm -it --network host -v /tmp/dump:/tmp/dump mongo:5.0 mongorestore "mongodb://$MONGO_INITDB_ROOT_USERNAME:$MONGO_INITDB_ROOT_PASSWORD@localhost" /tmp/dump
postgres
dump (why it's works???)
sudo docker run --rm -it --network host -v /tmp/dump/:/tmp/dump/ postgres:16 pg_dumpall -h localhost > /tmp/dump/psql.sql
restore (why it's works???)
sudo docker run --rm -it --network host -v /tmp/dump/:/tmp/dump/ postgres:16 psql -h localhost -f /tmp/dump/psql.sql postgres
curl
docker run --rm curlimages/curl:8.4.0 -L -v https://tuana9a.com
aws-cli
đây là lệnh mình chạy trong CI CD để upload binary của mình lên s3, môi trường chạy CI CD chỉ cần cài duy nhất Docker, còn lại các tools, cli, binary đều có thể kéo từ Docker
docker run --rm -v $AWS_CREDENTIALS:/root/.aws/credentials -v $WORKSPACE:/aws amazon/aws-cli s3api --endpoint-url $S3_ENDPOINT put-object --bucket $BUCKET_NAME --key $OUTPUT_BINARY_NAME-$VERSION --body $DIST_DIR/$OUTPUT_BINARY_NAME
All rights reserved