Docker 基本概念(三)-生命周期详解(镜像、容器、仓库)
Docker三大组件:镜像、容器、仓库。
一、镜像
1 从仓库获取镜像
#一、从仓库获取镜像,帮助命令:docker pull -help
命令:docker pull [选项] [docker Registry 地址[:端口号/]仓库名[:标签]] #没有镜像仓库地址默认是从docker hub中获取镜像
Ex: $docker pull ubuntu:16.04
docker hub中获取镜像速度很慢,一般推荐使用国内的镜像加速器:
针对不同的系统,配置的方式不一样,比如针对系统centos7、Debian 8+、Ubuntu 16.04+,配置如下:
#在$vi /etc/docker/daemon.json下,新增或编辑如下内容:
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
#重启服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
2 管理本地主机上的镜像
#运行镜像 #容器运行命令:docker run
#-it:这是2个参数,一个是-i:交互式操作;一个是-t终端
#--rm:容器退出后随之将其删除;ubuntu:16.04指镜像为基础来启动容器;bash指交互式shell
#运行镜像执行命令如下:
$docker run -it --rm ubuntu:16.04 bash
root@e7009c6ce357:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.4 LTS, Trusty Tahr"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.4 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
2.1 列出镜像
#列出镜像,显示顶层镜像
docker image ls #列出中间层镜像
docker image ls -a #列出部分镜像,如果需要指定的仓库名和标签,比如:unbuntu:16.04; #-f指过滤参数
docker image ls -f ubuntu:16.04
docker image ls -f ubuntu
2.2 删除镜像
#删除镜像
格式:docker image rm [选项]<镜像1>[<镜像2>....] #删除镜像,用ID、镜像名、摘要删除镜像,有时候需要docker image ls配合
$docker image rm $(docker image ls -q redis)
2.3 利用commit理解镜像构成
定制镜像用dockerfile
docker commit语法格式:docker commit [选项] <容器ID 或容器名> [<仓库名>[:<标签>]]
不建议用
2.4 docker file 定制镜像
原理:镜像的定制实际上就是以镜像为基础,定制每一层所添加的配置、文件。
dockerfile:文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层。每一条指令描述该层如何构建。
dockerfile脚本:把每一层的修改、安装、构建、操作的命令都写入一个脚本,用这个脚本来构建、定制镜像。
PS:dockerfile一般置于一个空目录下,或者项根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。用.dockerignore语法可以剔除不需要作为上下文传递给docker引擎的。
比如一个简单的dockerfile例子:
$mkdir mynginx
$cd mynginx
$touch dockerfile
dockerfile具体脚本如下:
#FROM指定基础镜像,必备的第一条命令
FROM nginx
#RUN指令用来执行命令行命令的
RUN echo ‘<h1>Hello,Docker!</h1>’ > /usr/share/nginx/index.html
2.5 构建镜像
构建镜像原理:docker在运行时分为Docker引擎(服务端守护进程)和客户端工具,docker引擎提供了一组REST API,被称为Docker Remote API,客户端是通过这组API与Docker引擎进行交互,从而完成各种功能,一切都是使用的远程调用形式在服务端(Docker引擎)完成。
#格式:docker build [选项] <上下文路径/URL/-> .
#-t nginx:v3指的是最终镜像的名称,.表示当前目录
dockerfile build -t nginx:v3 .
2.6 镜像构建上下文(context)
原理:构建时,用户指定构建镜像上下文的路径,docker build执行时,会将路径下的所有内容打包,上传给docker引擎。
比如COPY、ADD命令等
COPY ./package.json /app/
此时的package.json是复制的上下文(context)目录下的package.json,不是docker build命令所在的目录下的package.json,也不是复制dockerfile所在目录下的package.json.
3 镜像实现的基本原理
#镜像实现的基本原理
原理:每个镜像都由很多层次构成,docker使用UnionFS将这些不同的层结合到一个镜像中去。
二、容器
容器:独立运行的一个或一组应用,以及它们的运行态环境。
虚拟机:模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。
docker run创建容器时,docker后台运行的标准操作步骤:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读可写
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个ip地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
2.1 启动容器
启动容器有2种方式:
- 基于镜像新建一个容器并启动
- 将在终止状态(stopped)的容器重新启动
2.2 新建并启动容器
Ex:输入Hello World之后终止容器
$docker run ubuntu:14.04 /bin/echo ‘Hello World’
Hello world
Ex:启动一个bash终端,允许用户进行交互
#-t选项指docker分配一个伪终端并绑定到容器的标准输入上
#-i则让容器的标准输入保持打开
$docker run -t -i ubuntu:14.04 /bin/bash
root@af8bae53bdd3:/#pwd
/
root@af8bae53bdd3:/#ls
Bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
2.3 启动已终止的容器
#已终止的容器启动运行
docker container start
#查看容器信息
docker container ls
#获取容器的输出信息
docker container logs [container ID or NAMES]
2.4 终止容器
#终止容器
docker container stop
#查看终止状态的容器
docker container ls -a
2.5 进入容器
进入容器命令:docker attach命令或docker exec命令
#当-i -t 参数一起使用时,可以看到熟悉的linux命令提示符
2.6 导出和导入容器
#导出容器
$docker export [container id]
Ex:docker export 7691a814370e >ubuntu.tar
#导入容器
$cat ubuntu.tar docker import - test/ubuntu:v1.0
2.7 删除容器
#docker container rm来删除一个处于终止状态的容器
$docker container rm trusting_newton
trusting_newton
2.8 清理所有处于终止状态的容器
$docker container prune
三、仓库
3.1 拉取镜像
#查找官方仓库中的镜像
$docker search centos
#拉取镜像到本地
$docker pull centos
3.2推送镜像
#推送镜像
$docker tag ubuntu:17.10 username/ubuntu:17.10 #username是当前docker账号用户名
$docker image ls
$docker push username/ubuntu:17.10
$docker search username
3.3 自动创建
目的:用于经常升级镜像内程序。比如用户创建了镜像,安装了某个软件,如果软件发布新版本则需要手动更新镜像。
原理:允许用户通过docker hub 指定跟踪一个目标网站上的项目,一旦项目发生新的提交或者创建新的标签(tag),docker hub会自动构建镜像并推送到docker hub中。
配置自动创建,步骤如下:
1.创建并登陆Docker hub,以及目标网站
2.在目标网站中连接账户到docker hub
3.在docker hub中配置一个自动创建
4.选择一个目标网站中的项目和分支
5.指定dockerfile的位置,并提交创建
Docker 基本概念(三)-生命周期详解(镜像、容器、仓库)的更多相关文章
- ASP.NT运行原理和页面生命周期详解及其应用
ASP.NT运行原理和页面生命周期详解及其应用 1. 下面是我画的一张关于asp.net运行原理和页面生命周期的一张详解图.如果你对具体不太了解,请参照博客园其他帖子.在这里我主要讲解它的实际应用. ...
- ASP.NET生命周期详解
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- ASP.NET生命周期详解 [转]
最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多处理流程,如管道事件等 ...
- ASP.NET生命周期详解(转)
看到好文章需要分享. 最近一直在学习ASP.NET MVC的生命周期,发现ASP.NET MVC是建立在ASP.NET Framework基础之上的,所以原来对于ASP.NET WebForm中的很多 ...
- React—组件生命周期详解
React—组件生命周期详解 转自 明明的博客 http://blog.csdn.net/slandove/article/details/50748473 (非原创) 版权声明:转载请注明出处,欢 ...
- Laravel源码分析--Laravel生命周期详解
一.XDEBUG调试 这里我们需要用到php的 xdebug 拓展,所以需要小伙伴们自己去装一下,因为我这里用的是docker,所以就简单介绍下在docker中使用xdebug的注意点. 1.在php ...
- Spring Bean的生命周期详解(转)
Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...
- Asp.net页面生命周期详解任我行(3)-服务器处理请求详细过程
前言 百度了一下才知道,传智的邹老师桃李满天下呀,我也是邹老师的粉丝,最开始学习页面生命周期的时候也是看了邹老师的视频. 本人是参考了以下前辈的作品,本文中也参合了本人心得,绝非有意盗版,旨在传播,最 ...
- 【转】Java 类的生命周期详解
一. 引 言 最近有位细心的朋友在阅读笔者的文章时,对java类的生命周期问题有一些疑惑,笔者打开百度搜了一下相关的问题,看到网上的资料很少有把这个问题讲明白的,主要是因为目前国内java方面的教材大 ...
随机推荐
- 两个SQL查询,横向合并为一个查询结果
第一条sql: select unit,count(*)as number from archives_management group by unit 第二条sql: select fine_uni ...
- PriorityQueue原理分析——基于源码
在业务场景中,处理一个任务队列,可能需要依照某种优先级顺序,这时,Java中的PriorityQueue(优先队列)便可以派上用场.优先队列的原理与堆排序密不可分,可以参考我之前的一篇博客: 堆排序总 ...
- OpenCV计算机视觉学习(11)——图像空间几何变换(图像缩放,图像旋转,图像翻转,图像平移,仿射变换,镜像变换)
如果需要处理的原图及代码,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice 图像 ...
- delphi 设置默认控件得到焦点
如果同一窗体有多个按钮的话,追踪源码发现最后是taborder来的 如: 在空白窗体上拖入两个button (btn1,btn2) 如果在btn2设置default = True 运行后,默认焦点还是 ...
- 企业网络拓扑RSTP功能实例
组网图形 RSTP简介 以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路.但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质 ...
- linux c语言编写一个shell壳
目的:我们要用c语言编写一个shell可以运行在linux机器上的. 介绍:shell所在的层次 我们要做的是操作系统,用于用户与操作系统进行交互的myhsell 思路:用户输入 一行字符串,我们先 ...
- quic是干什么的?
什么是quic? quic解决了什么问题?HTTP和QUIC QUIC :Quick UDP Internet Connections:是一种新的默认加密的互联网通信协议,它提供了许多改进,旨在加速H ...
- Hadoop大数据平台搭建之前期配置(1)
环境:CentOS 7.4 (1708 DVD) 工具:VMware.MobaXterm 一. 网络配置 1. 在VMware中安装虚拟机,此步骤不作赘述. 2. 镜像文件保留在固定目录下,网络适配 ...
- 如何正确地安装MathType 7?
作为一名资深的公式编辑器用户,在新版本MathType 7上线的第一时间,已经去体验了一把.那么要如何正确地安装呢?下面就来详细地介绍下它的安装方法. 步骤一 双击下载好的应用程序,就可以开始安装软件 ...
- 「LOJ 538」「LibreOJ NOIP Round #1」数列递推
description sosusosu 虐爆 OI 之后成为了一名文化课选手.一天,他做作业碰到了一堆数列问题,每道题给出的数列都是以下形式: 给定一个下标从\(0\)开始,无限长的整数列\({a_ ...