2017年9月6日 星期三
AWS - 列出 EC2 instance IP 等資料
AWS EC2 instance IP 是動態配給,但並非每個人都有權限登入 AWS console 取得 EC2 instance IP,於是開發人員會找 AWS 管理員索求資料;但若 EC2 使用了 auto scaling 機制,instance 開開關關,之前拿到的資料就失效。為了解決這個困擾,做了一個頁面,利用 AWS CLI,也算是 demo 如何整合之前介紹的 minimum-hsu/markdown-web 與 minimum-hsu/docker-cron,一樣打包成 Docker:minimum-hsu/example-markdown-web
Alpine - 週期性工作
在 Linux 說到週期性工作,想到的就是 crontab。
我做了一個只運行 crond 的 Docker image:minimum-hsu/docker-cron
Docker 版本的 Alpine Linux,crond 預設是沒有運行的,需要執行命令
crond -f
我做了一個只運行 crond 的 Docker image:minimum-hsu/docker-cron
Web - markdown 與 flask 共舞
markdown 語法容易上手,容易排版,容易閱讀,容易轉換成 HTML。利用 markdown 的特性,結合 python flask,就能簡易架設一個靜態網站。
我做了一個雛形:minimum-hsu/markdown-web
2015年8月25日 星期二
Docker Compose - 操作說明
安裝 Docker Compose 程式
安裝 Python
$sudo apt-get install -y python python-pip
安裝 Docker Compose
$sudo pip install -U docker-compose
下載 services 的 images
$sudo docker-compose pull
建立 containers 並啟動 services
$sudo docker-compose up -d
啟動 services
$sudo docker-compose start
停止 services
$sudo docker-compose stop
重新啟動 services
$sudo docker-compose restart
移除 services 的 containers
沒有停止的 service 是無法移除 container$sudo docker-compose rm -f
查詢 services 的狀態
$sudo docker-compose ps
查詢 services 的 log
$sudo docker-compose logs
啟動單一 service
假設 docker-compose.yml 中有定義一個 web service$sudo docker-compose up -d web操作單一 service 的方式也可以套用到其他指令上,只要在指令最後面加上 service 名稱。
指定 YAML 檔案並啟動 services
假設 YAML 檔案為 init.yml$sudo docker-compose -f init.yml up -d指定 YAML 檔案的方式也可以套用到其他指令上,只要在 docker-compose 後面加上 -f 的選項並指定檔案。
Docker - 操作說明
在 Ubuntu 14.04 安裝 Docker
$wget -qO- https://get.docker.com/ | sh
// If you would like to use Docker as a non-root user, you should now consider
// adding your user to the "docker" group with something like:
$sudo usermod -aG docker your-user
在 CentOS 6.5 或更新版本安裝 Docker
$sudo yum update
$curl -O -sSL https://get.docker.com/rpm/1.7.1/centos-6/RPMS/x86_64/docker-engine-1.7.1-1.el6.x86_64.rpm
$sudo yum localinstall --nogpgcheck docker-engine-1.7.1-1.el6.x86_64.rpm
$sudo service docker start
$sudo chkconfig docker on
測試 Docker 是否啟動
$sudo docker run hello-world
從 Docker hub 下載 Docker image (範例:最新版 Ubuntu)
$sudo docker pull Ubuntu或是
$sudo docker pull ubuntu:latest預設 tag 是 latest,這兩種寫法的執行結果是一樣的。
從 Docker hub 下載 Docker image (範例:指定 Ubuntu 14.04)
$sudo docker pull ubuntu:14.04Docker image 的格式是 image:tag ,ubuntu 是 image 名稱,14.04 是 tag 名稱。
從 Docker hub 下載 Docker image (範例:Minimum 的 oracle-java 8)
$sudo docker pull minimum/oracle-java:8minimum/oracle-java 是 image 名稱,8 是 tag 名稱。
查詢本機上的 Docker images
$sudo docker images
刪除本機上的 Docker image
舉 Ubuntu 14.04 為例,$sudo docker rmi ubuntu:14.04或是利用 images 的指令取得 image ID,
$sudo docker rmi d2a0ecffe6fa或是簡單寫出 image ID 的前幾碼,
$sudo docker rmi d2a此方法請小心誤刪其他有相同前幾碼的 images
刪除本機上的多個 Docker image
舉 Ubuntu 14.04 和 hello-world 為例,$sudo docker rmi ubuntu:14.04 hello-world
強制刪除本機上的 Docker image
舉 Ubuntu 14.04 為例,$sudo docker rmi -f ubuntu:14.04此方法適用於有某一個 container 使用這個 image 建立,但是該 container 並不會一併被刪除。
建立 Docker container 並啟動
舉 Ubuntu 14.04 為例,$sudo docker run -ti ubuntu:14.04沒有指定 container 名稱時,Docker engine 會隨機命名。
也可以指定 container 名稱,例如指定為 ubuntu_instance,
$sudo docker run -ti --name ubuntu_instance ubuntu:14.04建議全部指定 container 名稱,方便記憶與反覆進行 container 操作。
run 指令的參數介紹
| -t | TTY模式。 |
| -i | 互動模式,可以和 container 進行指令操作。 |
| -d | 後台模式,不會將 container 中的訊息輸出到 terminal。 |
| -p host_port:container_port | 指定 container 的連接埠,例如 -p 8080:80,將 host 端 port 8080 導向到 container 的 port 80。 |
| -e variable=value | 指定環境變數,例如 -e DB_HOST=mysql,在 container 中能存取 DB_HOST 這個環境變數。 |
| -v host_dir:container_dir | 指定 container 的 volume,例如 -v /home/user/data:/data,container 的 /data 目錄是連結到 host 端的 /home/user/data 目錄。 |
| --volumes-from name | 使用其他 container 的 volume,例如 --volumes-from web,將 container web 使用的 volumes 都連結到現在這個 container。 |
| --link name[:alias] | 連線其他 container,例如 --link database:db,在 container 中能使用 db 作為 domain name。 |
| --privileged=true | 如果要存取 container 中的系統資料夾,需要加這個參數提升權限。 |
| --sig-proxy=false | 按下 Ctrl+C 只會中斷 container 中運行的程序,不會離開 container。可以按下 Ctrl+P 再按下 Ctrl+Q 離開 container,且 container 不會停止。 |
| --restart=(no|on-failure|always) | 自動重新啟動 container,always 這個值在 Docker engine 啟動時也會有效。 |
| --rm=true | container 停止時,自動刪除 container。 |
離開 Docker container
按下 Ctrl+C 可以從 container 中離開,或是在 container 中輸入 exit 指令離開。查詢 Docker container
$sudo docker ps可以查詢正在運行的 container ID、建立時間、狀態和名稱。
也可以查詢所有包含停止的 container,
$sudo docker ps -a
停止 Docker container
假定有個正在運行的 container ,其名稱是 ubuntu_instance,$sudo docker stop ubuntu_instance
啟動 Docker container
假定有個停止的 container,其名稱是 ubuntu_instance,$sudo docker start ubuntu_instancestart 指令的參數介紹
| -a | 進入 container。 |
| -i | 互動模式,可以和 container 進行指令操作。 |
刪除 Docker container
假定有個停止的 container,其名稱是 ubuntu_instance,$sudo docker rm ubuntu_instance假定有個正在運行的 container,其名稱是 ubuntu_instance,
$sudo docker rm -f ubuntu_instance也可以一次刪除多數個 container,
$sudo docker rm ubuntu_instance_1 ubuntu_instance_2
進入 Docker container
假定有個正在運行的 container,其名稱是 ubuntu_instance,$sudo docker attach ubuntu_instance
也可以加上參數 --sig-proxy=false。
查詢 Docker container 的訊息記錄
假定有個 container,其名稱是 ubuntu_instance,$sudo docker logs ubuntu_instance可以指定顯示行數
$sudo docker logs --tail=10 ubuntu_instance
查詢 Docker container 的組態設定
假定有個 container,其名稱是 ubuntu_instance,$sudo docker inspect ubuntu_instance可以查詢網路設定、連接埠設定、volume設定等。
將 Docker container 變成 Docker image
假設現有一個 container 為 hello,要變成 hello-world 第二版,$sudo docker commit hello hello-world:2也可以用來保存 container 內的資料。
刪除全部狀態為 Exited 的 Docker containers
刪除全部狀態為 Exited 的 Docker containers
$sudo docker rm -f `sudo docker ps -aq --filter="status=exited*"`
刪除全部無標籤的 Docker images
$sudo docker rmi `sudo docker images --filter "dangling=true" -q --no-trunc`
匯出並打包 Docker image
$sudo docker save -o docker-hello-world.tar hello-world
解包並載入 Docker image
$sudo docker load --input docker-hello-world.tar
訂閱:
文章 (Atom)