一、安裝docker
1、Docker 要求 CentOS 系統的內核版本高於 3.10 。
通過 uname -r 命令查看你當前的內核版本
$ uname -r
2、使用 root 權限登錄 Centos。確保 yum 包更新到最新。
$ sudo yum update
3、卸載舊版本(如果安裝過舊版本的話)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安裝需要的軟件包, yum-util 提供yum-config-manager功能,另外兩個是devicemapper驅動依賴的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、設置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6、可以查看所有倉庫中所有docker版本,並選擇特定版本安裝
$ yum list docker-ce --showduplicates | sort -r
7、安裝docker
$ sudo yum install docker-ce #由於repo中默認只開啟stable倉庫,故這里安裝的是最新穩定版17.12.0
$ sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
8、啟動並加入開機啟動
$ sudo systemctl start docker
$ sudo systemctl enable docker
9、驗證安裝是否成功(有client和service兩部分表示docker安裝啟動都成功了)
$ docker version
二、問題
1、因為之前已經安裝過舊版本的docker,在安裝的時候報錯如下:
Transaction check error:
file /usr/bin/docker from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/docker-containerd-shim from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
file /usr/bin/dockerd from install of docker-ce-17.12.0.ce-1.el7.centos.x86_64 conflicts with file from package docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
2、卸載舊版本的包
$ sudo yum erase docker-common-2:1.12.6-68.gitec8512b.el7.centos.x86_64
3、再次安裝docker
$ sudo yum install docker-ce
配置加速器:
對於使用 systemd 的系統,請在 /etc/docker/daemon.json 中寫入如下內容(如果文件不存在請新建該文件)
{ "registry-mirrors": [ "https://registry.docker-cn.com" ]}
命令:
Docker rm -f(強制) 刪除
Docker run -it tomcat bash 進入並進入容器
Docker exec -it xx 進入容器
Docker logs -f <container id> 命令查看容器的啟動日志:
Docker run -p(-rm只是使用一次) 8080:8080(端口映射 主機:容器) tomcat 跑一個新容器
Docker run -p(-rm只是使用一次) 8080:8080 --name 別名 tomcat
跑並給他一個特定的名字
Docker run -p 8081:8080 --name xx -d tomcat
(使用守護線程啟動新的(多線程?后台?))
firewall-cmd --list-ports 查看那些端口打開了
systemctl start firewalld 打開防火牆
firewall-cmd --permanent --zone=public --add-port=8083/tcp
允許打開端口
systemctl reload firewalld 重啟防火牆
Docker stop 容器名/ID
Docker ps -a 查看所有容器
Docker container ls -a(查看容器)
Docker images 查看鏡像
Docker restart 容器ID/容器名 重啟容器
Docker exec -it 容器id bash 已交互的模式 進入已有容器
Exit 退出容器
Docker image prune 刪除虛懸鏡像
Docker-compose up -d 執行yml腳本
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
可以完成分發,負載均衡入口.
DockerFile
實現在容器外面創建 Dockerfile 文件
From xxx (繼承哪個容器)
Copy xx zz 將xx拷貝到zz
Workdir xx(切換工作目錄,進到xx目錄) == cd
Run <命令>(自己額外的東西)
EXPOSE 暴露服務的端口 (同防火牆類似,允許端口號)
CMD 啟動容器中的應用
Docker build -t 名字 . (.表示Context上下文)(使用上面的Dockerfile創建對象)
Context:是將當前目錄打包給Server,API操作實在Server操作,所以在上下文操作需要路徑的話,需要將該路徑用上下文打包給服務器。
Docker 是 C/S模式 通過RestAPI訪問 server端
Docker數據卷
其實就是Window中的文件映射
將Docker容器中某個目錄替換成宿主機的中某個目錄(共享空間)
也可以是某些數據持久化 docker持久化技術
Mysql(last版 8.0)共享數據實例:數據卷
-e password 初始化密碼
5.7.22版本
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/libmysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql:5.7.22
在容器的my.cnf: 配置能傳輸的最大值
Echo “max_allowed_packet=20M”>>mysql.conf.d/mysqld.cnf
拷貝容器目錄到宿主機
前提是你的有一個 非映射的完整配置。
創建一個完整的mysql容器,將里面的配置拷貝出來,
下次就可以基於數據卷創建了。
將容器 mysql下的/etc/mysql /* 拷貝到usr/local/docker/mysql/conf
DockerCompose 快速部署分布式項目
sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
- 加可執行權限
chmod +x /usr/local/bin/docker-compose
Elasticsearch:檢索
n/docker-compose
K8S命令
一、啟動服務
systemctl start etcd
systemctl start docker
systemctl start kube-apiserver
systemctl start kube-controller-manager
systemctl start kube-scheduler
systemctl start kubelet
systemctl start kube-proxy
l etcd保存了整個集群的狀態;
l apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API注冊和發現等機制;
l controller manager負責維護集群的狀態,比如故障檢測、自動擴展、滾動更新等;
l scheduler負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
l kubelet負責維護容器的生命周期,同時也負責Volume(CVI)和網絡(CNI)的管理;
l Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
l kube-proxy負責為Service提供cluster內部的服務發現和負載均衡;
二、操作命令
Kubectl run 名字 --image=鏡像 --port=容器端口 --replicas=幾個 --env=”DOMAIN=域名” --------啟動鏡像
Kubectl run -i --tty <名> --image=鏡像 --port -- sh
---交互式shell運行容器(測試沒有,有待...)
Kubectl expose deployment/名字 --type=”NodePort” --port=80
----暴露Node的端口
Kubectl get services ----獲取所有服信息(如下80<容>:32269<外>)
記得打開防火牆端口
Kubectl get pods -------查看所有pods
Kubectl get replicaset --------查看所有副本
Kubectl get events -------查看所有時間(如:錯誤)
Kubectl get nodes -----查看管理的node
Kubectl describe pod/replicaset/deployments/service 名字
------查看pod/repicas/deployments/service詳情(日志)
Kubectl cluster-info ----查看集群信息
Kubectl delete pod ----刪除pod(會重新啟一個完全一樣的pod)
Kubectl delete deployment ---刪除服務(會刪除pod)
Kubectl attach <pod名> -i ---連接到運行的容器(沒用,有待...)
Kubectl scale deployment <名> --replicas=數 -擴展/縮減到N個
Kubectl set image deployment <deployment名> <容器名>:<鏡像> -------改變容器的構建鏡像版本。Tomcat8.0->tomcat9.0
Kubectl rollout status deployment <deployment名>
--------確認是否更新成功
Kubectl rollout undo deployment <deployment名>
-------回滾到修改版本前