不全 很基础的,跟着几个视频又温习了一遍 也学到了一些之前没用过的几个地方,目前ctf web方向越来越麻烦 exp越写越长 搭建复杂的环境也麻烦的一批 建议深入学习参考官方文档
https://www.bilibili.com/video/BV1og4y1q7M4
https://www.bilibili.com/video/BV1kv411q7Qc
docker
传统虚拟机与docker
docker底层原理
docker基础
docker加速
docker例子
docker es
docker mysql
docker redis
portainer 图形化管理docker
docker网络
docker compose
yml 搭建wp博客
docker swarm
Dockerfile
docker stack
docker secret
docker config
k8s
初窥门径
docker
https://docs.docker.com/
https://docs.docker.com/reference/
https://hub.docker.com/
传统虚拟机与docker


docker底层原理

docker基础
docker镜像,就是一个模板
container容器,理解为一个简单的linux系统
repository仓库,存放镜像的地方
docker version # 版本
docker images # 查看镜像
yum remove docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
docker info # docker系统信息 包括镜像和容器的数量
docker --help # 帮助命令
docker images --help
REPOSITORY # 镜像的仓库
TAG # 镜像的标签
IMAGE ID # 镜像的id
CREATED # 镜像的创建时间
SIZE # 镜像大小
docker search # 搜索镜像
--filter=STARS=3000 # 搜索出来的镜像就是大于3000的
docker pull mysql
docker pull docker.io/library/mysql:latest # 真实地址
docker pull mysql:5.7
docker rmi -f $(docker images -aq) # 删除所有镜像
docker run [可选参数] image
--name "xxxx" # 容器名字
-d # 后台运行 docker容器使用后台运行 必须有一个前台进程 docker发现没有 就会自动停止
-it # 使用交互方式运行,进入容器查看内容
-p # 指定端口 -p 主机端口:容器端口 -p 8080:8080 -p ip:主机端口:容器端口
当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。
使用 docker ps 可以看到,本地主机的 49155 被映射到了容器的 5000 端口。此时访问本机的 49155 端口即可访问容器内 web 应用提供的界面。
-v 主机目录:容器目录 # 挂载 mount
docker run -it --rm # 一般用来测试 用完就删除
docker volume ls
匿名挂载
docker run -d -P --name nginx01 -v /etc/nginx nginx
具名挂载
-v 卷名:容器内路径
docker volumn inspect 卷名
方便找到卷
docker run -it --name docker02 --volumes-from docker01
--volumes-from 继承 docker01
docker run -it --name docker02 --volums-from docker01 xxxx镜像
容器之间数据共享目录

docker stats # 查看cpu状态
docker history 容器id
docker logs
docker logs -tf --tail 10 容器id
docker top 容器id # 查看容器中进程信息
docker inspect 容器id # 查看镜像的元数据
docker exec -it 容器id bin/bash # 进入容器
docker attach 容器id # 进入容器正在执行的终端
docker cp 容器id:文件路径 主机路径 # 将容器中的文件拷贝出来
docker ps
docker ps -a
docker ps -a -n=1
docker rm 容器id
docker rm -f xxxx # 强制删除 docker ps -a也没有了
docker rm -f $(docker ps -aq) # 删除所有容器
docker ps -a -q | xargs docker rm # 删除所有容器
docker start 容器id
docker restart 容器id
docker stop 容器id
docker kill 容器id
docker commit -m="提交的描述信息" -a="作者" 容器id 镜像名:xxtag # commit 镜像
docker加速
登录阿里云查看

docker例子
docker es
docker run -d --name elasticsearch01 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2
-e是增加配置
docker mysql
docker -e MYSQL_ROOT_PASSWORD=123456
目录映射 干掉容器后 数据任然存在在本主机
docker redis
for port in $(seq 1 6): \
do \
mkdir -p mydata/redis/node-${port}/conf
touch mydata/redis/node-${port}/conf/redis.conf
cat << EOF >/mydata/redis/node-${port}/conf/redis.conf
port 6379
bind 0.0.0.0
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
cluster-announce-ip 172.38.0.1${port}
cluster-announce-port 6379
cluster-announce-bus-port 16379
appendonly yes
EOF
done
创建集群
redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379 172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
redis-cli -c
cluster info
cluster nodes
set a b
使用docker搭建集群

portainer 图形化管理docker
docker run -d -p 10112:9000 \
--restart=always -v var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
docker网络

https://yuanmomo.net/2019/06/13/docker-network/
https://www.jianshu.com/p/e63bd5d0cc1e
https://blog.csdn.net/wejack/article/details/114268784
https://www.cnblogs.com/freephp/p/14193507.html

