一 、 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

k8s能使用docker本地的镜像吗 k8s管理docker镜像_docker

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}')

k8s能使用docker本地的镜像吗 k8s管理docker镜像_docker_02

 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.工作负载,几种部署模式

k8s能使用docker本地的镜像吗 k8s管理docker镜像_docker_03

 service

12.创建service 暴露映射端口

kubectl expose deploy my-dep --port=8000(service 暴露的端口) --target-port = pod映射的端口 --type = Nodeport 这样集群外也可以访问了,默认是 cluster-ip只能在集群内访问

默认service 暴露的端口范围 30000~32767之间

k8s能使用docker本地的镜像吗 k8s管理docker镜像_docker_04

 每一组pod都有对应的标签,根据标签暴露对应的pod端口;

域名可以在pod内访问,但是在节点就不太行需要绑定;

service 就是实现了负载均衡

ingress

 13. ingress网络作用

k8s能使用docker本地的镜像吗 k8s管理docker镜像_k8s能使用docker本地的镜像吗_05

 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

k8s能使用docker本地的镜像吗 k8s管理docker镜像_docker_06

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

k8s能使用docker本地的镜像吗 k8s管理docker镜像_容器_07

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

k8s能使用docker本地的镜像吗 k8s管理docker镜像_docker_08

19.导出对应应用的yaml 文件

kubectl get service serviceName -o yaml > backup.yaml

四、maven

1.maven 打包命令

mvn clean package -Dmaven.test.skip = true