一、dockerfile简介

镜像是分层存储的,每一层在前一层的基础上进行修改。
容器也是分层存储,已经向为基础层,在其他基础上加一层作为容器运行的存储层。
创建镜像的另种两种方法
  • 手动修改容器内容,然后docker commit 提交容器作为新的进想
  • 通过修改dockerfile中定义一系列的命令和参数构成脚本,然后这些命令用于基础镜像,一次添加层,最终生成一个新的镜像,极大的简化了部署工作。
官方提供的dockerfile实例
https://github.com/CentOS/CentOS-Dorkerfiles

dockerfile的组成部分
  • 基础镜像信息 FROM centos:7.8.2003
  • 制作镜像操作指令 RUN yum install openssh-server -y
  • 容器启动时执行指令 CMD ["/bin/bash"]

传统虚拟机安装软和docker使用dockerfile创建镜像安装软件的对比

1.传统虚拟机
  • 开启VMware,运行某个虚拟机,centos7
  • centos7安装mysql yum install mysql-server
  • 通过脚本或者命令,启动mysql即可
  • 缺点:部署缓慢,需要修改宿主机环境,删除麻烦,占用宿主机3306端口
2.基于docker安装mysql
  • 运行虚拟机centos7(宿主机)
  • 安装docker容器
  • 获取mysql镜像docker pull mysql:tag你无法自由控制,该mysql的基础镜像是什么发行版,你获取的镜像是别人指定好的,默认使用的是Debian,但是你希望得到一个基于centos7.8的发行版运行的mysql)
  • 直接运行该镜像,通过端口映射,运行mysql。docker run mysql:5.7(容器能够运行,必须在容器内有一个进程在前台,该容器内有mysql在前台运行)
  • 访问宿主机的一个映射端口,访问到容器内的mysql

想自定义镜像就需要自己写脚本,也就是dockerfile了

dockerfile指令
  • FROM 这个镜像的妈是谁?(指定基础镜像)

  • MAINTAINER 告诉别人,谁负责养它?(指定维护者信息,可以没有)

  • RUN 你想让他干啥(在命令前面加上RUN即可)

  • ADD 给点创业资金(添加宿主机文件到容器内,还多了一个自动解压的功能)

  • COPY 作用和ADD是一样的,都是拷贝宿主机文件到容器内,COPY仅仅是拷贝

  • WORKDIR 我是cd,今天刚花了妆,是不是不认识了?(设置当前工作目录)

  • VOLUME 给他一个存行李的地方(设置卷,挂载宿主机主机目录)

  • EXPOSE 他要打开的门是啥(指定对外端口),在容器内暴露一个窗口,端口

  • CMD 奔跑吧,兄弟!(指定容器启动后要干的事情)

dockerfile其他指令
  • COPY 复制文件
  • ENV 环境变量
  • ENTRYPOINT 容器启动后执行的命令