成功ping通
$ docker exec -it tomcat02 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
link/tunnel6 :: brd ::
20: eth0@if21: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
$ docker exec -it tomcat01 ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
2: tunl0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
link/ipip 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
link/tunnel6 :: brd ::
18: eth0@if19: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
docker run -d -P --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02
docker network ls
docker network inspect 容器id
$ docker exec -it tomcat03 cat etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.5 tomcat02 351d3fcbb3ea
172.17.0.6 b937445da465
bridge 桥接
none 不配置网络
host 和宿主机共享网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
docker network inspect mynet
docker run -d -P --name tomcat-net-01 --net mynet tomcat
自定义网络 不使用--link 也可以ping通名字
docker network connect # 连接一个容器到一个网络
docekr network connect mynet tomcat01
将tomcat01 放到了 mynet网络下
一个容器两个ip
docker compose
多写多看
https://docs.docker.com/compose/compose-file/
yaml文件
docker-compose.yaml
docker-compose up
yml文件
docker-compose build
docker-compose stop
docker-compose down
version: '' # 版本
services:
服务1 web:
container_name: xxxx
depends_on: # 依赖 启动顺序
- db
- redis
images
build . # 默认当前目录下的Dockerfile
build:
dockerfile: xxxdockerfile
network
deploy:
replicas: 4
ports:
- "8888:8080"
replicas: # 副本
....
服务2 redis:
image: redis
服务3 db:
image: postgres
volumes:
networks:
configs:
yml 搭建wp博客
https://docs.docker.com/compose/wordpress/
docker-compose up -d
docekr-compose down
docker-compose up --build # 重新构建
version: "2"
services:
db:
image: mysql:5.7 # mysql镜像
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on:
- db
image: wordpress:latest # wordpress镜像
ports:
- "10113:80" # 端口映射
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
db_data: {}
http://127.0.0.1:10113/
asura/gsX4ViFctYwaGq0YjM
docker swarm
docker swarm
docker swarm init --advertise-addr 172.24.82.149
# 获取令牌
docker swarm join-token manager
docker swarm join-token worker
docker node ls
双主双从
raft协议
docker swarm leave
work节点用来工作
管理节点可以操作
3个主节点 >1台管理节点存活
弹性
扩缩容
docker service
docekr service create -p 8888:80 --name my-nginx nginx
docker service ps my-nginx
docker service ls
docker service inspect my-nginx
docker service update --replicas 3 my-nginx
docker service update --replicas 10 my-nginx
随机分配的
服务的高可用
docker service scale my-nginx=5
动态扩缩容
docker service rm my-nginx
网络模式
swarm
PublishMode:ingress
overlay
ingress 特殊的overlay网络 负载均衡的功能
docker network inspect ingress
Dockerfile
FROM centos
MAINYAINER xxx # 镜像是xxx写的 姓名+邮箱 xxx<xxx@qq.com>
RUN # 命令
ADD # copy文件 自动解压
WORKDIR # 镜像工作目录
VOLUME # 挂载目录
EXPOSE # 暴露端口
CMD # 这个容器启动的时候要执行的命令
CMD ["ls","-a"]
docker run 容器id ls -al
docker run 容器id -l # 这样会报错
ENTRYPOINT #
docker run 容器id -l # 不会报错
不会替换命令 是追加命令
ONBUILD #
COPY # 类似ADD
ENV # 构建的时候设置环境变量
VOLUMN ["volume01","volume02"] # 匿名挂载
CMD echo "asdasdasda"
FROM centos
MAINTAINET xxx<xxx@qq.com>
COPY readme.txt usr/local/readme.txt
ADD jdk-8u11-linux-x64.tar.gz usr/local/
ADD apache-tomcat-9.0.22.tar.gz usr/local/
RUN yum -y install vim
ENV MYPATH usr/local
WORKDIR $MYPATH
ENV JAVA_HOME usr/local/jdk1.8.0_11
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME usr/local/apache-tomcat-9.0.22
ENV CATALINA_BASH usr/local/apache-tomcat-9.0.22
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out
docker build -f 指定文件 -t mycentos:0.1 .
docker stack
docker-compose 单机部署项目
docker stack 集群部署
docker-compose up -d wordpress.yaml
docker stack deploy xxx.yaml
docker secret
安全证书
docker config
配置
网上找案例 自己跑着玩
查看帮助文档 --help
k8s 初窥门径
https://www.kubernetes.org.cn/k8s
https://kubernetes.io/zh/
云原生
10台机器以上 优先考虑k8s了
go语言
docker是go开发的
k8s也是go
并发语言go
入门
基础语法
高级对象
如何操作数据库
框架




