dockerfile编写和应用
目录
1.1 什么是dockerfile
- Dockerfile 是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。
- 构建三步骤
1.2 dockerfile的作用
Docker可以根据Dockerfile中的指令来构建docker镜像。
Dockerfile是一个文本文件,其应当包含用户想要构建一个镜像的所有指令。
1.3 dockerfile的编写优化
- 利用原始镜像构建我们自己的镜像
- 编辑俩个文件
1 # Dockerfile 2 FROM nginx 3 COPY index.html /usr/share/nginx/html/index.html
1 # index.html 2 <h1>Hello 1904 logo</h1>
- 使用dockerfile构建我们自己的镜像
1 [root@linux-node1 nginx_v1]# docker build -t nginx:1904 -f Dockerfile . 2 build # 构建指令 3 -t nginx:1904 # 指定镜像的版本号(镜像名称:tag) 4 [root@linux-node1 nginx_v1]# docker image ls # 查看我们构建的镜像 5 [root@linux-node1 nginx_v1]# docker run -itd --name 1904 -p 192.168.56.11:1904:80 nginx:1904 # 使用我们镜像运行一个docker容器 0.0.0.0:ip:80 6 http://192.168.56.11:1904 # 通过宿主机的映射ip地址+端口号就可以访问docker容器
1.4 dockerfile的其他语法
1 '''1.DOckerfile常用命令 ''' 2 FROM python:3.6 # 指定拉取镜像版本 3 ENV PYTHONUNBUFFERED 1 # 不缓冲stdin、stdout和stderr,直接把输出重定向到文件 4 MAINITAINER zhangsan # 指定作者 5 RUN mkdri /code # 运行的linux命令 6 WORKDIR /code # 指定项目工作根路径 7 ADD . /code/ # 将宿主机文件复制到镜像中 8 COPY dj.conf /etc/nginx/conf.d # docker内部文件拷贝 9 VOLUME ["/data1","/data2"] # 将宿主机文件夹挂载到容器中 10 EXPOSE 8080 # 暴露端口 11 CMD ["sh","/code/start.sh"] # 容器启动时要运行的命令 12 CMD ["python", "manage.py", "runserver", "0:8000"] 13 14 '''2.生成镜像并运行容器''' 15 docker build -t nginx:v1 -f Dockerfile-nginx . # 使用Dockerfile-nginx文件生成镜像 nginx:v1 16 docker push linux-node4.example.com/test/nginx:v1 # 推送镜像到harbor中 17 docker run -d -p 192.168.56.14:8000:8080 nginx:v1 # 运行docker容器
1.5 docker 中网络
1. 网络常识问题
连接到同一交换机的相同网段可以直接相互通信
2. NAT和PAT
3. docker服务如何发布给别人使用
1.6 dockerfile 部署django项目
1、初始化一个django项目并用docker启动
[root@linux-node1 ~]# django-admin startproject demo [root@linux-node1 demo]# cd demo [root@linux-node1 demo]# python3 manage.py runserver 0.0.0.0:8000 # 测试项目是否可以启动 [root@linux-node1 demo]# vim Dockerfile # dockerfile内容如下,路径放到django项目根路径 [root@linux-node1 demo]# vim requirements.txt # django需要安装的包,路径放到django项目根路径 [root@linux-node1 demo]# docker build -t dj_demo:v1 -f Dockerfile . [root@linux-node1 demo]# docker run -d -p 192.168.56.11:8000:8000 dj_demo:v1
或
[root@linux-node1 demo]# docker run -d -p 0.0.0.0:8000:8000 dj_demo:v1
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
Django==2.0.4
mysqlclient==1.4.6
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
FROM python:3.7 MAINTAINER liugx RUN mkdir /code WORKDIR /code ADD . /code/ RUN pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple EXPOSE 8000 CMD ["python", "manage.py", "runserver", "0:8000"]