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