dockerfile实践小案例
需求:通过dockerfile,构建nginx镜像,且运行容器后,生成页面,是"一起学docker"
# 1、创建Dockerfile,注意文件名必须是这个
[root@localhost ~]# cd /
[root@localhost /]# mkdir /learn_docker
[root@localhost /]# cd /learn_docker
[root@localhost learn_docker]# vim Dockerfile
[root@localhost learn_docker]# cat Dockerfile
FROM nginx
RUN echo '<meta charset=utf8>老司机带你用docker运行nginx服务.</meta>' > /usr/share/nginx/html/index.html # 2、构建Dockerfile
[root@localhost learn_docker]# docker build .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx (这里查找本地镜像,如果有的话就直接使用本地镜像,没有的话去下载)
---> 605c77e624dd (本地nginx的镜像id)
Step 2/2 : RUN echo '<meta charset=utf8>老司机带你用docker运行nginx服务.</meta>' > /usr/share/nginx/html/index.html (根据指令进行更改操作)
---> Running in 53e1c900bb71
Removing intermediate container 53e1c900bb71
---> 395727c27ac3 (生成新的新的nginx的镜像id)
Successfully built 395727c27ac3 (出现这个表示新镜像构建成功)
# 3、修改新的镜像的名字,因为新生成的镜像的默认是没有版本和名字的
[root@localhost learn_docker]# docker tag 395727c27ac3 my_nginx # 构建出的新镜像如下
[root@localhost learn_docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my_nginx latest 395727c27ac3 8 minutes ago 141MB # 4、运行该镜像
docker run -d -p 80:80 my_nginx # 5、查看宿主机镜像运行情况如下图所示

dockerfile实践学习的更多相关文章

  1. 如何用Dockerfile创建镜像

    本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5181222.html 创建镜像的目的 首先说DockerHub或其它一些镜像仓库已经提供了够多的镜像,有 ...

  2. Dockerfile初探

    git上的asp.net samples工程已经写好了docker file,内容是如下   //任何dockersfile都要以FORM开头,约定是用大写. FROM microsoft/aspne ...

  3. ubuntu 16.04 Dockerfile 安装mysql

    默认上MariaDB的包并没有在Ubuntu仓库中.要安装MariaDB,我们首先要设置MariaDB仓库. 配置MariaDB 仓库 # apt-get install software-prope ...

  4. 分析Mysql 5.6的Dockerfile

    Docker官方的Mysql镜像的Dockerfile托管在Github上,地址如下: https://github.com/docker-library/mysql/tree/5836bc9af9d ...

  5. 利用Dockerfile构建一个基于centos 7,包括java 8, tomcat 7,php ,mysql+mycat的镜像

    Dockerfile内容如下: FROM centos MAINTAINER Victor ivictor@foxmail.com WORKDIR /root RUN rm -f /etc/yum.r ...

  6. Docker dockerfile创建Eclipse镜像初试

    抽空初步阅读了Docker技术入门与实战 [Kindle电子书] http://www.cnblogs.com/2018/p/4600116.html 现在想首先在开发环境下引入统一的环境,由于开发中 ...

  7. 安装Nginx的Dockerfile实例

    #################################################Dockerfile to build Nginx Installed Containers##Bas ...

  8. 测试dockerfile

    测试dockerfile是否ok(比如我的Dockerfile在deploy目录下) docker build -t my_image -f deploy/Dockerfile . docker im ...

  9. 通过Dockerfile建立.NET Core mvc Image

    生成.NET core mvc code docker run -itd microsoft/dotnet:latestdocker psdocker attach containeridmkdir ...

  10. .Net Core+cenos7+Docker+Dockerfile 部署实践

    因为这段时间比较忙,同时也在抽时间将开发框架转移到 .net Core 上 所以写博客的时间就少了,这次我利用dockerfile成功将.net Core程序部署到了cenos7容器中,特抽时间把我的 ...

随机推荐

  1. 原生javascript解锁恶心的CSDN强制关注才能阅读让文章自动展开(转部分内容)

    此时你可以打开chrome浏览器的开发者工具 快捷键F12, 然后切换到Console界面 然后复制上面的javascript代码 var article_content=document.getEl ...

  2. 使用 symfony 框架时 配置运行环境时 报debug 工具栏问题及 No input file specified.

    错误一: 错误二:点击跳转时:No input file specified. 解决方法:配置nginx.conf时 增加以下代码: location / { index app_dev.php; t ...

  3. 如何在mac上配置Apache服务器

    ​ 如何在mac上配置Apache服务器 1. 打开终端,开启Apache: //开启apache:  sudo apachectl start //重启apache:  sudo apachectl ...

  4. java短链接生成二维码

    import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxi ...

  5. 单个Java文件连接数据库demo

      在单个java文件中,尝试连接数据库,跟python的模块包安装方式很接近,已经测试成功,把博客写一下,记录下来.   首先把jdb的驱动包下载下来,就是一个jar包,下面是官网下载地址 官网下载 ...

  6. Spring 常见注解及其作用

    1.@ConfigurationProperties    可以非常方便的把资源文件中的内容绑定到对象上       绑定单一属性值,绑定整个对象属性   2.@Value("${app.n ...

  7. shell语法6-exit命令、文件重定向、引入外部脚本

    一.exit命令 exit命令用来退出当前shell进程,并返回一个退出状态:使用$?可以接收这个退出状态.exit命令可以接受一个整数值作为参数,代表退出状态.如果不指定,默认状态值是 0.exit ...

  8. pytorch自定义RNN结构(附代码)

    pytorch自定义LSTM结构(附代码) 有时我们可能会需要修改LSTM的结构,比如用分段线性函数替代非线性函数,这篇博客主要写如何用pytorch自定义一个LSTM结构,并在IMDB数据集上搭建了 ...

  9. 实验一 Python程序设计入门 20203412马畅若

    课程:<Python程序设计>班级: 2034姓名: 马畅若学号:20203412实验教师:王志强实验日期:2021年4月13日必修/选修: 公选课 实验一 (一)实验内容 1.熟悉Pyt ...

  10. Apache SSI远程命令执行漏洞复现

    漏洞原理:当目标服务器开启了SSI与CGI支持,就可以上传shtml文件,并利用语法执行任意命令,例如<!- - #exec cmd="ls"- ->,cmd后面跟要执 ...