一 、 docker 常用基础命令
1.进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash
2.提交修改好的镜像
//提交镜像修改
docker commit -a "用户名" -m "提交注释" -m 容器id
3. 查看当前的镜像
docker images
4.将镜像保存为压缩包 可以供其他机器加载
docker save -o abc.tar didamysql:v1.0
//在别的机器加载
docker load -i abc.tar
5.推送远程仓库
docker tag 本地镜像:v1.0 远程仓库名:镜像名:v1.2 //类似于将本地镜像名改为远程指定名字,因为需要带有远程仓库的类似于用户标识,才能被远程镜像仓库识别
docker login 登录远程仓库
docker logout (推送完成后退出)
docker push 远程仓库名:镜像名:v1.2(也就是新改的名字)
6.拉取镜像 到本地
docker pull 远程仓库认证路径:镜像名:v1.2
docker pull dida/my-repo:mysql:v1.2
7.运行镜像
docker run -d(后台运行) -p80:80(端口映射,端口暴露,机器的端口映射到容器端口) 镜像名:版本号
#es docker启动步骤
# 创建数据目录
mkdir -p /mydata/es-01 && chmod 777 -R /mydata/es-01
# 容器启动
docker run --restart=always -d -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms512m -Xmx512m" \
-v es-config:/usr/share/elasticsearch/config \
-v /mydata/es-01/data:/usr/share/elasticsearch/data \
--name es-01 \
elasticsearch:7.13.4
//其中 -e 为要指定的变量
8.挂载数据
docker run --name mysqlsql -v 本地路径:容器中文件:ro(只读模式) -d 镜像名称
9.查看当前运行的容器
docker ps
10.查看容器运行的日志
docker logs -f(监听着) 容器id
11.指定容器中文件复制出来
docker cp 容器id:容器文件路径 /data/conf/config.conf(本地路径)
//反过来写就是将本地的文件复制到容器中
docker cp /data/conf/config.conf(本地路径) 容器id:容器文件路径
一般运行的时候都是挂载配置文件,数据库则另外挂载数据,保证持久化
12.docker 启动命令且要开机启动
systemctl enable docker --now
二 、 构建镜像相关
1.dockerfile 模板
FROM openjdk:8-jdk-slim
LABLE maintainer=dida
COPY 本地文件.jar /test.jar
ENTRYPOINT ["java","-jar","/test.jar"]
2.docker 镜像构建
docker build -t java-test:v1.0 [Dockerfile](如果文件名就是dockerfile可以不写) .(需要有点 当前目录下)
三、k8s
1.启动一个应用
kubectl create deploy myapp --image==nginx
kubectl create deployment mynginx --image=nginx -- replicas=3
2.执行yaml 创建应用
kubectl apply -f calico.yaml
kubectl delete -f calico.yaml 删除指定的应用
k8s中对于资源的创建,可以通过命令行的方式进行,也可以都通过执行yaml文件的方式。
3.查看集群中有多少应用
kubectl get pods -A (查看所有的)
kubectl get pods -A (查看所有的) -w(阻塞住,可以一直监听着状态的变化)
watch -n 1 kubectl get pod (每秒都打印一下pod信息)
4.获取指定用户的访问令牌 token
token 获取脚本 kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin | awk '{print $1}')
5.查看pod的详细信息
kubectl describe pod pod-name
//查看pod日志
kubectl logs pod-name
6.查看 pod 信息
kubectl get pod -0wide
7.进入到pod中
kubectl exec -it pod-name -- /bin/bash
8.一个pod两个容器多个容器 yaml 编写
apiVersion: v1
kind: Pod
metadata:
labels:
run: myapp
name: myapp
spec:
containers:
- image: nginx
name: nginx
- image: tomcat:8.5.68
name: tomcat
9.扩缩容
kubectl scale deploy/my-dep -- replicas = 5
//缩容
kubectl scale deploy/my-dep -- replicas =1
10.修改pod运行的镜像
kubectl set image deploy/my-dep nginx=nginx:1.16.1 --record
11.工作负载,几种部署模式
service
12.创建service 暴露映射端口
kubectl expose deploy my-dep --port=8000(service 暴露的端口) --target-port = pod映射的端口 --type = Nodeport 这样集群外也可以访问了,默认是 cluster-ip只能在集群内访问
默认service 暴露的端口范围 30000~32767之间
每一组pod都有对应的标签,根据标签暴露对应的pod端口;
域名可以在pod内访问,但是在节点就不太行需要绑定;
service 就是实现了负载均衡
ingress
13. ingress网络作用
14.ingress 绑定服务端口,yaml配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-host-bar
spec:
ingressClassName: nginx
rules:
- host: "hello.atguigu.com"
http:
paths:
- pathType: Prefix
path: "/"
backend:
service:
name: hello-server
port:
number: 8000
- host: "demo.atguigu.com"
http:
paths:
- pathType: Prefix
path: "/nginx" # 把请求会转给下面的服务,下面的服务一定要能处理这个路径,不能处理就是404
backend:
service:
name: nginx-demo ## java,比如使用路径重写,去掉前缀nginx
port:
number: 8000
存储 nfs 挂载pv/pvc
14.原生方式挂载 nfs 的yaml配置
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-pv-demo
name: nginx-pv-demo
spec:
replicas: 2
selector:
matchLabels:
app: nginx-pv-demo
template:
metadata:
labels:
app: nginx-pv-demo
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
nfs:
server: 172.31.0.4
path: /nfs/data/nginx-pv
15.pv/pvc
14.创建pv yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv01-10m
spec:
capacity:
storage: 10M
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/01
server: 172.31.0.4
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv02-1gi
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/02
server: 172.31.0.4
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv03-3gi
spec:
capacity:
storage: 3Gi
accessModes:
- ReadWriteMany
storageClassName: nfs
nfs:
path: /nfs/data/03
server: 172.31.0.4
15.获取当前的pv 情况
kubectl get persistentvolume
16.pod绑定pvc
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy-pvc
name: nginx-deploy-pvc
spec:
replicas: 2
selector:
matchLabels:
app: nginx-deploy-pvc
template:
metadata:
labels:
app: nginx-deploy-pvc
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: html
mountPath: /usr/share/nginx/html
volumes:
- name: html
persistentVolumeClaim:
claimName: nginx-pvc
17.创建配置集yaml文件
kubectl cm redis-conf --from=redis.conf
17.config yaml
apiVersion: v1
data: #data是所有真正的数据,key:默认是文件名 value:配置文件的内容
redis.conf: |
appendonly yes
kind: ConfigMap
metadata:
name: redis-conf
namespace: default
18. pod yaml 和对应的config绑定
apiVersion: v1
kind: Pod
metadata:
name: redis
spec:
containers:
- name: redis
image: redis
command:
- redis-server
- "/redis-master/redis.conf" #指的是redis容器内部的位置
ports:
- containerPort: 6379
volumeMounts:
- mountPath: /data
name: data
- mountPath: /redis-master
name: config
volumes:
- name: data
emptyDir: {}
- name: config
configMap:
name: redis-conf
items:
- key: redis.conf
path: redis.conf
19.导出对应应用的yaml 文件
kubectl get service serviceName -o yaml > backup.yaml
四、maven
1.maven 打包命令
mvn clean package -Dmaven.test.skip = true