# Docker Linux 學習筆記 ## 使用標準輸出到後面的標準輸入 , import 後面要有地址,因此我們用標準輸入的符號( - )來去引導地址 ```c unzip -p cv2-ocr-lcd-gpio-fr.zip | docker import - cv2-ocr-lcd-gpio-fr:cv3.3 ``` ## docker run 的附屬設定 -d 是背景執行 -e 是環境設定 -p 是Port設定 -v 是地址設定 ( 可以進行磁碟對應 ) //只有在寫入資料時才會創建資料 -w 是工作目錄夾設定 ```c -v /etc/localtime:/etc/localtime:ro (ro是 read only,就是指令) ``` ## pwd 指令 `pwd` 是表示當前目錄在哪裡的意思,此外再撰寫bash程式時,指令若不在開頭,那就需要用 `` ` ` ``包起來Linux才看得懂 ## docker images 執行 ```c pi@raspberrypi:~ 🍓 sudo apt install python3-pigpio pi@raspberrypi:~ 🍓 sudo pigpiod pi@raspberrypi:~ 🍓 docker images REPOSITORY TAG IMAGE ID CREATED SIZE pi@raspberrypi:~ 🍓 unzip -p cv2-ocr-lcd-gpio-fr.zip | docker import - cv2-ocr-lcd-gpio-fr:cv3.3 sha256:620ede1adaf2fc4bb820c8b1325b8dda00c528564343f6b3d89e3d07dffec8ca pi@raspberrypi:~ 🍓 docker images REPOSITORY TAG IMAGE ID CREATED SIZE cv2-ocr-lcd-gpio-fr cv3.3 620ede1adaf2 4 minutes ago 1.05GB pi@raspberrypi:~ 🍓 docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES pi@raspberrypi:~ 🍓 docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES pi@raspberrypi:~ 🍓 docker run -it -v /dev:/dev --privileged \ -v /etc/localtime:/etc/localtime:ro -e "LANG=C.UTF-8" \ -p 9090:9090 \ -v `pwd`:/mycv2 \ cv2-ocr-lcd-gpio-fr:cv3.3 /bin/bash pi@raspberrypi:~ 🍓 docker ps pi@raspberrypi:~ 🍓 docker ps -a docker start -ai CONTAINER_ID_前幾碼 # CONTAINER_ID 啟動之後,另一終端機再登入 CONTAINER : docker exec -it CONTAINER_ID_前幾碼 bash # ========================================================================================== cd; docker run --restart unless-stopped -it -v /dev:/dev --privileged \ -v /etc/localtime:/etc/localtime:ro -e "LANG=C.UTF-8" \ -p 5000:5000 -p 8880:8888 -p 9090:9090 \ -v `pwd`:/mycv2 \ cv2-ocr-lcd-gpio-fr:cv3.3 bash /mycv2/w10/search.sh 12 # ========================================================================================== # "1: 'aeroplane', 2: 'bicycle', 3: 'bird', 4: 'boat', 5: 'bottle', 6: 'bus', 7: 'car', 8: 'cat', 9: 'chair', 10: 'cow', 11: 'diningtable', 12: 'dog', 13: 'horse', 14: 'motorbike', 15: 'person', 16: 'pottedplant', 17: 'sheep', 18: 'sofa', 19: 'train', 20: 'tvmonitor'" # ========================================================================================== ``` ## Docker對外機制 只要運行Docker的主機( Host )有對外的窗口,那Docker就能對外,並且設定Port就能利用該ip加端口進入與操作,因為Docker是利用主機的OS基礎上來建置容器,因此只要Host能對外,那容器就能對外(Windows系統有些不一樣,因為他關閉了很多功能,Linux則沒關,所以一切正常),不過為了怕駭客入侵,會把Docker設為 read only 因此只有主機能對它改動,而Docker本身與外部連入的裝置都不能改動它 ## Docker exec ( docker 執行 ) -it 告訴它要與你的裝置互動 ( 在你裝置畫面互動 ) ```bash docker exec -it [id] bash [想執行的指令] docker exec -it [id] bash ( 這可以直接進入容器的bash介面 ) ``` ## docker-compose docker-compose是一種連鎖啟動容器的方案,它使用 `docker-compose.yml` 檔來去設定所有容器的連鎖設定 ```bash 安裝 docker-compose sudo apt install docker-compose ``` ```yaml version: "3" services: iot_mongo: image: iot_mongo:111 restart: unless-stopped build: ./iot_mongo ports: - '172.17.0.1:21617:27017' volumes: - ./mongo_db:/data/db iot_data: image: iot_data:111 restart: unless-stopped build: ./iot_data ports: - '12111:12321' volumes: - ./iot_data:/x - ./log_data:/xlog_data depends_on: //這個容器會等 iot_mongo 啟動完畢再啟動 - iot_mongo iot_www: image: iot_www:111 restart: unless-stopped build: ./iot_www ports: - '8111:8000' volumes: - ./iot_www:/x - ./log_www:/xlog_www depends_on: - iot_mongo ```