镜像浏览器_从零开始学docker(三)——Dockerfile生成镜像

五一节是为了纪念劳动者,而老婆庆祝节日的方式是睡懒觉8e401d5088e45491bed1abf48e3217f2.png

前面我们学会了如何启动别人的镜像,今天来学习如何生成自己的镜像。

一、Docker镜像原理

1、先来个灵魂三问:

  • 1、docker镜像本质是什么?

  • 2、为什么docker中一个centos镜像只有200MB,而一个centos的操作系统文件要几个G?

  • 3、为什么docker中一个tomcat镜像只有500MB,而一个tomcat安装包只有70M?

2、下面是网上抄的资料,请自行理解:

14b2520fbb262090a4886932ebbe2daa.png

bbdb5aeb79debf6a7c01d043b0e340a6.png

3、我总结的灵魂三问答案:

  • 1、docker镜像是一个分层文件系统。

  • 2、centos的操作系统包含bootfs和rootfs,而docker镜像复用操作系统的bootfs,只有rootfs和其他镜像。

  • 3、由于docker中镜像是分层的,tomcat虽然只有70MB,但它需要依赖父镜像和基础镜像(包括jdk等等),所以对外暴露一共500多MB。

二、Docker镜像和压缩文件互相转换

#将docker容器转换成一个新的镜像docker commit ffe114 wufantest:1.0#将镜像转换成压缩文件docker save -o wufantestTar.tar wufantest:1.0#将压缩文件转换成镜像docker load -i wufantestTar.tar

84f14e5b985eb08f8939bfae6de7864a.png

三、Dockerfile生成centos镜像

dockerfile是docker最常用的打包方式,下面是我总结的dockerfile知识点:

  • Dockerfile是一个文本文件

  • 包含了一条条的指令

  • 每一条指令构建一层,基于基础镜像,最终构建成一个新的镜像

1、dockerfile如何学习?最简单的方式就是去直接抄别人写好的1493697a3e78c760e967f4f11184fd66.png

我们可以访问:

https://hub.docker.com/_/centos

选择一个镜像,点进去就可以查看它的dockerfile

e5c84315ee5ade770edffb7ad03ca66c.png

3cceedb93dc8585a3f0b2cbc3a0639d9.png

2、dockerfile常用关键字

9f51a22a3df9755df9dfe3f675ef04fb.png

3、自己学着写一个dockerfile案例:

  • 案例需求:

自定义centos镜像:1、默认登录路径为/usr2、可以使用vim
  • 案例实现:

#定义父镜像:FROM centos:7#定义作者信息:MAINTAINER wufan<wufan@cmiot.chinamobile.com> #安装vim命令: RUN yum install -y vim#定义默认工作目录:WORKDIR /usr#定义容器启动执行的命令:CMD /bin/bash

298d056dea1159f16ff8f5192caa46b8.png

4、通过新建的dockerfile文件生成镜像,注意最后有个可爱的小点。

docker build -f ./centos_dockerfile -t wufan_new_centos:1 .

5、将镜像生成容器,进入容器,需求全部实现。

docker run -it --name=c2 wufan_new_centos:1

aa4b5f6383883fba384307dd13dc4089.png

四、Dockerfile生成django日报系统镜像

1、首先新建一个requirements.txt,里面写日报系统需要依赖的python库

Django==2.2.6PyMySQL==0.9.3Pillowrequestsmysqlclient==1.3.14xlwt

2、新建一个daily_dockerfile,注意看我的注释,每一句话都有它的意义。启动时有几个雷我已经帮忙排了。

#项目依赖python3.7版本FROM python:3.7#添加项目作者MAINTAINER wufan#根目录新建一个django文件夹,并且把这个文件夹设置成工作目录RUN mkdir /djangoWORKDIR /django#将本地文件拷贝到镜像里ADD ./DailySystem/ /django/#更换pip install的源RUN pip install -U pipRUN pip config set global.index-url http://mirrors.aliyun.com/pypi/simpleRUN pip config set install.trusted-host mirrors.aliyun.com#安装日报系统需要依赖的python库RUN pip install -r ./needfiles/requirements.txt#将已经修改好的base和operation文件替换python原始文件,#解决之前报的那个mysqlclient 1.3.13 or newer is required错误RUN mv -f ./needfiles/base.py /usr/local/lib/python3.7/site-packages/django/db/backends/mysql/base.pyRUN mv -f ./needfiles/operations.py /usr/local/lib/python3.7/site-packages/django/db/backends/mysql/operations.py#执行python启动命令CMD python3 manage.py runserver 0.0.0.0:8000

6fc282fd2cbb28178b6f5d62a09ec53f.png

3、通过daily_dockerfile 文件生成镜像。

docker build -f ./daily_dockerfile -t dailysystem:1 .

4、生成容器并进入。这里有个新的知识点:

-p 8001:8000 将容器里的8000端口映射到宿主机8001,

这里主要为了演示,一般情况下映射的两个IP相同

docker run -it --name=c3 -p 8001:8000 dailysystem:1

5、如果报错django.db.utils.OperationalError: (1045, "Access denied for user 'root'@'XXXX' (using password: YES)")

记得在django关联的数据库里执行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'[宿主机IP]' IDENTIFIED BY '[数据库root密码]' WITH GRANT OPTION;

5、浏览器输入[宿主机IP]:8001/daily/list/,访问成功。

0715fa81e5c507cd900e189b58a7910b.png

现在日报系统有了镜像,我再也不用担心服务器迁移了。

下一章我们来学习docker-compose,欢迎继续关注。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值