+1

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 mà công nghệ container mà mình đã chôm được nhé.

Thử nghiệm

(Còn từ dân dã hơn là nghịch ngu)

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

Chán với việc phải cài các phiên bản java rồi mỗi lần test lại phải đổi biến môi trường, ... Hãy sử dụng docker-compose:

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"

cli

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> 

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí