docker 和k8s 入门
本文是云原生的学习记录,可以参考以下文档 k8s
https://www.yuque.com/leifengyang/oncloud
相关视频教程可参考如下
https://www.bilibili.com/video/BV13Q4y1C7hS?p=2&vd_source=0882f549dac54045384d4a921596e234
相对于公有云,私有云优势灵活性更强,可搭配自己的环境,控制力更强,隐私泄露风险更低
Docker 概念
不管什么程序语言的程序可以通过Docker 打成一个标准的包
可以去docker hub 下载打包好的Docker镜像
所有软件都可以通过docker run 运行起来
特点
基础镜像MB级别
创建简单docker build
隔离性强cpu 内存,访问设备隔离,网络,用户,用户组隔离
启动速度秒级
分享方便
架构
docker安装
卸载系统以前的docker
yum remove docker*
- 配置yum源
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 安装docker
sudo yum install -y docker-ce docker-ce-cli containerd.io
#以下是在安装k8s的时候使用
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
- 启动
systemctl enable docker --now
既要开机启动
通过以上命令查看是否启动成功
- 镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m"
},
"storage-driver": "overlay2"
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker镜像地址可通过以下链接查看 https://blog.csdn.net/yu542771572/article/details/116573666
docker镜像操作
docker pull nginx 是下载最新版
docker pull nginx:1.20.1 下载指定版本
docker images 查看镜像
docker rmi nginx 删除最新版本镜像
docker rmi redis:6.2.4 删除指定镜像
docker rmi image_id 通过镜像id删除
docker 容器操作
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
【docker run 设置项 镜像名 】 镜像启动运行的命令(镜像里面默认有的,一般不会写)
# -d:后台运行
# --restart=always: 开机自启
docker run --name=mynginx -d --restart=always -p 8084:80 nginx
# 查看正在运行的容器
docker ps
# 查看所有
docker ps -a
# 删除停止的容器
docker rm 容器id/名字
docker rm -f mynginx #强制删除正在运行中的
#停止容器
docker stop 容器id/名字
#再次启动
docker start 容器id/名字
#应用开机自启 --restart=always
docker update 容器id/名字 --restart=always
进入容器修改内容
进入容器内部修改
# 进入容器内部的系统,修改容器内容
docker exec -it 容器id /bin/bash
- 提交镜像,将保存一个镜像到本地
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
docker commit -a "leifengyang" -m "首页变化" 341d81f7504f guignginx:v1.0
- 保存镜像为一个压缩包
# 将镜像保存成压缩包
docker save -o abc.tar guignginx:v1.0
# 别的机器加载这个镜像
docker load -i abc.tar
# 离线安装
- 推送到远程仓库
docker tag local-image:tagname new-repo:tagname
docker push new-repo:tagname
# 把旧镜像的名字,改成仓库要求的新版名字
docker tag guignginx:v1.0 leifengyang/guignginx:v1.0
# 登录到docker hub
docker login
docker logout(推送完成镜像后退出)
# 推送
docker push leifengyang/guignginx:v1.0
# 别的机器下载
docker pull leifengyang/guignginx:v1.0
- 挂载数据到外部修改
docker run --name=mynginx \
-d --restart=always \
-p 88:80 -v /data/html:/usr/share/nginx/html:ro \
nginx
ro 是只读模式,只能在/data/html 进行修改
# 修改页面只需要去 主机的 /data/html
# 如果/data/html 为空,容器也为空,访问nginx会出现403, 需要建立index.html文件
补充
docker logs 容器名/id 排错
docker exec -it 容器id /bin/bash
# docker 经常修改nginx配置文件
docker run -d -p 80:80 \
-v /data/html:/usr/share/nginx/html:ro \
-v /data/conf/nginx.conf:/etc/nginx/nginx.conf \
--name mynginx-02 \
nginx
#把容器指定位置的东西复制出来
docker cp 5eff66eec7e1:/etc/nginx/nginx.conf /data/conf/nginx.conf
#把外面的内容复制到容器里面
docker cp /data/conf/nginx.conf 5eff66eec7e1:/etc/nginx/nginx.conf
进阶实战
-
使用springboot 写个jar包
-
将应用打包成jar包
-
DockerFile
FROM openjdk:8-jdk-slim
LABEL maintainer=leifengyang
COPY target/*.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
在当前目录下读取dockerfile 并执行镜像构建
docker build -t java-demo:v1.0 .
- 部署中间件
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
#redis使用自定义配置文件启动
docker run -v /data/redis/redis.conf:/etc/redis/redis.conf \
-v /data/redis/data:/data \
-d --name myredis \
-p 6379:6379 \
redis:latest redis-server /etc/redis/redis.conf
# 我的redis 实例
docker run -v /opt/docker/etc/redis/redis1.conf:/etc/redis/redis.conf \
-v /opt/docker/data/redis1/data:/data \
-d --name myredis \
-p 6380:6379 \
redis:latest redis-server /etc/redis/redis.conf
注意开放6380安全组
- 启动容器
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
- 分享镜像
登录docker hub
docker login
#给旧镜像起名
docker tag java-demo:v1.0 leifengyang/java-demo:v1.0
# 推送到docker hub
docker push leifengyang/java-demo:v1.0
# 别的机器
docker pull leifengyang/java-demo:v1.0
# 别的机器运行
docker run -d -p 8080:8080 --name myjava-app java-demo:v1.0
k8s学习
k8s是一个容器编排管理系统
Kubernetes 为你提供了一个可弹性运行分布式系统的框架。 Kubernetes 会满足你的扩展要求、故障转移、部署模式等。 例如,Kubernetes 可以轻松管理系统的 Canary 部署。
k8s 一般运行于多个机器上
架构
Kubernetes Cluster = N MasterNode + N Worker Node:N主节点+N工作节点; N>=1
主节点可能有多个