K8S详细参考文档
docker详细参考文档

docker

两句口号
第一句,是“Build, Ship and Run”,也就是,“搭建、发送、运行”,三板斧
第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”

1、核心概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

镜像是什么?//是建造玩具的模型
仓库是什么?//是可以放很多玩具模型(镜像)的仓库
container是什么?//建好的玩具, 就是一个容器

2、镜像命令

2.1 退出容器

  1. control+p+q

2.2 帮助命令

  1. docker version #显示docker版本信息
  2. docker info #显示docker的系统信息,包括镜像和容器数量
  3. docker 命令 --help #帮助文档

2.3 查看所有本地的主机上的镜像

  1. [root@192 ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. hello-world latest bf756fb1ae65 10 months ago 13.3kB
  4. #解释
  5. REPOSITORY 镜像的仓库源
  6. TAG 镜像标签
  7. IMAGE ID 镜像的Id
  8. CREATED 镜像的创建时间
  9. SIZE 镜像的大小
  10. #可选项
  11. [root@192 ~]# docker images --help
  12. -a, --all # 列出所有镜像
  13. -q, --quiet # 只显示镜像Id

2.4 搜镜镜像

  1. [root@192 ~]# docker search mysql
  2. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  3. mysql MySQL is a widely used, open-source relation 10174 [OK]
  4. mariadb MariaDB is a community-developed fork of MyS 3747 [OK]
  5. mysql/mysql-server Optimized MySQL Server Docker images. Create 743 [OK]
  6. percona Percona Server is a fork of the MySQL relati 511 [OK]
  7. #可选项
  8. --filter STARS=3000 #会去搜索大于3000的即镜像
  9. [root@192 ~]# docker search mysql --filter STARS=3000
  10. NAME DESCRIPTION STARS OFFICIAL AUTOMATED
  11. mysql MySQL is a widely used, open-source relation 10174 [OK]
  12. mariadb MariaDB is a community-developed fork of MyS 3747 [OK]

2.5 下载镜像

  1. #默认下载最新版
  2. [root@192 ~]# docker pull mysql
  3. Using default tag: latest #如果不写tage,默认就是latest
  4. latest: Pulling from library/mysql
  5. bb79b6b2107f: Pull complete #分层下载 docker iamge的核心 联合文件系统
  6. 49e22f6fb9f7: Pull complete
  7. 842b1255668c: Pull complete
  8. 9f48d1f43000: Pull complete
  9. c693f0615bce: Pull complete
  10. 8a621b9dbed2: Pull complete
  11. 0807d32aef13: Pull complete
  12. a56aca0feb17: Pull complete
  13. de9d45fd0f07: Pull complete
  14. 1d68a49161cc: Pull complete
  15. d16d318b774e: Pull complete
  16. 49e112c55976: Pull complete
  17. Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 签名 唯一表示
  18. Status: Downloaded newer image for mysql:latest
  19. docker.io/library/mysql:latest # 真实地址
  20. #等价
  21. docker pull mysql
  22. docker pull docker.io/library/mysql:latest
  23. #指定版本下载
  24. [root@192 ~]# docker pull mysql:5.7

2.6 删除镜像

  1. [root@192 ~]# docker rmi -f 镜像Id 删除指定镜像
  2. [root@192 ~]# docker rmi -f 镜像Id 镜像Id 镜像Id 删除多个镜像
  3. [root@192 ~]# docker rmi -f $(docker images -qa) 删除所有镜像

3、容器命令

3.1 新建容器命令

  1. docker run [可选参数] image
  2. # 参数说明
  3. --name 容器名 tomcat1/java/ 用来区分容器
  4. -d 后台方式运行
  5. -it 使用交互方式运行,进入容器查看内容
  6. -p 指定容器的端口 -p 8080:8080
  7. -p ip:主机端口:容器端口
  8. -p 主机端口:容器端口(常用)
  9. -p 容器端口
  10. -p 随机指定端口
  11. #测试案例 启动容器
  12. [root@192 ~]# docker run -it centos /bin/bash
  13. [root@c1afa7ccf7d6 /]# ls
  14. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  15. #退回容器到主机
  16. [root@c1afa7ccf7d6 /]# exit
  17. exit
  18. docker run -d -p 8889:8889 freakchicken/kafka-ui-lite
  19. #如果本地没有镜像,则会去网上拉取最新镜像

3.2 查看Docker当前运行的容器

  1. #docker -ps 命令
  2. #参数介绍
  3. # 列出当前运行的容器
  4. -a # 列出当前在运行的容器+历史容器
  5. -n=n # 显示容器的n个值
  6. -q # 只显示容器编号
  7. [root@192 ~]# docker ps -a
  8. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  9. c1afa7ccf7d6 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago lucid_mclean
  10. 536b2397c88f bf756fb1ae65 "/hello" 4 days ago Exited (0) 4 days ago competent_lamport

3.3 退出容器

  1. exit # 直接退出容器不后台运行
  2. Ctrl + P + Q #退出如容器 后台运行

3.4 删除容器

  1. docker rm 容器Id #删除指定的容器,不能删除在运行过程也中的容器,如果要强制删除加-f
  2. docker rm -f $( docker ps -aq) #删除所有容器器
  3. docker ps -a -q | xargs docker rm #删除所有容器器

3.5 启动和停止容器命令

  1. docker start 容器 id #启动容器
  2. docker restart 容器 id # 重启容器
  3. docker stop 容器 id #停止当前正在运行的容器
  4. docker kill 容器 id #强制停止当前容器

3.6 其他命令

  1. #命令 docker run -d 镜像名!
  2. root@192 ~]# docker run -d centos
  3. 66cee4f4493944e503edbcd4477bed9b778d7a41cb5698f8334a7a23118f1c9c
  4. # 问题 docker ps 发现 cnetos停止了
  5. #常用的坑:
  6. #docker 容器使用后台运行,就必须要有一个前台运行进程,docker发现没有应用,就会自动停止
  7. #nginx,容器启动后,发现自己没有提供服务,就会立刻停掉,就没有程序了

