docker和k8s 使用

实例

BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 cat、echo、grep、mount、telnet 、ping、ifconfig 等)的精简工具箱 —rm 指令可以让我们在退出容器时自动销毁该容器,这样便于测试

docker run --name box1 -it --rm busybox sh

docker 分别搭建es和面板管理

https://segmentfault.com/a/1190000020140461

docker-compose搭建es集群

https://segmentfault.com/a/1190000018606414

kubernetes使用

kubectl create -f test.yaml 创建pod

kubectl get pods 可以查询当前的pod列表

kubectl get po --show-labels 查询所有Pod,并显示标签

kubectl label po kubia-manual creation_method=manual 修改Pod标签

kubectl label po kubia-manual-v2 env=debug --overwrite 没有指定标签,可以进行添加,同时也可以修改

kubectl logs kubia-manual -c kubia 查看应用日志

kubectl get po kubia-manual -o yaml 查询Pod描述文件

kubectl delete po --all 删除所有Pod

kubectl port-forward kubia-manual 8888:8080 转发Pod

Pod筛选

kubectl get po -l creation_method=manual

kubectl get po -l creation_method=manual,env=debug

使用标签和选择器来约束pod调度

kubectl get nodes

kubectl label node minikube gpu=true

kubectl get nodes -l gpu=true

Pod注解

kubectl annotate pod kubia-manual mycompany.com/someannotation="foo bar" pod/kubia-manual annotated

查找命名空间

kubectl get ns

kubectl get po --namespace default

停止和移除pod

kubectl delete po kubia-gpu

kubectl delete po -l creation_method=manual 使用标签选择器删除pod

kubectl delete ns custom-namespace 通过删除整个命名空间来删除pod

kubectl delete po --all 删除所有Pod

kubectl delete all --all


安装python

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

安装python3

yum install python3

安装pip

curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

python3 get-pip.py


docker容器常用命令

docker for mac 安装kubernetes https://github.com/AliyunContainerService/k8s-for-docker-desktop

docker阿里云加速器 https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.549.53594685cbQcAy

一键安装docker 脚本

curl -sSL https://get.daocloud.io/docker | sh

暂停容器

docker stop

开启容器

docker start

查看开启的容器

docke ps

查看所有的容器

docker ps -a

查看最后一次启动的容器

docker ps -l

docker run -p 80:80 --name webserve -ti -d ubuntu /bin/bash 大写 -P 可以将容器内的端口随机映射到主机 可添加 --network smallsha-net 容器互通

进入容器进行操作

docker exec -ti webserve /bin/bash

查看容器的映射端口

docker port 容器ID

容器ID 查看容器的日志

docker logs -f

查看容器内的进程

docker top 容器ID

查看容器的配置和环境 经常用

docker inspect 容器Id

docker rm 容器ID 移除容器 但是容器必须是stop状态 docker rm -f 容器ID

docker commit -m="提交的描述" -a="是谁提交的" 容器ID 镜像副本名称 将当前配置好的容器打包成镜像

docker镜像常用命令

docker pull 镜像

docker run 镜像

docker rmi 删除镜像

给容器构建镜像标签

docker tag 容器ID smallsha/centos:dev

docker 容器互联

docker network ls 查看docker网络

docker network create -d bridge smallsha-net 创建dcoker 网络 bridge 桥接 overlay 网络

docker 登录docker hub

docker login

docker tag 镜像 smallsha/镜像

到自己的dockerhub

docker push smalsha/镜像

暂停所有容器

docker stop $(docker ps -q)

删除所有容器

docker rm -f $(docker ps -aq)

删除所有镜像

docker rmi $(docker images -q)

搭建kong

1  docker network create kong-net  创建单独的网络环境
2 docker run -d --name kong-database \
  --network=kong-net \
  -p 5432:5432 \
  -e "POSTGRES_USER=kong" \
  -e "POSTGRES_DB=kong" \
 -e "POSTGRES_HOST_AUTH_METHOD=trust"  \
  postgres:9.6    创建数据库
