菜鸟系列docker——docker镜像上(3)
1. 镜像image
镜像和容器的关系就和安装包和程序的关系一样,有了镜像才可以启动容器,容器是镜像的一个运行实例。
1.1 镜像的结构
通过第二节仓库,可能很多看官已经查看到镜像是分层的,接下来将对镜像进行详细介绍。首先,通过一个我们最熟悉对hello-world开始入门。此处涉及很多关于镜像对命令。
- 通过docker pull一个镜像
[centos@jiliguo ~]$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:92695bc579f31df7a63da6922075d0666e565ceccad16b59c3374d2cf4e8e50e
Status: Downloaded newer image for hello-world:latest
- 通过docker images查看镜像
[centos@jiliguo ~]$ docker images hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 3 months ago 1.84kB
- 通过docker run运行镜像
[centos@jiliguo ~]$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
那么这个镜像包含写什么呢?我们查看一下构建该镜像对dockerfile文件
https://hub.docker.com/
查找hello-world镜像
在Supported tags and respective Dockerfile links选择一个查看即可
FROM scratch
COPY hello /
CMD ["/hello"]
这个文件就三行,其含义是 from一个基础镜像,拷贝hello文件,容器启动时执行hello文件。这里基础镜像是scratch,其含义是从0开始对,没有依赖其他镜像。
我们看看nginx这个镜像对dockerfile。
FROM debian:stretch-slim
LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
ENV NGINX_VERSION 1.14.2-1~stretch
ENV NJS_VERSION 1.14.2.0.2.6-1~stretch
# run后面太长了,省略下
RUN ....
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]
通过nginx可以看出,它是依赖于debian镜像对基础上创建的。
接下来将通过nginx的dockerfile文件详细介绍docker镜像的结构
dockerfile文件里,每一个命令都可以看成一层,第一层 from,第二层label,第三层env,第四层也是env。这样描述可能不是很清晰,接下来我们通过nginx的dockerfile构建一个镜像。让各位更加直观的感受下docker镜像分层。
-----一个尴尬的分割线,还是毕竟长----- 看一部分哈
[centos@jiliguo docker]$ docker build -t mynginx:v1.0 .
Sending build context to Docker daemon 6.144kB
Step 1/9 : FROM debian:stretch-slim
stretch-slim: Pulling from library/debian
27833a3ba0a5: Already exists
Digest: sha256:bade11bf1835c9f09b011b5b1cf9f7428328416410b238d2f937966ea820be74
Status: Downloaded newer image for debian:stretch-slim
---> c08899734c03
Step 2/9 : LABEL maintainer="NGINX Docker Maintainers <docker-maint@nginx.com>"
---> Running in d01ec5c5a51c
Removing intermediate container d01ec5c5a51c
---> 2c123195c3f6
Step 3/9 : ENV NGINX_VERSION 1.14.2-1~stretch
---> Running in 0adfc50e4af7
Removing intermediate container 0adfc50e4af7
---> 088f48b30338
Step 4/9 : ENV NJS_VERSION 1.14.2.0.2.6-1~stretch
---> Running in 6f1ed07ec93b
Removing intermediate container 6f1ed07ec93b
再次确认了每行都是一层了吧。
1.2 分层结构
其实分层有个很大的优势,因为他将一个镜像分层了,则层之间是可以资源复用的,怎么说呢。如果我们需要对nginx再封装多个服务,则这多个服务对nginx层是可以复用的,这样的话就只需要保留一个nginx镜像。
note:即使复用了一些层,但是各个容器是相互隔离的,并不会因为某个容器修改了一个文件,另一个容器相对的文件也被修改了。
在容器启动的后,容器整个架构就在最上层存在一个容器层,下面都是镜像层,只有容器层是可写的。所有对容器修改等操作都发生再容器层。

