天呀,1人訂閱,4人追蹤。(有人在看a,好緊張@@)
其實只是整理網路資料,主要都參考網路大大跟官網文章,今年只求完賽而己
這幾天先來介紹Docker,其實我覺得在家玩DevOps,或小型團隊,其實Docker就很夠用了
而k8s有點像 須彌納芥子 芥子納須彌
芥子(很小):k8s cluster很小,但內部根本就是完整的網路機房....芥子納須彌
須彌(很大):機房、AWS、GCP 很大,可以建k8s cluster....須彌納芥子
k8s到現在還沒建成功…再用基本工具撐個幾天
每個主題之間沒有什麼關聯,甚至同一主題不同天都沒串連
基本上就是新的VM重玩,會建議用VMware裝個Ubuntu的VM
真的很感謝大大們的文章,讓小弟在那麼多的新技術能玩玩皮毛、有個方向
抱著回饋的心態,明年要是沒意外的話應該還是會參賽吧
明天一定提升文章質量
本篇主要參考
https://ithelp.ithome.com.tw/users/20103456/ironman/1320
https://philipzheng.gitbooks.io/docker_practice/content/install/ubuntu.html
今天只會整理想用的部分,也是自己常用指令的筆記,
若要學習完整的Docker,請大家去看上面大大們的原文喔~ 保證是優質好文
雖然感覺Docker比較不會汙染到環境
但建議您建一個VM來玩Docker,以確保每次的環境是乾淨的
好像我其他天會有教學,不過我忘記放在哪一天了,安裝Docker就請先參考官網吧
systemctl start docker
systemctl enable docker
systemctl restart docker # 使用時機:如果有動到/etc/docker/daemon.json的話
$ echo "你的帳號 ALL = (root) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/你的帳號
# 1、建一個docker group
$ sudo groupadd docker
# 2、把你的帳號加到docker group
$ sudo usermod -aG docker 你的帳號
# 3、重新開機(登出再登入應該也行)
如果遇到這個錯誤
WARNING: Error loading config file: /home/user/.docker/config.json -
stat /home/user/.docker/config.json: permission denied
$ sudo chown "$USER":"$USER" /home/"$USER"/.docker -R
$ sudo chmod g+rwx "$HOME/.docker" -R
docker images
$ docker images # 列出本機端所有的映像檔 (images)
docker search
$ docker search ubuntu # 找關鍵字ubuntu的images
docker pull
$ docker pull library/ubuntu:latest # 下載image
$ docker run -itd ubuntu /bin/bash
建議一定要下的參數
-itd是常用的起手式,-d:以daemon方式執行
--restart=always # 重開機就重啟container
--name ubuntu # 一定要給container命名
就像生小孩要去戶政事務所報戶口一樣,叫小孩是用名字,若用身份證字號不是很麻煩嗎?
$ docker logs ubuntu # 查container的name為ubuntu的log
$ docker ps -a # 列出所有的container,若沒有-a:只列出在running的
$ docker ps -a: 列出所有的容器, 或 docker ps --all
$ docker stats nginx # 看某個container狀態
$ docker start/stop [Container_Name]: 啟用/終止容器
$ docker exec [Container_Name] [Command]: 執行一段 command 在已啟用的 Container
$ docker exec -it nginx /bin/bash # 這個要背起來
$ docker rmi docker.io/nginx # 刪掉image,i是指image
$ docker rm -f nginx
接下來…玩Docker的很重要的指令
$ docker rmi -f $(docker images -aq) # 刪除所有image,-f就是force啦
$ echo $(docker images -aq) # 列出所有image id
$ docker rm $(docker ps -a -q) # 刪除所有container,在macOS上亂玩的很重要
刪container之前要先停止container,就像正在開啟的word檔是刪不掉的
$ docker stop $(docker ps -a -q)
$ echo $(docker ps -a -q) # 列出所有container id
fc344ed3d222 83ada6712fb2
上面的 docker run 只是起手式
回頭來補充 docker run 的其他參數
說不定熟練後,能串連所有招式,招與招之間轉換如行雲流水,讓對手難以找到破綻 = =
這些就很像k8s的pod,基本上類似的設定到時候又要學一次,而且更自由
(例如:用label當filter,這些配置寫成yaml檔)
--memory 512MB
--cpu-period=1000000 # 單位是micro second(10^(-3)秒)
--cpu-quota=500000
通常--cpu-period跟--cpu-quota使用上不直覺
--cpuset-cpus="0,1" # 指定使用cpu 0跟cpu 1
--cpu-shares=512 # cpu分配比例,如果2個container都是512,那滿載時就是50%、50%,這個較實用
$ docker inspect -f '{{.Mounts}}' nginx # 找container nginx掛載的volumes
或
$ docker inspect -f '{{.Mounts}}' container's id
-v # host的資料夾 Mapping 到 Container 的資料夾
-v 後面接 host path: container path,如果沒給host path就會隨機亂掛到/etc/lib/docker/volumes/ooxxggyy....
-v /home/user1/storage:/storage
2個container共享volumes
--volumes-from container1
個人覺得-v很重要,如果有時間的話,我會去詳讀官網的volumes文件(嗯…好心虛)
https://docs.docker.com/storage/volumes/
若2個container要連得到
--link container1 # 會自動加在container2的/etc/hosts裡,在container2裡ping container1
--net=none # container沒network interface
--net=host # 使用 Host 的 network interface,比較危險喔
--net=bridge # 預設的網路模式,會用host network interface裡的docker0
--net=container:container1 # 直接用container1的network ineterface
2個host的container要連得到(overlay network),透過consul
{
"live-restore": true,
"group": "dockerroot", # 因為權限關係,要設dockerroot群組
"hosts": [
"unix:///var/run/docker.sock",
"tcp://10.1.0.223:2375"
],
"cluster-store": "consul://10.1.0.221:8500", # 要連接到 consul 的 service
"cluster-advertise": "enp8s0:2375" # 取得 overlay 網路模式的連線資訊
}
$ docker run -d -p 8500:8500 progrium/consul -server -bootstrap
$ docker network create -d overlay overlay1 # 建議建2個vm玩,否則你的mac會一堆network interface
$ docker run -it --name=container1 --net=overlay1 busybox # Host1建container1,ni給overlay1
{
"live-restore": true,
"group": "dockerroot", # 因為權限關係,要設dockerroot群組
"hosts": [
"unix:///var/run/docker.sock",
"tcp://10.1.0.223:2375"
],
"cluster-store": "consul://10.1.0.221:8500",
"cluster-advertise": "enp8s0:2375"
}
$docker export nginx > nginx.tar # export好像是比較好的方式,另一種就忘記它吧~
$cat nginx.tar | docker import - import'sImageName
dockerfile
docker compose
docker-machine
docker private registry
docker registry's API