建议
- 在本地测试项目代码
- 获取每个基础镜像后,自己先制作一个个性初始化的镜像,保存好
- 建一个文件夹,存放不同阶段不同镜像的Dockerfile和当前需要的文件
- 一定要明白每个端口是做什么的
- 在本地使用测试镜像
初始化基础镜像
1. 获取基础镜像
docker pull python:3.6
docker pull nginx
2. 个性初始化
Django Docker
FROM python:3.6
MAINTAINER zhengxingtao
WORKDIR /root
RUN apt-get update && apt-get install -y vim && pip3 install django==1.11 && pip3 install uwsgi && pip3 install pymysql
- 制作镜像
docker tag old_name:old_tag new_name:new_tag
:需要的时候 ,可以修改镜像名称和标签信息.
:表示当前路径,注意Dockerfile中配置的文件路径
- 保存镜像
- smallspider:这是和Docker Hub上的用户名一致的
- smallspider/django:后面不能再出现同样名称的了(下次试试不同的标签行不行)
-- 通过Dockerfile创建django镜像
docker build -f Dockerfile -t smallspider/django:latest .
-- 提交镜像到DockerHub
docker push smallspider/django:latest
Nginx Docker
FROM nginx:latest
MAINTAINER zhengxingtao
RUN apt-get update && apt-get install -y vim
WORKDIR /etc/nginx
RUN ["/bin/bash", "-c", "/usr/sbin/./nginx"]
-- 通过Dockerfile创建Nginx镜像
docker build -f Dockerfile -t smallspider/nginx:latest
-- 提交镜像到DockerHub
docker push smallspider/nginx:latest
测试镜像
-- 创建并运行django和nginx的镜像文件
docker run -dit --django nginx -p 8000:8000 smallspider/django:latest
docker run -dit --name nginx -p 8090:80 smallspider/nginx:latest
制作项目镜像
Django
这里我们要注意,不同的项目,uwsgi.ini
是不一样的,需要看清楚写
uwsgi.ini
[uwsgi]
chdir = /home/zheng/djangotest
module = djangotest.wsgi:application
wsgi-file = djangotest.uwsgi.ini
pyenv = /usr/bin/python
vacuum = true
master=true
processes = 8
thread = 8
max-requests = 5000
uid = nginx
gid = nginx
http = 0.0.0.0:8000
Dockerfile
FROM smallspider/django:v1
MAINTAINER zhengxingtao
RUN groupadd -r nginx && useradd -r -g nginx nginx
RUN mkdir -p /home/zheng/djangotest
COPY ./djangotest /home/zheng/djangotest
WORKDIR /home/zheng/djangotest/
CMD ["/bin/bash","-c","uwsgi --ini uwsgi.ini"]
-- 通过Dockerfile创建DjangoWeb的镜像
docker build -f Dockerfile -t smallspider/django:latest .
-- 把镜像文件发送到DockerHub
docker push smallspider/django:latest
Nginx
目录结构
-- 这里是Nginx中需要的文件
zheng@master:~/Documents/DockerFile/nginx_v2$ ls
djangoweb.conf Dockerfile nginx.conf static
djangoweb.conf
upstream mynginx {
server 172.16.23.61:32000;
server 172.16.23.62:32000;
}
server {
listen 80;
charset utf-8;
client_max_body_size 75M;
location /static {
alias /home/zheng/djangotest/static;
}
location / {
proxy_pass http://mynginx;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Nginx-Proxy true;
}
}
nginx.conf:复制nginx.conf,修改include /etc/nginx/conf.d/djangoweb.conf;
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/djangoweb.conf; # 修改这里
}
static/:项目的静态文件目录(注意Nginx和djangoweb-settings.py中的配置)
Dockerfile
FROM smallspider/nginx:latest
ADD ./djangoweb.conf /etc/nginx/conf.d/
ADD ./nginx.conf /etc/nginx/
RUN mkdir -p /home/zheng/djangotest/static/
COPY ./static/ /home/zheng/djangotest/static
WORKDIR /etc/nginx
RUN ["/bin/bash", "-c", "/usr/sbin/./nginx"]
-- 通过Dockerfile创建镜像
docker build -f Dockerfile -t smallspider/django-nginx:latest
-- 将创建好的镜像文件发送到DockerHub
docker push smallspider/django-nginx:latest
本地测试
-- 创建web的容器
docker run -dit --name web -p 8000:8000 smallspider/django-web:latest
-- 创建nginx的容器
docker run -dit --name nginx -p 8090:80 smallspider/django-nginx:latest
发布Kubenetes
- 创建方案:
- 通过kubectl直接创建
- 使用yaml文件创建
- 使用Kuboard创建
1. 获取镜像
Docker Hub
docker pull smallspider/django-web:latest
docker pull smallspider/django-nginx:latest
save & load
-- 再制作镜像的节点上,将镜像保存为tar包
docker save smallspider/django-web:latest > django-web.tar.gz
-- 将镜像文件发送到每个worker节点
scp django-web.tar.gz zheng@172.16.23.61:/homg/zheng/dockerfiles
-- 在Kubernetes的worker节点上加载保存好的镜像文件
docker load -i django-web.tar.gz
2. 创建deployment
-- django
kubectl create deployment django-web --image=smallspider/django-web:zheng
-- nginx
kubectl create deployment django-nginx --image=smallspider/django-nginx:zheng
3. 指定端口号
-- django
kubectl expose deployment django-web --port=8000 --type=NodePort
-- nginx
kubectl expose deployment django-nginx --port=80 --type=NodePort
校验
-- 查看控制器
kubectl get deployment
-- 删除控制器
kubectl delete deployment dep_name
-- 查看容器组
kubectl get pods
-- 查看端口映射
kubectl get service
kubectl get svc
-- 删除指定的端口映射
kubectl delete service svc_name
访问任意节点上的指定端口:172.16.23.62:32001
- 附加:
- 还要添加SQL的支持
- Nginx做反向代理之后,静态文件的访问问题
- 使用yaml文件创建deployment和service
评论区