3  docker run --rm \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     kong:latest kong migrations bootstrap   使用临时Kong容器运行迁移
4 docker run -d --name kong \
     --network=kong-net \
     -e "KONG_DATABASE=postgres" \
     -e "KONG_PG_HOST=kong-database" \
     -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
     -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
     -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
     -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
     -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
     -p 8000:8000 \
     -p 8443:8443 \
     -p 8001:8001 \
     -p 8444:8444 \
     kong:latest   启动Kong
5  curl -i http://localhost:8001/  测试kong 是否正常
6 docker pull pantsel/konga
 docker run -p 1337:1337 --network kong-net --name konga -e "NODE_ENV=production" pantsel/konga   搭建konga面板

dockerfile 使用

创建dockerfile 文件

touch Dockerfile

例子

FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
    && wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
    && tar -xvf redis.tar.gz
FROM elasticsearch:7.12.0
ENV VERSION=7.12.0
RUN cd /usr/share/elasticsearch/config/ \
    && echo "http.cors.enabled: true" >> elasticsearch.yml \
    && echo 'http.cors.allow-origin: "*"' >> elasticsearch.yml \
    && cd ../plugins/
RUN /bin/bash -c '/bin/echo -e "y" | elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v${VERSION}/elasticsearch-analysis-ik-${VERSION}.zip'
EXPOSE 9200
EXPOSE 9300
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]

使用 dockerfile 构建images

docker build -t smallsha/centos:v1 .

使用&&链接多个命令的时候组合执行 构建出来的包更小 基于镜像

FROM nginx

执行命令

RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html

exec 格式:

RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev

COPY本机的内容到宿机里面

容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建

COPY hom* /mydir/

COPY hom?.txt /mydir/

ADD本机的文件到宿机里面

ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY),ADD传输文件到宿机文件格式是tar,会自动复制并且解压到宿机,缺点就是会在构建镜像的时候会变的很慢。

CMD是docker run 的时候执行的,RUN是docker build 执行的

CMD ["<可执行文件或命令>"," "," ",...]

ENTRYPOINT 果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序

docker run nginx:test -c /etc/nginx/new.conf

FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参 

ENV定义

ENV NODE_VERSION 7.2.0 使用 $ENV

ARG 和 ENV一样 当时只对dockerfile 构建的时候有效。构建好的镜像里面是不会包含的

VOLUME 1、没有指定VOLUME也没有指定-v,这种是普通文件夹。

2、指定了VOLUME没有指定-v,这种文件夹可以在不同容器之间共享,但是无法在本地修改。

3、指定了-v的文件夹,这种文件夹可以在不同容器之间共享,且可以在本地修改。

VOLUME ["<路径1>", "<路径2>"...]

EXPOSE声明容器里面的端口,docker run -P 执行容器的时候 会随机映射到容器里面的端口

WORKDIR 指定的工作目录

USER 用于指定执行后续命令的用户和用户组,

HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。

ONBUILD 用于延迟构建命令的执行


docker-compose 使用

安装

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose --version

创建docker-compose.yml 文件

touch docker-compose.yml

例子

# yaml 配置
version: '3.7' #指定本 yml 依从的 compose 哪个版本制定的。
services:
  web:
    build: .    #指定为构建镜像上下文路径:
    ports:
     - "5000:5000"
  redis:
    image: "redis:alpine"
version: "3.7"
services:
  webapp:
    build:
      context: ./dir   #上下文路径
      dockerfile: Dockerfile-alternate  #指定构建镜像的 Dockerfile
      文件名。
      command: python manage.py runserver 0.0.0.0:8000
      volumes:
         - .:/code
      links:
         - db   
      args:   
        buildno: 1  #添加构建参数,这是只能在构建过程中访问的环境变量
      labels:  #设置构建镜像的标签
        - "com.example.description=Accounting webapp"
        - "com.example.department=Finance"
        - "com.example.label-with-empty-value"
      target: prod  #多层构建,可以指定构建哪一层。
