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