3.7 查看日志

  1. docerk logs -f -t --tail 容器 没有日志
  2. #自己编写一个shell脚本
  3. [root@192 ~]# docker run -d centos /bin/sh -c "while true;do echo hello 大数据老哥; sleep 1 ;done"
  4. 88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64
  5. [root@192 ~]# docker ps
  6. CONTAINER ID
  7. 88c647580c32
  8. #显示日志
  9. -tf #显示日志
  10. --tail number #显示日志条数
  11. [root@192 ~]# docker logs -tf --tail 10 88c647580c32
  12. 2020-11-21T06:54:44.902712929Z hello 大数据老哥
  13. 2020-11-21T06:54:45.904301943Z hello 大数据老哥
  14. 2020-11-21T06:54:46.906363448Z hello 大数据老哥
  15. 2020-11-21T06:54:47.908508313Z hello 大数据老哥

3.8 查看容器进程信息

  1. docker top 容器ID
  2. [root@192 ~]# docker top 88c647580c
  3. UID PID PPID C STIME
  4. root 2704 2688 0 14:52
  5. root 3072 2704 0 14:57

3.9 查看镜像的元数据新信息

  1. #命令
  2. docker inspect 容器Id

3.10 进入当前正在云行的容器

  1. # 我们通常容器都是后台运行的,需要进入容器进行修改一些配置
  2. #命令
  3. #方式一
  4. [root@192 ~]# docker ps
  5. CONTAINER ID
  6. 88c647580c32
  7. [root@192 ~]# docker exec -it 88c647580c /bin/bashh
  8. [root@88c647580c32 /]# ls
  9. bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
  10. [root@88c647580c32 /]# ps -ef
  11. UID PID PPID C STIME TTY TIME CMD
  12. root 1 0 0 06:52 ? 00:00:00 /bin/sh -c while true;do echo hello ???????????????; sleep 1 ;done
  13. root 1121 0 0 07:10 pts/0 00:00:00 /bin/bash
  14. root 1138 1 0 07:10 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
  15. root 1139 1121 0 07:10 pts/0 00:00:00 ps -ef
  16. [root@88c647580c32 /]# exit
  17. exit
  18. #方式二
  19. [root@88c647580c32 /]# docker attach 88c647580c
  20. 正在运行的代码
  21. # attach 与 exec 区别
  22. docker exec #进容器后开启一个新的后端,可以直接在面进行操作
  23. docker attach #进入容器正在执行终端,不会启动新的进程

