首页 > 其他分享 >dockerfile实践学习

dockerfile实践学习

时间:2023-01-05 14:11:07浏览次数:45  
标签:容器 实践 学习 nginx mysql 镜像 docker dockerfile

一、dockerfile简介

image

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

image

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、查看宿主机镜像运行情况如下图所示

image

标签:容器,实践,学习,nginx,mysql,镜像,docker,dockerfile
From: https://www.cnblogs.com/refreshingBreeze/p/17027301.html

相关文章

  • 深度学习随笔[tensorflow] 多维矩阵的乘法
    ​​最新openCV-Python安装教程(python:3.9||opencv-python:4.5.5)_Mr.zzc的博客​​pycharm导入opencv后无智能提示-知乎​​ 版本问题,选择3.4.14.51可以,选择3.4.18.65不行......
  • (实例)学习requests方法的写法
    ​第一种:直接平铺代码#-*-coding:utf-8-*-#pipinstallrequests,这是导入requests模块的命令#因为requests是外部的,所以每次使用都要import一次importrequests#......
  • 学习.NET MAUI Blazor(四)、路由
    Web应用程序的可以通过URL将多个页面串联起来,并且可以互相跳转。Web应用主要是使用a标签或者是服务端redirect来跳转。而现在流行的单页应用程序(SPA),则通过路由(Router)来......
  • Python实践中问题
    Python入门必看!零基础也能学-哔哩哔哩​​Python基础教程|菜鸟教程​​​​Python3教程|菜鸟教程​​​​Python图形界面框架PySide6使用及避坑指南_java编程艺......
  • Elasticsearch学习笔记
    ​​最新ElasticSearch6实战教程​​​​全文搜索引擎Elasticsearch入门教程​​​​Elasticsearch学习,请先看这一篇!​​​​ElasticSearch简介​​​​Elasticsearch入门......
  • Java JUC学习笔记
    1、JUC简介在Java5.0提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步IO和轻量......
  • Java学习笔记
    一、Java8新特性1、HashMap​​深入浅出学Java——HashMap​​​​算法复杂度O(1),O(n),O(logn),O(nlogn)的含义​​2、ConcurrentHashMap​​HashMap?ConcurrentHashMap?相信......
  • visual studio学习VS 配置 VC++ 目录
    1、​​visualstudio新手使用教程​​2、头文件与lib库​​【VisualStudio】VS中添加头文件和lib库的方法​​​​VS2010中VC++目录和C/C++之间的区别。VC++Directories......
  • 【学习笔记】Lombok的使用
    Lombok的使用Lombok是一款java开发插件,它可以通过注解来减少业务中冗长和繁琐的代码,尤其是对于简单的java模型对象(POJO)。使用步骤:在IDEA中下载Lombok插件在setting中......
  • nginx学习笔记
    ​​nginx系列之一:nginx入门​​nginx系列之二:配置文件解读nginx系列之三:日志配置nginx系列之四:web服务器nginx系列之五:负载均衡nginx系列之六:cache服务nginx系列之七:限流......