docker与k8s的常用命令

梦境迷离

说明

//是附加注释

  1. 此处主要常用的命令,不是命令大全
  2. Mac上操作(Linux基本相同)
  3. Docker命令分为镜像命令、容器命令、其他命令

Docker命令

  • 安装docker

CentOS6

//EPEL库
sudo yum install http://mirrors.yun-idc.com/epel/6/i386/epel-release-6-8.noarch.rpm
sudo yum install docker-io

CentOS7

sudo yum install docker

注册为服务

sudo service docker start
sudo chkconfig docker on

镜像相关命令

Docker镜像就是一个只读的模板

  • 安装Linux
    docker pull centos:6 //6是版本号
    
  • 查看所有的镜像,也包括tag在里面
    docker images
    
  • 使用仓库的Dockerfile文件,创建一个镜像
    docker build -t IMAGE
    
  • 使用当前目录的Dockerfile创建镜像,标签为gio-test/test-project:test-tag
    docker build -t gio-test/test-project:test-tag . //后面有个点
    
  • 显示这台机器上的所有镜像
    docker images -a
    
  • 从本机移除所有的镜像
    docker rmi $(docker images -q)
    
  • 移除本地test镜像
    sudo docker rmi test/test //docker rm 命令是移除容器
    
  • 上传打完tag的镜像到remote的registry
    docker push username/repository:tag
    
  • 从registry运行指定的镜像
    docker run username/repository:tag
    

如果你没有在这些命令中指定 :tag 部分,在你生成和运行镜像时,最新的tag :latest 会被默认使用。 如果没有指定tag,Docker会使用最新的镜像版本,即latest(所以不指定会坑爹)

  • 查看镜像的详细信息
    docker inspect IMAGE
    
  • 查看私有库的镜像
    curl 192.168.x.x:5000/v2/_catalog
    
  • 搜索镜像
    docker search consul //consul 服务注册发现框架
    
  • 导出镜像到本地文件
    docker save -o ubuntu_14.04.tar ubuntu:14.04  //导出ubuntu到ubuntu_14.04.tar
    
  • 从文件载入镜像
    docker load --input ubuntu_14.04.tar
    //或
    docker load < ubuntu_14.04.tar //镜像存储文件将保存完整记录,体积也要大
    

容器相关命令

Docker利用容器来运行应用,容器是从镜像创建的运行实例

  • 查看正在运行的所有的容器的列表
    docker ps
    
  • 停止运行指定的容器
    docker stop CONTAINER_ID
    
  • 查看所有的容器列表,包括没有在运行的
    docker ps -a
    
  • 强行关闭指定的容器
    docker kill CONTAINER_ID  //CONTAINER_ID是容器ID
    
  • 从这台机器上移除所有未运行的容器
    docker rm $(docker ps -a -q)
    
  • push文件到docker的某个容器中
    docker cp squid.conf  CONTAINER_ID:/etc/squid
    
  • 进入运行的容器
    docker exec -it CONTAINER_ID /bin/bash //可能有镜像的多个实例,需要指定运行的容器ID,而不是镜像ID,根据需要bash换成sh也可以
    
  • 将本地目录挂载到docker容器上
    docker run -i -t -v /Users/xx:/etc/squid3 IMAGE /bin/bash //docker run -i -t -v 本地绝对路径:docker上绝对路径 镜像ID  /bin/bash
    
  • 将本地目录挂载到docker容器上并加端口映射启动容器
    docker run  -p 12345:3128 -i -t -v  /Users/xx:/etc/squid3 IMAGE /bin/bash
    
  • 运行镜像,并且映射主机端口12345 到容器端口 3128(默认)
    docker run -p 12345:3128 IMAGE  //是镜像ID,下同
    
  • 同上,但是此条命令是把镜像运行在后台进程中
    docker run -p -d 12345:3128 IMAGE  //-d表示后台运行
    
  • 进入正则运行的容器,并执行命令
    docker exec -it CONTAINER_ID /bin/bash-c "ls"  //ls是需要执行的命令
    
  • 将一个已经终止的容器启动运行起来
    docker start
    
  • 重新启动
    docker restart
    
  • 提交容器修改
    docker commit CONTAINER_ID IMAGE //不提交下次启动就是新的,里面修改都没有
    
  • 修改自己commit的容器tag
    docker tag IMAGE_ID userName/repositoryName:tag //需要执行docker login,即时使用图形界面登陆过
    
  • 使用本地配置文件启动squid代理
    docker run -p 3128:3128 -i -t -v /Users/xx:/etc/squid3 IMAGE
    
  • 导出容器快照到本地文件
    docker export CONTAINER_ID > fileName.tar
    
  • 从容器快照文件中再导入为镜像
    cat fileName.tar | sudo docker import - test/test:1.0
    
  • 通过指定URL或者某个目录来导入
    docker import http://example.com/exampleimage.tgz example/imagerepo  //容器快照文件将丢弃所有的历史记录和元数据信息
    

