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

docker 快速生成ssl dockerfile生成镜像_centos

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

一、Docker镜像原理

1、先来个灵魂三问:

  • 1、docker镜像本质是什么?
  • 2、为什么docker中一个centos镜像只有200MB,而一个centos的操作系统文件要几个G?
  • 3、为什么docker中一个tomcat镜像只有500MB,而一个tomcat安装包只有70M?

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

docker 快速生成ssl dockerfile生成镜像_centos_02

docker 快速生成ssl dockerfile生成镜像_django_03

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

docker 快速生成ssl dockerfile生成镜像_docker_04

三、Dockerfile生成centos镜像

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

  • Dockerfile是一个文本文件
  • 包含了一条条的指令
  • 每一条指令构建一层,基于基础镜像,最终构建成一个新的镜像

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

docker 快速生成ssl dockerfile生成镜像_docker 快速生成ssl_05

我们可以访问:

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

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

docker 快速生成ssl dockerfile生成镜像_centos_06

docker 快速生成ssl dockerfile生成镜像_镜像浏览器_07

2、dockerfile常用关键字

docker 快速生成ssl dockerfile生成镜像_django_08

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

docker 快速生成ssl dockerfile生成镜像_镜像浏览器_09

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

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

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

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

docker 快速生成ssl dockerfile生成镜像_镜像浏览器_10

四、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

docker 快速生成ssl dockerfile生成镜像_镜像浏览器_11

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/,访问成功。

docker 快速生成ssl dockerfile生成镜像_centos_12

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

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