docker
两句口号
第一句,是“Build, Ship and Run”,也就是,“搭建、发送、运行”,三板斧
第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”
1、核心概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
镜像是什么?//是建造玩具的模型
仓库是什么?//是可以放很多玩具模型(镜像)的仓库
container是什么?//建好的玩具, 就是一个容器
2、镜像命令
2.1 退出容器
control+p+q
2.2 帮助命令
docker version #显示docker版本信息docker info #显示docker的系统信息,包括镜像和容器数量docker 命令 --help #帮助文档
2.3 查看所有本地的主机上的镜像
[root@192 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest bf756fb1ae65 10 months ago 13.3kB#解释REPOSITORY 镜像的仓库源TAG 镜像标签IMAGE ID 镜像的IdCREATED 镜像的创建时间SIZE 镜像的大小#可选项[root@192 ~]# docker images --help-a, --all # 列出所有镜像-q, --quiet # 只显示镜像Id
2.4 搜镜镜像
[root@192 ~]# docker search mysqlNAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 10174 [OK]mariadb MariaDB is a community-developed fork of MyS… 3747 [OK]mysql/mysql-server Optimized MySQL Server Docker images. Create… 743 [OK]percona Percona Server is a fork of the MySQL relati… 511 [OK]#可选项--filter STARS=3000 #会去搜索大于3000的即镜像[root@192 ~]# docker search mysql --filter STARS=3000NAME DESCRIPTION STARS OFFICIAL AUTOMATEDmysql MySQL is a widely used, open-source relation… 10174 [OK]mariadb MariaDB is a community-developed fork of MyS… 3747 [OK]
2.5 下载镜像
#默认下载最新版[root@192 ~]# docker pull mysqlUsing default tag: latest #如果不写tage,默认就是latestlatest: Pulling from library/mysqlbb79b6b2107f: Pull complete #分层下载 docker iamge的核心 联合文件系统49e22f6fb9f7: Pull complete842b1255668c: Pull complete9f48d1f43000: Pull completec693f0615bce: Pull complete8a621b9dbed2: Pull complete0807d32aef13: Pull completea56aca0feb17: Pull completede9d45fd0f07: Pull complete1d68a49161cc: Pull completed16d318b774e: Pull complete49e112c55976: Pull completeDigest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 签名 唯一表示Status: Downloaded newer image for mysql:latestdocker.io/library/mysql:latest # 真实地址#等价docker pull mysqldocker pull docker.io/library/mysql:latest#指定版本下载[root@192 ~]# docker pull mysql:5.7
2.6 删除镜像
[root@192 ~]# docker rmi -f 镜像Id 删除指定镜像[root@192 ~]# docker rmi -f 镜像Id 镜像Id 镜像Id 删除多个镜像[root@192 ~]# docker rmi -f $(docker images -qa) 删除所有镜像
3、容器命令
3.1 新建容器命令
docker run [可选参数] image# 参数说明--name 容器名 tomcat1/java/ 用来区分容器-d 后台方式运行-it 使用交互方式运行,进入容器查看内容-p 指定容器的端口 -p 8080:8080-p ip:主机端口:容器端口-p 主机端口:容器端口(常用)-p 容器端口-p 随机指定端口#测试案例 启动容器[root@192 ~]# docker run -it centos /bin/bash[root@c1afa7ccf7d6 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var#退回容器到主机[root@c1afa7ccf7d6 /]# exitexitdocker run -d -p 8889:8889 freakchicken/kafka-ui-lite#如果本地没有镜像,则会去网上拉取最新镜像
3.2 查看Docker当前运行的容器
#docker -ps 命令#参数介绍# 列出当前运行的容器-a # 列出当前在运行的容器+历史容器-n=n # 显示容器的n个值-q # 只显示容器编号[root@192 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc1afa7ccf7d6 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago lucid_mclean536b2397c88f bf756fb1ae65 "/hello" 4 days ago Exited (0) 4 days ago competent_lamport
3.3 退出容器
exit # 直接退出容器不后台运行Ctrl + P + Q #退出如容器 后台运行
3.4 删除容器
docker rm 容器Id #删除指定的容器,不能删除在运行过程也中的容器,如果要强制删除加-fdocker rm -f $( docker ps -aq) #删除所有容器器docker ps -a -q | xargs docker rm #删除所有容器器
3.5 启动和停止容器命令
docker start 容器 id #启动容器docker restart 容器 id # 重启容器docker stop 容器 id #停止当前正在运行的容器docker kill 容器 id #强制停止当前容器
3.6 其他命令
#命令 docker run -d 镜像名!root@192 ~]# docker run -d centos66cee4f4493944e503edbcd4477bed9b778d7a41cb5698f8334a7a23118f1c9c# 问题 docker ps 发现 cnetos停止了#常用的坑:#docker 容器使用后台运行,就必须要有一个前台运行进程,docker发现没有应用,就会自动停止#nginx,容器启动后,发现自己没有提供服务,就会立刻停掉,就没有程序了
3.7 查看日志
docerk logs -f -t --tail 容器 没有日志#自己编写一个shell脚本[root@192 ~]# docker run -d centos /bin/sh -c "while true;do echo hello 大数据老哥; sleep 1 ;done"88c647580c3226618e458e878be90b82f142e09876d3b08c28ce43a01a4b1a64[root@192 ~]# docker psCONTAINER ID88c647580c32#显示日志-tf #显示日志--tail number #显示日志条数[root@192 ~]# docker logs -tf --tail 10 88c647580c322020-11-21T06:54:44.902712929Z hello 大数据老哥2020-11-21T06:54:45.904301943Z hello 大数据老哥2020-11-21T06:54:46.906363448Z hello 大数据老哥2020-11-21T06:54:47.908508313Z hello 大数据老哥
3.8 查看容器进程信息
docker top 容器ID[root@192 ~]# docker top 88c647580cUID PID PPID C STIMEroot 2704 2688 0 14:52root 3072 2704 0 14:57
3.9 查看镜像的元数据新信息
#命令docker inspect 容器Id
3.10 进入当前正在云行的容器
# 我们通常容器都是后台运行的,需要进入容器进行修改一些配置#命令#方式一[root@192 ~]# docker psCONTAINER ID88c647580c32[root@192 ~]# docker exec -it 88c647580c /bin/bashh[root@88c647580c32 /]# lsbin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var[root@88c647580c32 /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 06:52 ? 00:00:00 /bin/sh -c while true;do echo hello ???????????????; sleep 1 ;doneroot 1121 0 0 07:10 pts/0 00:00:00 /bin/bashroot 1138 1 0 07:10 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1root 1139 1121 0 07:10 pts/0 00:00:00 ps -ef[root@88c647580c32 /]# exitexit#方式二[root@88c647580c32 /]# docker attach 88c647580c正在运行的代码# attach 与 exec 区别docker exec #进容器后开启一个新的后端,可以直接在面进行操作docker attach #进入容器正在执行终端,不会启动新的进程
3.11 docker 与本地系统文件进行拷贝
# 进入容器[root@192 ~]# docker exec -it 88c647580c /bin/bash[root@88c647580c32 /]# cd home/#创建文件[root@88c647580c32 home]# touch test.txt[root@88c647580c32 home]# exitexit#拷贝文件[root@192 ~]# docker cp 88c647580c:/home/test.txt /home/[root@192 ~]# ls /home/test.txt[root@192 ~]#
3.12 清理none对象
docker system prune
4、docker安装mysql
4.1 docker 拉取 mysql(M1只支持mysql/mysql-serve)
docker pull mysql:5.7
4.2 查看MySQL镜像
docker images | grep mysql
4.3 Docker 启动 MySQL
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
docker ps
4.5 登陆mysql容器
docker exec -it 容器id bash
4.6 登陆mysql
mysql -u root -p
4.7 查看MySQL字符集
mysql> show variables like 'character%';
4.8 修改字符集
修改/$PWD/mysql/my.cnf文件内容
[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]init_connect='SET collation_connection = uft8_unicode_ci'init_connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_unicode_ciskip-character-set-client-handshake
4.9 重启MySQL容器
docker restart 2a874341529a(容器 ID)
5 Docker-compose
version: '2'services:jobmanager:image: khkw/flink:1.11.1volumes:- ~/flinkDeploy:/opt/flinkDeployhostname: "jobmanager"expose:- "6123"ports:- "4000:4000"command: jobmanagerenvironment:- |FLINK_PROPERTIES=jobmanager.rpc.address: jobmanagerstate.backend: filesystemstate.checkpoints.dir: file:///tmp/chkdirstate.savepoints.dir: file:///tmp/chkdirrestart-strategy: fixed-delayrestart-strategy.fixed-delay.attempts: 3restart-strategy.fixed-delay.delay: 2 sstate.checkpoints.num-retained: 2state.backend.local-recovery: truetaskmanager:image: khkw/flink:1.11.1volumes:- ~/flinkDeploy:/opt/flinkDeployexpose:- "6121"- "6122"depends_on:- jobmanagercommand: taskmanagerlinks:- jobmanager:jobmanagerenvironment:- JOB_MANAGER_RPC_ADDRESS=jobmanagerzookeeper:container_name: zookeeperimage: zookeeper:3.6.1ports:- "2181:2181"kafka:container_name: kafkaimage: wurstmeister/kafka:2.12-2.5.0volumes:- /var/run/docker.sock:/var/run/docker.sockports:- "9092:9092"depends_on:- zookeeperenvironment:HOSTNAME_COMMAND: "route -n | awk '/UG[ \t]/{print $$2}'"KAFKA_CREATE_TOPICS: "test:1:1"KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181#KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://127.0.0.1:9092# KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092# mysql:# image: mysql:5.7# container_name: mysql# volumes:# - ~/mysql/data/db:/var/lib/mysql/# - ~/mysql/mysql-3346.sock:/var/run/mysql.sock# - ~/mysql/data/conf:/etc/mysql/conf.d# ports:# - 3306:3306# command:# --default-authentication-plugin=mysql_native_password# --lower_case_table_names=1# environment:# MYSQL_ROOT_PASSWORD: 123456# TZ: Asia/Shanghai
5.1 执行docker-compose
docker-compose -f 文件.yml up -d
6、启动portainer
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
docker pull wurstmeister/zookeeper:latestdocker pull wurstmeister/kafka:2.12-2.3.1docker 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/zookeeperdocker 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
运行容器
docker run -itd --name mongo -p 27017:27017 mongo --auth
- -p 27017:27017 :映射容器服务的 27017 端口到宿主机的 27017 端口。外部可以直接通过 宿主机 ip:27017 访问到 mongo 的服务。
- —auth:需要密码才能访问容器服务。
添加用户和设置密码,并且尝试连接
$ docker exec -it mongo mongo admin# 创建一个名为 admin,密码为 123456 的用户。> db.createUser({ user:'admin',pwd:'123456',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},"readWriteAnyDatabase"]});# 尝试使用上面创建的用户信息进行连接。> 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集群

一看就明白:Master节点主要还是负责管理和控制。Node节点是工作负载节点,里面是具体的容器。
深入来看这两种节点。
Master

Master节点包括API Server、Scheduler、Controller manager、etcd。
API Server是整个系统的对外接口,供客户端和其它组件调用,相当于“营业厅”。
Scheduler负责对集群内部的资源进行调度,相当于“调度室”。
Controller manager负责管理控制器,相当于“大总管”。
Node

Docker,不用说了,创建容器的。
Kubelet,主要负责监视指派到它所在Node上的Pod,包括创建、修改、监控、删除等。
Kube-proxy,主要负责为Pod对象提供代理。
Fluentd,主要负责日志收集、存储与查询。
