创建dockerfile(Dockerfile-web),通过dockerfile构建nginx镜像
FROM nginx:stable-alpine
COPY nginx.conf /etc/nginx/nginx.conf
ADD dist.tar.gz /usr/share/nginx/html/
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
dockerfile是一个描述如何构造和启动镜像的文件,像上面这个
1.我们从 nginx:stable-alpine 拉取镜像作为基座,nginx版本是,1.22.1;
2.拷贝当前目录下的nginx.conf 到 镜像里面的/etc/nginx/nginx.conf,其实就是替换,nginx的配置
3.把当前目录下的dist.tar.gz的压缩文件,解压到镜像的/usr/share/nginx/html/
ps: 压缩命令:cd 到dist目录执行 tar -zcvf dist.tar.gz ./
4.声明该镜像服务跟外界通讯的端口是80
5.启动程序在后台执行
下面的操作都是在安装有docker的服务器运行
执行命令构建镜像
docker build -t myNginx:v1 . -f ./Dockerfile-web
查看镜像
docker images
使用镜像myNginx:v1创建容器myNginxV1实例,并映射宿主85端口到容器的80端口
docker run -d -p 85:80 --name myNginxV1 myNginx:v1 ## 使用新镜像创建容器
启动容器
docker start myNginxV1
查看容器状态
docker ps
停止容器
docker stop myNginxV1
删除容器
docker rm myNginxV1
进入容器
docker exec -it myNginxV1 /bin/sh
ps:进入容器要看容器的基座是基于什么方式进行交互,有的是/bin/bash有的是/bin/sh
退出容器
请按Ctrl+P+Q进行退出容器
部署到k8s
1.如果有部署自己公共的镜像服务器管理平台,如Harbor,则将上述创建好的镜像文件push到管理平台,执行
docker tag myNginx:v1 xxx.xxx.xxx.xxx/myNginx:v1
docker push xxx.xxx.xxx.xxx/myNginx:v1
2.编写yaml文件(myNginx.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: myNginx
labels:
name: myNginx
spec:
replicas: 3 # 启动3个容器实例
selector:
matchLabels:
app: myNginx
template:
metadata:
labels:
app: myNginx
spec:
containers:
- name: moanginx
image: xxx.xxx.xxx.xxx/myNginx:v1
imagePullPolicy: Always # 始终拉取
ports:
- containerPort: 80 # 容器对外端口
---
apiVersion: v1
kind: Service
metadata:
name: myNginx
labels:
app: myNginx
spec:
type: NodePort
ports:
- port: 80 # 容器端口
targetPort: 80 # 容器端口
nodePort: 30005 # 对外服务端口
selector:
app: myNginx
这个yaml文件是告诉k8s如何部署镜像,服务。
ps:yaml的语法,跟json差不多,少了{},层级靠空格区分(空格个数不限制,相同空格数的在同一级),“-”表示父元素是个数组,这是一个数组项;“---”表示另外要一个yaml文件,不想分多个文件想在一个文件里面描述的就使用---隔开
上面yaml定义2个类型的Deployment,Service的对象,Deployment简单理解管理容器的一套程序,配置这个类型,告诉k8s,容器从哪里拉镜像,启动多少容器实例等等;Service简单理解容器运行后从集群角度对外怎样提供服务,通过配置对外服务是30005端口,外部的程序就可以通过30005端口进入集群访问容器提供的服务,负载均衡啥的应该就都是Service内部自己调度
下面的命令需要在部署了k8s的服务器上运行
执行部署命令
kubectl apply -f myNginx.yaml
执行后,如果没有什么问题,通过 kubectl get pods 可以看到3个myNginx的实例在运行,再通过http://xxx.xxx.xxx.xxx:30005,在浏览器就可以访问容器内nginx提供的web内容
停掉这个部署可以使用下面命令
kubectl delete -f myNginx.yaml
执行后,再用kubectl get pods,可以看到myNginx会逐步停掉至消失