菜鸟系列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 ...
随机推荐
- 今天我给你们推荐一本书《Linux就该这么学》!!!
本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材,目前是国内最值得去读的Linux教材,也是最有价值 ...
- C/C++字符串相关知识使用整理
C++字符串处理有最原始的char以及string两种方式,这里对其常用的功能进行总结. #include <string>using namespace std; ]; string s ...
- Spring Boot的应用启动器
Spring Boot应用启动器基本的一共有44种,具体如下: 1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置.日志和YAML. 2)spring- ...
- Lambda表达式遍历和泛型ForEach遍历方式
lambda表态式 DataTable dtAllItems = policySecurity.GetUserAccessTypeOnAllItems(userID); List<DataRow ...
- Python request库与爬虫框架
Requests库的7个主要方法 requests.request():构造一个请求,支持以下各方法的基础方法 requests.get():获取HTML网页的主要方法,对应于HTTP的GET ...
- webpack简单教程
1.初始化 安装node后,新建一个目录,比如html5.cmd中切到当前文件夹. npm init -y 这个命令会创建一个默认的package.json.它包含了项目的一些配置参数,通过它可以进行 ...
- Eclipse下用NDK编译生成so文件
我们在安装环境的时候安装了NDK,可以在eclipse下直接生成so文件.NDK的压缩包里面自带了一些sample工程,NDK的文件直接解压到某个目录下即可. 第一次生成so文件的时候,我们先使用 ...
- java.exe
进程:是一个正在执行中的程序.每一个进程执行都有一个执行顺序.该顺序是一个执行路径,或者叫一个控制单元. 线程(例:FlashGet):就是进程中一个独立的控制单元.线程在控制着进程的执行.一个进程中 ...
- all about
1.三次握手和四次挥手?2.什么是OSI七层结构?3.http vs https?4.what is Ping?基于什么协议?使用方法?5.DNS?6.cookie vs session?7.LDAP ...
- 我的C++ 学习心得
创建这个博客已经是我大一下学期的暑假了,这一年里,我学习了人生第一门编程语言C++ . C++是一门当前仍然活跃于开发前沿的编程语言.在还未开始正式学习它时,早就听到我们的学长抱怨C++难学.起初,我 ...