version: '2'    'compose版本号'
services:    '服务标识符'
  web:    '子服务名'
    image: dockercloud/hello-world    '服务依赖镜像属性'
    ports:    '服务端口属性'
      - 8080
    networks:    '网络服务属性'
      - front-tier
      - back-tier
  redis:
    image: redis
    links:    '容器间的连接设置'
      - web
    networks:
      - back-tier
  lb:
    image: dockercloud/haproxy
    ports:
      - 80:80
    links:
      - web
    networks:
      - front-tier
      - back-tier
    volumes:    '挂载一个目录或者一个已存在的数据卷容器'
      - /var/run/docker.sock:/var/run/docker.sock 
networks:
  front-tier:
    driver: bridge
  back-tier:
    driver: bridge
version: "2.2"
services:
  elasticsearch:
    image: elasticsearch:7.4.2
    restart: always
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elastic
    environment:
      - "discovery.type=single-node"

  kibana:
    image: kibana:7.4.2
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - elastic

networks:
  elastic:
    driver: bridge

启动应用

docker-compose up

启动容器并且后台运行

docker-compose up -d

docker-compose restart(重启) pause(暂停) unpause(恢复) rm(删除容器) stop(暂停容器) start(开启容器) build(构建) ps(显示)

进入到容器中

docker-compose exec nginx bash

查看日志 -f 参数实时查看日志

docker-compose logs nginx

验证docker-compose文件是否正确

docker-compose config -q

cap_add,cap_drop添加或删除容器拥有的宿主机的内核功能。

cap_add:
  - ALL # 开启全部权限

cap_drop:
  - SYS_PTRACE # 关闭 ptrace权限

cgroup_parent

cgroup_parent: m-executor-abcd # 为容器指定父 cgroup 组,意味着将继承该组的资源限制。

command 覆盖容器启动的默认命令

command: ["bundle", "exec", "thin", "-p", "3000"]

container_name 指定生成容器的名称

depends_on

version: "3.7"
services:       
  web:
    build: .
    depends_on:   #以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
      - db
      - redis
  redis:
    image: redis
  db:
    image: postgres

deploy指定与服务的部署和运行有关的配置。


dockerhub 账号 smallsha smallsha666..

docker-compose 编排

https://www.cnblogs.com/wj5633/p/6707012.html

docker 手册

http://wiki.jikexueyuan.com/project/docker-technology-and-combat/usage.html 上传镜到docker hub https://www.cnblogs.com/wherein/p/6862911.html

环境配置(博客)(特别好php 学习文章)

https://www.awaimai.com/671.html

https://blog.csdn.net/relax_hb/article/details/69668815 docker 介绍

https://blog.csdn.net/jiang_xinxing/article/details/58025417 博客技术 docker使用

https://download.docker.com/mac/stable/Docker.dmg docker 下载链接

https://www.cnblogs.com/zoulifeng2017/p/7514139.html 安装brew

https://www.cnblogs.com/LO-gin/p/6958720.html php环境搭建 详细说明了每一个命令的参数

https://www.cnblogs.com/qinyujie/p/8532515.html docker 安装lnmp 环境 (实际操作安装成功)

https://blog.csdn.net/cmzsteven/article/details/49230363 删除容器 解决冲突

https://blog.csdn.net/qq_35981283/article/details/69648171 安装rabbitmq

https://blog.csdn.net/lkxlaz/article/details/54580735 brew 安装mysql 数据库密码: SMALLsha@123

https://blog.csdn.net/weixin_40221833/article/details/79664667 docker 安装swoole

管理数据库软件连接不上,输入以下命令v

ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'SMALLsha@123';

容器与主机之间mount 不上 就新开个container进行挂载,然后在返回要用的容器(现在主机上创建文件夹)

查看php.ini 位置

/usr/local/php/bin/php --ini

此处贴一份nginx 配置 php

location ~ \.php(.*)$ {
   root   /var/www/html/;
   fastcgi_pass 172.17.0.3:9000;
   fastcgi_index index.php;
   fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param PATH_INFO $fastcgi_path_info;
   fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
   include  fastcgi_params;
   }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值