1.3 镜像相关命令
- docker images 查看镜像
- docker pull 获取镜像
- docker push 上传镜像
- docker build 构建镜像
- docker search 查找镜像
- docker tag 给镜像打标签
- docker rmi 删除镜像
- docker save/load 保存/加载镜像
- docker commit 构建镜像
菜鸟系列docker——docker镜像上(3)的更多相关文章
- docker自定义镜像上传阿里云
1.alpine制作jdk镜像 2.Alpine制作jre镜像(瘦身) 3.Docker镜像上传至阿里云 alpine制作jdk镜像 alpine Linux简介 1.Alpine Linux是一个轻 ...
- Docker本地镜像上传到阿里云仓库
登录阿里云 在容器镜像服务中先创建命名空间 随后创建镜像仓库 我使用的代码源是本地仓库 创建后点击仓库的管理 就可以看到阿里云提供的操作指南 (下面的操作每个人都不同,详情查看阿里云的操作指南) 输入 ...
- Docker在Linux上运行NetCore系列(二)把本地编译好的镜像发布到线上阿里云仓库
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始 本篇文章结束在本地创建完成镜像后, ...
- 菜鸟系列docker——docker镜像下(5)
1. docker镜像构建 该章节主要介绍2种构建docker镜像的方式.当然,当前基本上需要的基础镜像都有,直接使用即可.例如数据库.中间件之类的,只需要拿来使用即可,但是依然存在需要开发者构建镜像 ...
- 菜鸟系列docker——docker镜像中(4)
docker镜像命令 该章节主要介绍docker image相关命令实践操作,建议都一起跑一边 1. docker images 列举本机docker镜像 [centos@jiliguo docker ...
- Docker在Linux上运行NetCore系列(三)在Linux上使用Docker运行Asp.NetCore
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 开始说明 上几篇文章都是通过Linux运 ...
- Docker在Linux上运行NetCore系列(五)更新应用程序
转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章与其它系列文章不同,为了方便测试,新建了一个ASP.Net Core视图应用. 备注:下面说的应用,只是在容器中运行的应用程序. 查看现在运 ...
- Docker在Linux上运行NetCore系列(四)使用私有Nuget与多个本地包引用运行ASPNetCore
转发请注明此文章作者与路径,请尊重原著,违者必究. 本篇文章演示了使用Dockerfile在Linux(ubuntu16.04)系统上构建ASPNetCore应用,并且在一个解决方案中存在多个项目之间 ...
- Docker在Linux上运行NetCore系列(一)配置运行DotNetCore控制台
转发请注明此文章作者与路径,请尊重原著,违者必究. 系列文章:https://www.cnblogs.com/alunchen/p/10121379.html 本篇文章操作系统信息 Linux:ubu ...
随机推荐
- python编程之变量和简单的数据结构
一.变量 前面我们用python输出了“hello world!” 这次我们在前面加入一行,定义一个变量,然后修改第二行. 添加变量导致Python解释器需要做更多工作.处理第1行代码时,它将文本“H ...
- Python19/1/11--标签与过滤器/Django模块导入继承/静态文件配置
1 模板语言之变量: -{{ }} 相当于执行了print -深度查询 . 如果是方法,不能加括号,不能传参数2 过滤器 {{ 变量|过滤器的名字:'参数' }} -add -default -s ...
- 作业 -- 几道简单的Python题
1.编写程序,要求生成10240个随机[0,512)之间的整数,并统计每个元素出现的次数. 2.编写程序,要求当用户输入一个列表和两个整数作为下标时,程序可以使用切片获取并输出列表中截取两个下标之间的 ...
- Springboot单例模式实战封装json转换
一.定义 保证一个类仅有一个实例,并提供一个全局访问点. 二.优点 (1)在内存里只有一个实例,减少了内存开销 (2)可以避免对资源的多重占用 (3)设置全局访问点,严格控制访问 ...
- Batch_Size对网络训练结果的影响
最近在跑一些网络时发现,训练完的网络在测试集上的效果总是会受Batch_Size 大小的影响.这种现象跟以往自己所想象的有些出入,于是出于好奇,各种搜博客,大致得出了自己想要的答案,现写一篇博客记录一 ...
- java环境下载
https://repo.huaweicloud.com/java/jdk/8u201-b09/
- SSM+MyBatis框架详解
- mac os 下 vs code 开发 .net core
1.软件下载 .net core 2.0 sdk: vs code 最新版: 2.用 dotnet 命令行 dotnet cli 创建项目 打开终端,创建这次项目的文件夹,mkdir Demo1: c ...
- Python selenium webdriver设置加载页面超时
1. pageLoadTimeout: pageLoadTimeout方法用来设置页面完全加载的超时时间,完全加载即页面全部渲染,异步同步脚本都执行完成.没有设置超时时间默认是等待页面全部加载完成才 ...
- 服务器端PHP允许跨域
解决跨域的关键是设置 Access-Control-Allow-Origin. 例如:客户端的域名是 api.itbsl.com,而请求的域名是www.itbsl.com 如果直接使用ajax访问,会 ...