Dockerfile 、利用Dockerfile构建nginx+Django

Dockerfile 、利用Dockerfile构建nginx+Django

 

 

 

 

1.Dockerfile

Dockerfile可以构建容器。
#必须创建一个Dockfile的文件 文件放在轻量级 或者值包含他需要的文件夹里  不然吃内存
通过指令

1、指令
    1.1、依赖基础镜像的指令,必须在Dockerfile的顶端 #指令必须大写
    FROM	
	FORM python:3.6 
    
    1.2、执行命令的指令(RUN指令执行的命令,必须是基础容器中支持的命令),将执行的结果保存到镜像中
    RUN 
    
    1.3、添加文件到镜像
    ADD
	
	注:
		1.3.1、ADD支持解压功能(仅支持tar解压) 自动解压
		1.2.2、支持远程下载功能,但是如果是远程下载的文件,则不解压
		
   	1. 4、复制文件到镜像
	COPY
	
	1.5、暴露端口
	EXPOSE
	
		80 443
		80/tcp 443/udp
	1.6、工作目录
	WORKDIR
	WORKDIR /opt/linux
	1.7、设置容器启动时执行的命令
	CMD 

        FROM python:3.6
        RUN pip install django
        ADD linux.tar.gz /opt
        EXPOSE 80
        WORKDIR /opt/linux
        CMD python manage.py runserver 0.0.0.0:80

	1.8、定义Dockerfile变量的指令
	ARG #可以构建多个镜像
	#第一种用法
        ARG packages=pymysql
        RUN pip install $packages
    #第二种用法 (直接在构造镜像时加上)
    	docker build --build-arg=packages=redis -t test:v7 .
	1.9、触发器指令(构建时不作任何操作,但是在作为基础镜像时触发)Dockerfile的FROM指定这个镜像时候 会触发
	ONBUILD #他后面跟的是指令 不是命令
		ONBUILD RUN touch /opt/1.txt
		#不知道执行了一条什么命令
		Step 1/9 : FROM test:v7
        # Executing 1 build trigger
         ---> Running in 69ea9b5f1003
		
2、构建镜像的命令
	docker build -t [镜像名称] [Dockerfile的路径]
	docker build -t test:v1 .

注:
	2.1、Dockerfile的文件名
	2.2、一旦开始构建容器,当前目录会被虚拟到Docker容器中

2.利用Dockerfile构建nginx+Django

#1.先创建一个文件夹 work 里面分别创建django 和nginx
#2.django里面创建Dockerfile
vim Dockerfile 
    FROM python:3.6  #用哪个镜像

    ADD linux.tar.gz /opt #把django压缩包复制过去 自动解压

    EXPOSE 80    #开放端口 80

    WORKDIR /opt/linux #工作目录 启动这个镜像的容器初始目录

    RUN pip install django  #执行下载django命令

    CMD python manage.py runserver 0.0.0.0:80  #容器启动运行django
#3.nginx里面的default
vim default.conf 

    server{
            server_name =;
            listen 80;
            location /{
                    proxy_pass http://django;
            }
    }	
#4.nginx 里面创建Dockerfile
vim Dockerfile 
    FROM nginx  #用哪个镜像

    ADD default.conf /etc/nginx/conf.d/  #把这个default.conf 复制过去 

    EXPOSE 80 #开放端口

    CMD nginx -g 'daemon off;'  #容器启动时 前台启动nginx
#5.构建镜像
	docker build -t nginx:v1 .
    docker build -t django:v1 .
#6.刚创建的镜像
docker images
REPOSITORY   TAG       IMAGE ID       CREATED             SIZE
nginx        v1        91d7bb067626   13 minutes ago      141MB
django       v1        848f9f3c8732   19 minutes ago      943MB
#创建django容器
docker run -d --name django -P --network zhang django:v1

#创建nginx容器
docker run -d --name nginx -P --network zhang nginx:v1

3.容器化BBS

#1.代码拖进来
#2.创建requirements.txt文件
    django ==1.11.11
    pymysql
    并执行pip3 install -Ur requirements.txt 
#3.创建一个容器
	docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
     #并且在容器创建一个数据库 
#4.数据迁移
	把app01里面的migrations文件夹内容清空,并且创建一个__init__
    然后迁移
    python3 manage.py makemigrations
    python3 manage.py migrate
#5.创建Dockerfile
	FROM python:3.6

    ADD ./ /opt

    WORKDIR /opt

    RUN pip install -Ur requirements.txt

    EXPOSE 80

    CMD python manage.py runserver 0.0.0.0:80
        
     #注意settings 里面 database的host 不能是127.0.0.1了 要写成mysql
#6.构建镜像
	docker build -t bbs:v1 .

#7.加入网桥
						网桥名  容器名
	docker network connect zhang mysql
    
#8.容器使用网桥
	docker run -d --name bbs  --network zhang bbs:v1
        
#9.使用nginx 代理
	#建文件夹nginx 里面的default.conf
        server {
        server_name _;
        listen 80;
        location / {
            proxy_pass http://bbs;
        }
    }
    #建Dockerfile
    FROM nginx
    ADD default.conf /etc/nginx/conf.d/
    EXPOSE 80
    CMD nginx -g 'daemon off;'
#启动
	docker run -d --name nginxv2 -p 8091:80 --network zhang nginx:v2
posted @ 2021-12-30 10:43  迪迦张  阅读(225)  评论(0编辑  收藏  举报