Dockerfile
目录
- 1、Dockerfile
- 2、利用dockerfile构建 Nginx + Django
- 5、容器化BBS
1、Dockerfile
# Dockerfile可以构建容器
# Dockerfile实现步骤:
1.基础环境
2.安装Django
3.上传代码
4.设置工作目录
5.设置暴露端口
6.设置启动命令
一、指令
1、FROM # 必选项
依赖基础镜像的指令,必须在Dockerfile的顶端,# Dockerfile的文件名第一个字母必须是大写
FROM nginx # 依赖环境
2、RUN # 在容器里执行
执行命令的指令(RUN指令执行的命令,必须是基础容器中支持的命令),将执行的结果保存到镜像中
3、ADD
添加文件到镜像
# 注:
1、ADD支持解压功能(仅支持tar解压) # 添加tar压缩包到镜像,直接解压
2、支持远程下载功能,但是如果是远程下载的文件,则不解压
4、COPY
复制文件到镜像
5、EXPOSET:暴露端口
# 指定端口格式
80 443
80/tcp 443/udp
6、WORKDIR # 设置执行命令目录
工作目录:在容器里执行命令的目录
7、CMD
设置容器启动时执行的命令
'''
# 常用命令
FROM python # 依赖环境为python
RUN pip install django # 容器里下载Django
ADD linux.tar.gz /opt # 添加文件到/opt
EXPOSE 80 # 暴露端口80
WORKDIR /opt/linux # 设置工作目录
CMD python manage.py runserver 0.0.0.0:80 # 容器里启动命令
'''
[root@localhost docker]# docker run -d --name djangov2 -P test:v6 # 启动镜像
8、ARG
定义Dockerfile变量的指令
ARG package=pymysql
RUN pip install $package
9、ONBUILD
触发器指令(构建时不作任何操作,但是在做为基础镜像时触发)
FROM test:v8 # 必须为基础镜像才能触发
ONBUILD RUN touch /opt/1.txt
二、构建镜像的命令:
docker build -t [镜像名称] [Dockerfile的路径]
[root@localhost docker]# docker build -t test:v1 . # 构建到当前文件夹下
# 注
1、Dockerfile的文件名
2、一旦开始构建容器,当前目录所有文件会被虚拟到Docker容器中 # 最少找一个空文件夹
'''
FROM nginx
RUN echo "123" > /usr/share/nginx/html/index.html
ADD linux.tar.gz /opt
COPY linux.tar.gz /mnt
EXPOSE 80 443/udp
WORKDIR /opt
'''
2、利用dockerfile构建 Nginx + Django
1、Django
1)、设置Dockerfile
[root@localhost ~]# mkdir work
[root@localhost work]# mkdir django
[root@localhost work]# nginx
[root@localhost work]# cd django
[root@localhost django]# vim Dockerfile 设置Dockerfile
FROM python:3.6
ADD linux.tar.gz /opt
EXPOSE 80
WORKDIR /opt/linux
RUN pip install django
CMD python manage.py runserver 0.0.0.0:80
2)、执行构建镜像的命令
[root@localhost django]# docker build -t django:v1 .
2、nginx
1)编辑nginx配置文件
[root@localhost django]# cd ..
[root@localhost work]# cd nginx/
[root@localhost nginx]# vim default.conf
server {
server_name _;
list 80;
location / {
proxy_pass http://django;
}
}
2)编辑Dockerfile
[root@localhost nginx]# vim Dockerfile
FROM nginx
ADD default.conf /etc/nginx/conf.d/
EXPOST 80
CMD nginx -g 'daemon off;'
3)执行构建镜像的命令
[root@localhost nginx]# docker build -t nginx:v1 .
4)使用网桥启动
[root@localhost nginx]# docker run -d --name django --network meng3 django:v1
[root@localhost nginx]# docker run -d --name nginx -P --network meng3 nginx:v1
5、容器化BBS
1、下载软件
[root@localhost ~]# mkdir bbs
[root@localhost ~]# cd bbs
[root@localhost bbs]# vim requirements.txt
[root@localhost bbs]# pip3 install -Ur requirements.txt
2、启动mysql容器
[root@localhost bbs]# docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
3、创建数据库
[root@localhost bbs]# vim settings.py # 修改Django配置文件
ALLOWED_HOSTS = ['*']
'HOST': 'mysql', # 因为在容器里面运行,不能用127.0.0.1了
[root@localhost bbs]# docker exec -it mysql bash # 进入容器创建数据库
root@b2c19679aaa9:/# mysql -uroot -p123456
mysql> create database bbs;
4、数据库迁移
[root@localhost bbs]# python3 manage.py makemigrations
[root@localhost bbs]# python3 manage.py migrate
5、编写Dockerfile
[root@localhost bbs]# vim Dockerfile
FROM python:3.6 # 使用python依赖环境
ADD ./ /opt # 把当前目录添加到/opt
WORKDIR /opt # 设置工作目录
RUN pip install -Ur requirements.txt # 执行下载命令
EXPOSE 80 # 指定端口
CMD python manage.py runserver 0.0.0.0:80 # 启动命令
6、构建镜像的命令
[root@localhost bbs]# docker build -t bbs:v1 .
[root@localhost bbs]# docker network connect meng3 mysql # 链接网桥
[root@localhost bbs]# docker run -d --name bbs --network meng3 bbs:v1 # 启动bbs容器
7、编写nginx
1)编写配置文件
[root@localhost bbs]# mkdir nginx
[root@localhost bbs]# cd nginx/
[root@localhost nginx]# vim default.conf # 编写配置文件
server {
server_name _;
list 80;
location / {
proxy_pass http://django;
}
}
2)编写Dockerfile
[root@localhost nginx]# vim Dockerfile # 编写Dockerfile
FROM nginx
ADD default.conf /etc/nginx/conf.d/
EXPOSE 80
CMD nginx -g 'daemon off;'
3)构建镜像
[root@localhost nginx]# docker build -t nginx:v2 .
[root@localhost nginx]# docker run -d --name nginxv2 --network meng3 -P nginx:v2