Docker簡介
Docker是一個開源的容器引擎,它有助於更快地交付應用。 Docker可將應用程序和基礎設施層隔離,並且能將基礎設施當作程序一樣進行管理。使用 Docker可更快地打包、測試以及部署應用程序,並可以縮短從編寫到部署運行代碼的週期。
Docker 讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,便可以實現虛擬化。Docker改變了虛擬化的方式,使開發者可以直接將自己的成果放入Docker中進行管理。方便快捷已經是 Docker的最大優勢,過去需要用數天乃至數週的 任務,在Docker容器的處理下,只需要數秒就能完成。
docker 安裝
ubuntu 安裝 docker
apt-get update && apt-get install -y apt-transport-https curl
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
apt-get install docker.io -y
docker version
Docker常用命令
查看可用的鏡像(以java爲例)
docker search java
下載鏡像
docker pull java:8
列出鏡像
docker images
即可列出已下載的鏡像
刪除本地鏡像
docker rmi java
新建並啓動容器
使用以下docker run命令即可新建並啓動一個容器,該命令是最常用的命令,它有很多選項,下面將列舉一些常用的選項。
-d選項:表示後臺運行
-P選項:隨機端口映射
-p選項:指定端口映射,有以下四種格式。
-- ip:hostPort:containerPort
-- ip::containerPort
-- hostPort:containerPort
-- containerPort
--net選項:指定網絡模式,該選項有以下可選參數:
--net=bridge:默認選項,表示連接到默認的網橋。
--net=host:容器使用宿主機的網絡。
--net=container:NAME-or-ID:告訴 Docker讓新建的容器使用已有容器的網絡配置。
--net=none:不配置該容器的網絡,用戶可自定義網絡配置。
docker run -d -p 91:80 nginx
這樣就能啓動一個 Nginx容器。在本例中,爲 docker run添加了兩個參數,含義如下:
-d 後臺運行
-p 宿主機端口:容器端口 #開放容器端口到宿主機端口
訪問 http://Docker宿主機 IP:91/
列出容器
docker ps -a
停止容器
docker stop f0b1c8ab3633(容器ID)
強制停止容器
docker kill f0b1c8ab3633
啓動已停止的容器
docker start f0b1c8ab3633
查看容器所有信息
docker inspect f0b1c8ab3633
查看容器日誌
docker container logs f0b1c8ab3633
查看容器裏的進程
docker top f0b1c8ab3633
進入容器
使用docker container exec命令用於進入一個正在運行的docker容器。如果docker run命令運行容器的時候,沒有使用-it參數,就要用這個命令進入容器。一旦進入了容器,就可以在容器的 Shell 執行命令了
docker container exec -it f0b1c8ab3633 /bin/bash
刪除容器
docker rm f0b1c8ab3633
使用docker部署nginx
docker pull nginx:latest
1.docker images
2. mkdir -p /root/docker/my-dinner/nginx/config/
3. 配置nginx http代理 nginx-lb.conf
docker run --name nginx-lb -d -p 80:80 -v /root/docker/my-dinner/nginx/config/nginx-lb.conf:/etc/nginx/nginx.conf nginx:latest
4. 使用ngix 作爲http server服務器,啓動兩個 http server實例。 nginx.conf
docker run --name nginx-test -d -p 8081:80 -v /root/docker/my-dinner/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/my-dinner/nginx/www:/usr/share/nginx/html:/usr/share/nginx/html -v /root/docker/my-dinner/nginx/logs/:/var/log/nginx nginx:txy
docker run --name nginx-test2 -d -p 8082:80 -v /root/docker/my-dinner/nginx/config/nginx.conf:/etc/nginx/nginx.conf -v /root/docker/my-dinner/nginx/www2:/usr/share/nginx/html -v /root/docker/my-dinner/nginx/logs2/:/var/log/nginx nginx:txy
**3 volume**
volume也是繞過container的文件系統,直接將數據寫到host機器上,只是volume是被docker管理的,docker下所有的volume都在host機器上的指定目錄下/var/lib/docker/volumes。
docker run -d -p 8081:80 -v /root/docker/nginx:/mydata nginx:txy
將 /root/docker/nginx 掛載到 容器裏 的 /mydata 目錄
如果volume是空的則container中的目錄也會是空,但是如果volume中已經有內容,則會將其拷貝到container中的目錄。
***要使在宿主機上做的修改能在docker裏馬上生效,則需要設置 文件的權限爲777
K8S 安裝
DNS 設置
/etc/resolvconf/resolv.conf.d/base
nameserver 192.168.1.1
resolvconf -u
**2)安裝 k8s**
https://blog.csdn.net/wangchunfa122/article/details/86529406 //Ubuntu16.04安裝K8s步驟和踩坑記錄
https://www.jianshu.com/p/67083a454fcc
https://www.jianshu.com/p/f2d4dd4d1fb1 ubuntu 安裝 k8s
https://www.cnblogs.com/ericnie/p/7749588.html ******
https://blog.csdn.net/u012570862/article/details/80150988 ****
https://blog.csdn.net/zhonglinzhang/article/details/85279788 k8s啓動參數
2.1) 關閉 swap
swapoff -a
同時把/etc/fstab包含swap那行記錄刪掉。
2.2) 更新源並安裝 kubeadm, kubectl, kubelet 軟件包
apt-get update -y
apt-get install -y apt-transport-https
設置源
在 /etc/apt/sources.list 和 /etc/apt/sources.list.d/kubernetes.list 增加
deb https://mirrors.aliyun.com/kubernetes/apt kubernetes-xenial main
添加祕鑰(master 和 node)
curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | apt-key add -
2.3) 安裝 k8s組件
apt-get update
apt-get install -y kubelet kubeadm kubectl
systemctl enable kubelet
2.4) 使用 kubeadmin 初始化 master 節點
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.2
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6
docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.2
把這些images重新tag一下
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-controller-manager:v1.13.2 k8s.gcr.io/kube-controller-manager:v1.13.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler:v1.13.2 k8s.gcr.io/kube-scheduler:v1.13.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-proxy:v1.13.2 k8s.gcr.io/kube-proxy:v1.13.2
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/pause:3.1 k8s.gcr.io/pause:3.1
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/etcd:3.2.24 k8s.gcr.io/etcd:3.2.24
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/coredns:1.2.6 k8s.gcr.io/coredns:1.2.6
docker tag registry.cn-hangzhou.aliyuncs.com/google_containers/kube-apiserver:v1.13.2 k8s.gcr.io/kube-apiserver:v1.13.2
#設置 docker 和 kubelet 的 cgroupdriver 爲 cgroupfs 不然啓動kubelet要失敗
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com",
"https://quay-mirror.qiniu.com"
],
"exec-opts": [ "native.cgroupdriver=cgroupfs" ],
"live-restore": true
}
#接着執行
systemctl daemon-reload && systemctl restart docker
vim /etc/systemd/system/kubelet.service.d/10-kubeadm.conf(或者/lib/systemd/system/kubelet.service)
[Service]
ExecStart=
ExecStart=/usr/bin/kubelet --kubeconfig=/etc/kubernetes/kubelet.conf --pod-manifest-path=/etc/kubernetes/manifests --cgroup-driver=cgroupfs --feature-gates SupportPodPidsLimit=false --feature-gates SupportNodePidsLimit=false
#接着執行
systemctl daemon-reload && systemctl restart kubelet (或者 systemctl start kubelet)
kubeadm reset
2.5) 初始化 master 節點
kubeadm init --apiserver-advertise-address=192.168.1.5 --pod-network-cidr=10.244.0.0/16 --kubernetes-version=v1.17.0 --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers --ignore-preflight-errors=all
--apiserver-advertise-address: k8s 中的主要服務apiserver的部署地址,填自己的管理節點 ip
--pod-network-cidr: 這個是 k8s 採用的節點網絡,因爲我們將要使用flannel作爲 k8s 的網絡,所以這裏填10.244.0.0/16就好
--image-repository: 拉取的 docker 鏡像源,因爲初始化的時候kubeadm會去拉 k8s 的很多組件來進行部署,所以需要指定國內鏡像源,下不然會拉取不到鏡像。
--kubernetes-version: 這個是用來指定你要部署的 k8s 版本的,一般不用填,不過如果初始化過程中出現了因爲版本不對導致的安裝錯誤的話,可以用這個參數手動指定。
--ignore-preflight-errors: 忽略初始化時遇到的錯誤,比如說我想忽略 cpu 數量不夠 2 核引起的錯誤,就可以用--ignore-preflight-errors=CpuNum。錯誤名稱在初始化錯誤時會給出來。
#查看 kubelet 日誌
journalctl -xefu kubelet
# 查看已加入的節點
kubectl get nodes
# 查看集羣狀態
kubectl get cs
get pod --all-namespaces
**4) 部署 flannel 網絡**
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
**5) 配置Node**
5.1) 在node 節點上執行 2.1-2.4
5.2) kubeadm join 192.168.1.5:6443 --token h7u22o.nk23ias5f1ft8hj9 --discovery-token-ca-cert-hash sha256:9f93785608c9a9de3e5d74e9ed30b8302691abfee7efd946a8c1b80d8582fe92
6)****使用 helm****
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.12.3-linux-amd64.tar.gz
tar zxvf helm-v2.12.3-linux-amd64.tar.gz
cd linux-amd64/
mv helm /usr/bin/
helm version
helm install --name nls --set nls.version=1.0 k8s.tar.gz
ln -sf /var/run/resolvconf/resolv.conf /etc/resolv.conf
apt-get -y install upstart
https://www.runoob.com/docker/docker-install-nginx.html