其他

  • 推送到私服
    docker push 192.168.x.x:5000/docker-repo/squid:3.3.8-14
    
  • docker的运行开启HTTP配置
    /Users/xx/.docker/daemon.json //使用安装包安装的
    {
    "debug" : true,
    "insecure-registries" : [
      "192.168.x.x:5000"
    ],
    "experimental" : true
    }
    
  • 拷贝docker的文件到本地
    docker cp CONTAINER_ID:/etc/squid3/squid.conf /Users/xx/xx
    
  • 本地文件拷贝到docker
    docker cp 本地路径 容器ID:容器路径
    
  • 查看docker的端口映射
    docker port  CONTAINER_ID
    
  • 给容器安装vim命令
    apt-get update //同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引 
    apt-get install vim //安装命令,其他类似(先登录进运行的容器,关闭容器则失效)
    
  • 查看squid代理的链接访问日志
    tail -f /var/log/squid/access.log //根据版本可能是squid3
    
  • 容器内的Linux安装Apache
    apt-get install apache2=2.4.29-1ubuntu4.5 //后面是版本号
    
  • 使用Docker credentials 登录到CLI会话
    docker login
    
  • 添加squid的证书
    sudo htpasswd -c squid_passwd  dreamylost
    

K8s命令

  • 端口映射
    映射本地端口到远程k8s容器的pod上的端口,以k8s-ads-tracking的server-1为例
    1.查询所有运行的pods并以k8s-ads-tracking开头的
    kubectl -n k8s-ads-tracking get pods --kubeconfig=/Users/name/project-conf/k8s-config
    k8s-config是k8s的验证配置文件,有秘钥
    2.进入运行的pod 选择server-1
    kubectl -n k8s-ads-tracking exec -ti k8s-ads-tracking-server-1-85f4ff5fcb-9b9bs bash --kubeconfig=/Users/name/project-conf/k8s-config
    3.查看网络连接
    netstat -antp | grep 1
    4.映射端口
    kubectl -n k8s-ads-tracking port-forward k8s-ads-tracking-server-1-85f4ff5fcb-9b9bs 19000:19000 --kubeconfig=/Users/name/project-conf/k8s-config
    5.完成将本地19000端口映射到k8s环境的`k8s-ads-tracking-server-1-85f4ff5fcb-9b9bs`实例上的19000端口上
    
  • 获取Pod的运行状态
    kubectl get pods //以nginx为例,下同
    
  • 获取Pod中所有容器的运行状态
    kubectl  get pods nginx -o json //json以json形式展示,wide以直接铺开的形式展示
    
  • 获得Pod的更多详细信息
    kubectl describe pods nginx
    
  • 根据Pod的名称删除指定的Pod
    kubectl delete pods/nginx
    
  • 根据yaml配置文件删除Pod
    kubectl delete -f pod-nginx.yaml
    
  • 进入到容器内部
    kubectl exec -it nginx bash
    
  • 如果Pod中有多个容器,可以使用-c参数指定具体的容器
    kubectl exec -it nginx bash -c nginx
    
  • 观察容器的输出日志
    kubectl logs nginx // -f --tail 200 等价 tail命令的tail -200f
    
  • 获取所有配置
    kubectl get configmaps 
    
  • 获取某个Pod的配置
    kubectl get configmaps nginx-configs
    
  • 编辑配置
    kubectl edit configmaps nginx-configs //zsh装了k8s插件后可以提示有哪些配置文件,如果不想重新部署时镜像配置失效,可以放到全局配置
    
  • 删除Pod
    kubectl delete pods nginx-6c5f5ff6fd-fqtl9 //修改Pod配置后需要删除Pod,使其自动重启生效。
    

待补充。。。

最详细的 在Windows上 使用docker 搭建 consul 集群

Kubernetes 中文文档

PS: 镜像可以理解是已经打包的开放包,容器是包的一次执行,与运行时相关的一般都使用容器CONTAINER_ID

文档信息

Search

    Table of Contents