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 images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像标签
IMAGE ID 镜像的Id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
[root@192 ~]# docker images --help
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像Id
2.4 搜镜镜像
[root@192 ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql 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=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql 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 mysql
Using default tag: latest #如果不写tage,默认就是latest
latest: Pulling from library/mysql
bb79b6b2107f: Pull complete #分层下载 docker iamge的核心 联合文件系统
49e22f6fb9f7: Pull complete
842b1255668c: Pull complete
9f48d1f43000: Pull complete
c693f0615bce: Pull complete
8a621b9dbed2: Pull complete
0807d32aef13: Pull complete
a56aca0feb17: Pull complete
de9d45fd0f07: Pull complete
1d68a49161cc: Pull complete
d16d318b774e: Pull complete
49e112c55976: Pull complete
Digest: sha256:8c17271df53ee3b843d6e16d46cff13f22c9c04d6982eb15a9a47bd5c9ac7e2d # 签名 唯一表示
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
#等价
docker pull mysql
docker 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 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
#退回容器到主机
[root@c1afa7ccf7d6 /]# exit
exit
docker run -d -p 8889:8889 freakchicken/kafka-ui-lite
#如果本地没有镜像,则会去网上拉取最新镜像
3.2 查看Docker当前运行的容器
#docker -ps 命令
#参数介绍
# 列出当前运行的容器
-a # 列出当前在运行的容器+历史容器
-n=n # 显示容器的n个值
-q # 只显示容器编号
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1afa7ccf7d6 centos "/bin/bash" 2 minutes ago Exited (0) About a minute ago lucid_mclean
536b2397c88f bf756fb1ae65 "/hello" 4 days ago Exited (0) 4 days ago competent_lamport
3.3 退出容器
exit # 直接退出容器不后台运行
Ctrl + P + Q #退出如容器 后台运行
3.4 删除容器
docker rm 容器Id #删除指定的容器,不能删除在运行过程也中的容器,如果要强制删除加-f
docker 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 centos
66cee4f4493944e503edbcd4477bed9b778d7a41cb5698f8334a7a23118f1c9c
# 问题 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 ps
CONTAINER ID
88c647580c32
#显示日志
-tf #显示日志
--tail number #显示日志条数
[root@192 ~]# docker logs -tf --tail 10 88c647580c32
2020-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 88c647580c
UID PID PPID C STIME
root 2704 2688 0 14:52
root 3072 2704 0 14:57
3.9 查看镜像的元数据新信息
#命令
docker inspect 容器Id
3.10 进入当前正在云行的容器
# 我们通常容器都是后台运行的,需要进入容器进行修改一些配置
#命令
#方式一
[root@192 ~]# docker ps
CONTAINER ID
88c647580c32
[root@192 ~]# docker exec -it 88c647580c /bin/bashh
[root@88c647580c32 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
[root@88c647580c32 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:52 ? 00:00:00 /bin/sh -c while true;do echo hello ???????????????; sleep 1 ;done
root 1121 0 0 07:10 pts/0 00:00:00 /bin/bash
root 1138 1 0 07:10 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
root 1139 1121 0 07:10 pts/0 00:00:00 ps -ef
[root@88c647580c32 /]# exit
exit
#方式二
[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]# exit
exit
#拷贝文件
[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=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
4.9 重启MySQL容器
docker restart 2a874341529a(容器 ID)
5 Docker-compose
version: '2'
services:
jobmanager:
image: khkw/flink:1.11.1
volumes:
- ~/flinkDeploy:/opt/flinkDeploy
hostname: "jobmanager"
expose:
- "6123"
ports:
- "4000:4000"
command: jobmanager
environment:
- |
FLINK_PROPERTIES=
jobmanager.rpc.address: jobmanager
state.backend: filesystem
state.checkpoints.dir: file:///tmp/chkdir
state.savepoints.dir: file:///tmp/chkdir
restart-strategy: fixed-delay
restart-strategy.fixed-delay.attempts: 3
restart-strategy.fixed-delay.delay: 2 s
state.checkpoints.num-retained: 2
state.backend.local-recovery: true
taskmanager:
image: khkw/flink:1.11.1
volumes:
- ~/flinkDeploy:/opt/flinkDeploy
expose:
- "6121"
- "6122"
depends_on:
- jobmanager
command: taskmanager
links:
- jobmanager:jobmanager
environment:
- JOB_MANAGER_RPC_ADDRESS=jobmanager
zookeeper:
container_name: zookeeper
image: zookeeper:3.6.1
ports:
- "2181:2181"
kafka:
container_name: kafka
image: wurstmeister/kafka:2.12-2.5.0
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
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:latest
docker pull wurstmeister/kafka:2.12-2.3.1
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
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
运行容器
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,主要负责日志收集、存储与查询。