3.11 docker 与本地系统文件进行拷贝

  1. # 进入容器
  2. [root@192 ~]# docker exec -it 88c647580c /bin/bash
  3. [root@88c647580c32 /]# cd home/
  4. #创建文件
  5. [root@88c647580c32 home]# touch test.txt
  6. [root@88c647580c32 home]# exit
  7. exit
  8. #拷贝文件
  9. [root@192 ~]# docker cp 88c647580c:/home/test.txt /home/
  10. [root@192 ~]# ls /home/
  11. test.txt
  12. [root@192 ~]#

3.12 清理none对象

  1. docker system prune

4、docker安装mysql

4.1 docker 拉取 mysql(M1只支持mysql/mysql-serve)

  1. docker pull mysql:5.7

4.2 查看MySQL镜像

  1. docker images | grep mysql

4.3 Docker 启动 MySQL

  1. docker run -p 3306:3306 --name mysql -v /$PWD/mysql/my.cnf:/etc/mysql/my.cnf -v /$PWD/mysql/logs:/logs -v /$PWD/mysql/data:/mysql_data -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

参数说明:

-p 3306:3306:将容器的3306端口映射到主机的3306端口

-v $PWD/conf/my.cnf:/etc/mysql/my.cnf:将主机当前目录下的conf/my.cnf挂载到容器的/etc/mysql/my.cnf

-v $PWD/logs:/logs:将主机当前目录下的logs目录挂载到容器的/logs

-v $PWD/data:/mysql_data:将主机当前目录下的data目录挂载到容器的/mysql_data

-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码

4.4 查看容器id

  1. docker ps

4.5 登陆mysql容器

  1. docker exec -it 容器id bash

4.6 登陆mysql

  1. mysql -u root -p

4.7 查看MySQL字符集

  1. mysql> show variables like 'character%';

4.8 修改字符集

修改/$PWD/mysql/my.cnf文件内容

  1. [client]
  2. default-character-set=utf8
  3. [mysql]
  4. default-character-set=utf8
  5. [mysqld]
  6. init_connect='SET collation_connection = uft8_unicode_ci'
  7. init_connect='SET NAMES utf8'
  8. character-set-server=utf8
  9. collation-server=utf8_unicode_ci
  10. skip-character-set-client-handshake

