Docker和K8S命令
一、安装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名>
-------回滚到修改版本前