4.9 重启MySQL容器

  1. docker restart 2a874341529a(容器 ID

5 Docker-compose

  1. version: '2'
  2. services:
  3. jobmanager:
  4. image: khkw/flink:1.11.1
  5. volumes:
  6. - ~/flinkDeploy:/opt/flinkDeploy
  7. hostname: "jobmanager"
  8. expose:
  9. - "6123"
  10. ports:
  11. - "4000:4000"
  12. command: jobmanager
  13. environment:
  14. - |
  15. FLINK_PROPERTIES=
  16. jobmanager.rpc.address: jobmanager
  17. state.backend: filesystem
  18. state.checkpoints.dir: file:///tmp/chkdir
  19. state.savepoints.dir: file:///tmp/chkdir
  20. restart-strategy: fixed-delay
  21. restart-strategy.fixed-delay.attempts: 3
  22. restart-strategy.fixed-delay.delay: 2 s
  23. state.checkpoints.num-retained: 2
  24. state.backend.local-recovery: true
  25. taskmanager:
  26. image: khkw/flink:1.11.1
  27. volumes:
  28. - ~/flinkDeploy:/opt/flinkDeploy
  29. expose:
  30. - "6121"
  31. - "6122"
  32. depends_on:
  33. - jobmanager
  34. command: taskmanager
  35. links:
  36. - jobmanager:jobmanager
  37. environment:
  38. - JOB_MANAGER_RPC_ADDRESS=jobmanager
  39. zookeeper:
  40. container_name: zookeeper
  41. image: zookeeper:3.6.1
  42. ports:
  43. - "2181:2181"
  44. kafka:
  45. container_name: kafka
  46. image: wurstmeister/kafka:2.12-2.5.0
  47. volumes:
  48. - /var/run/docker.sock:/var/run/docker.sock
  49. ports:
  50. - "9092:9092"
  51. depends_on:
  52. - zookeeper
  53. environment:
  54. HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"
  55. KAFKA_CREATE_TOPICS: "test:1:1"
  56. KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
  57. #KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092
  58. # KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092
  59. # mysql:
  60. # image: mysql:5.7
  61. # container_name: mysql
  62. # volumes:
  63. # - ~/mysql/data/db:/var/lib/mysql/
  64. # - ~/mysql/mysql-3346.sock:/var/run/mysql.sock
  65. # - ~/mysql/data/conf:/etc/mysql/conf.d
  66. # ports:
  67. # - 3306:3306
  68. # command:
  69. # --default-authentication-plugin=mysql_native_password
  70. # --lower_case_table_names=1
  71. # environment:
  72. # MYSQL_ROOT_PASSWORD: 123456
  73. # TZ: Asia/Shanghai

5.1 执行docker-compose

  1. docker-compose -f 文件.yml up -d

6、启动portainer

  1. docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name prtainer-test portainer/portainer

说明:该语句用宿主机9000端口关联容器中的9000端口,并给容器起名为portainer-test。执行完该命令之后,使用该机器IP:PORT即可访问Portainer。

7、docker network —help

7.1 docker network ls

查看正在链接的ip地址

7.2 docker network inspect

查看详情ip

7.3 docker network create

创建网络

8、安装kafka

  1. docker pull wurstmeister/zookeeper:latest
  2. docker pull wurstmeister/kafka:2.12-2.3.1
  3. docker run -d --name zookeeper -p 2181:2181 -v /mnt/sdc/zookeeper/data:/opt/zookeeper-3.4.13/data -v /etc/localtime:/etc/localtime:ro -t wurstmeister/zookeeper
  4. docker run -d --name kafka -p 9092:9092 -v /mnt/sdc/kafka/logs:/opt/kafka/logs -v /mnt/sdc/kafka/kafka-logs:/kafka/kafka-logs -v /etc/localtime:/etc/localtime:ro -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.0.115:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.0.115:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -e KAFKA_LOG_DIRS=/kafka/kafka-logs -t wurstmeister/kafka:2.12-2.3.1

9、安装MongoDB

运行容器

  1. docker run -itd --name mongo -p 27017:27017 mongo --auth
  • -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
  • —auth:需要密码才能访问容器服务。

添加用户和设置密码,并且尝试连接

  1. $ docker exec -it mongo mongo admin
  2. # 创建一个名为 admin,密码为 123456 的用户。
  3. > db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});
  4. # 尝试使用上面创建的用户信息进行连接。
  5. > db.auth('admin', '123456')

10、docker 安装hdfs

http://t.zoukankan.com/hongdada-p-9488349.html

k8s

定义:就是基于容器的集群管理平台,它的全称,是kubernetes。
作用:如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。

kubelet:运行在cluster所有节点上,负责启动POD和容器
kubeadm:用于初始化cluster
kubectl:kubectl是kubenetes命令行工具,通过kubectl可以部署和管理应用,查看各种资源,创建,删除和更新组件












1、k8s集群

image.png
一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。

深入来看这两种节点。

首先是Master节点

Master

image.png
Master节点包括API Server、Scheduler、Controller manager、etcd。

API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。

Scheduler负责对集群内部的资源进行调度,相当于“调度室”。

Controller manager负责管理控制器,相当于“大总管”。

Node

image.png
Docker,不用说了,创建容器的。

Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。

Kube-proxy,主要负责为Pod对象提供代理。

Fluentd,主要负责日志收集、存储与查询。

k8s常用命令