当前位置: 首页 > 编程日记 > 正文

Docker镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

下面我们来学习:

  • 1、管理和使用本地 Docker 主机镜像
  • 2、创建镜像

列出镜像列表

我们可以使用 docker images 来列出本地主机上的镜像。

runoob@runoob:~$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB

php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB

nginx               latest              6f8d099c3adc        12 days ago         182.7 MB

mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB

httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB

ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB

hello-world         latest              690ed74de00f        6 months ago        960 B

training/webapp     latest              6fae60ef3446        11 months ago       348.8 MB

各个选项说明:

  • REPOSITORY表示镜像的仓库源
  • TAG镜像的标签
  • IMAGE ID镜像ID
  • CREATED镜像创建时间
  • SIZE镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如ubuntu仓库源里,有15.10、14.04等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为15.10的ubuntu系统镜像来运行容器时,命令如下:

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash

root@d77ccb2e5cca:/#

如果要使用版本为14.04的ubuntu系统镜像来运行容器时,命令如下:

runoob@runoob:~$ docker run -t -i ubuntu:14.04 /bin/bash

root@39e968165990:/#

如果你不指定一个镜像的版本标签,例如你只使用 ubuntu,docker 将默认使用 ubuntu:latest 镜像。


获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

Crunoob@runoob:~$ docker pull ubuntu:13.10

13.10: Pulling from library/ubuntu

6599cadaf950: Pull complete

23eda618d451: Pull complete

f0be3084efe9: Pull complete

52de432f084b: Pull complete

a3ed95caeb02: Pull complete

Digest: sha256:15b79a6654811c8d992ebacdfbd5152fcf3d165e374e264076aa435214a947a3

Status: Downloaded newer image for ubuntu:13.10

下载完成后,我们可以直接使用这个镜像来运行容器。


查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个httpd的镜像来作为我们的web服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

runoob@runoob:~$  docker search httpd

NAME:镜像仓库源的名称

DESCRIPTION:镜像的描述

OFFICIAL:是否docker官方发布


拖取镜像

我们决定使用上图中的httpd 官方版本的镜像,使用命令 docker pull 来下载镜像。

runoob@runoob:~$ docker pull httpd

Using default tag: latest

latest: Pulling from library/httpd

8b87079b7a06: Pulling fs layer

a3ed95caeb02: Download complete

0d62ec9c6a76: Download complete

a329d50397b9: Download complete

ea7c1f032b5c: Waiting

be44112b72c7: Waiting

下载完成后,我们就可以使用这个镜像了。

runoob@runoob:~$ docker run httpd


创建镜像

当我们从docker镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1.从已经创建的容器中更新镜像,并且提交这个镜像
  • 2.使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash

root@e218edb10161:/#

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit命令来退出这个容器。

此时ID为e218edb10161的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit来提交容器副本。

runoob@runoob:~$ docker commit -m="has update" -a="runoob" e218edb10161 runoob/ubuntu:v2

sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

各个参数说明:

  • -m:提交的描述信息
  • -a:指定镜像作者
  • e218edb10161容器ID
  • runoob/ubuntu:v2:指定要创建的目标镜像名

我们可以使用 docker images 命令来查看我们的新镜像 runoob/ubuntu:v2

runoob@runoob:~$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

runoob/ubuntu       v2                  70bf1840fd7c        15 seconds ago      158.5 MB

ubuntu              14.04               90d5884b1ee0        5 days ago          188 MB

php                 5.6                 f40e9e0f10c8        9 days ago          444.8 MB

nginx               latest              6f8d099c3adc        12 days ago         182.7 MB

mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB

httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB

ubuntu              15.10               4e3b13c8a266        4 weeks ago         136.3 MB

hello-world         latest              690ed74de00f        6 months ago        960 B

training/webapp     latest              6fae60ef3446        12 months ago       348.8 MB

使用我们的新镜像 runoob/ubuntu 来启动一个容器

runoob@runoob:~$ docker run -t -i runoob/ubuntu:v2 /bin/bash

root@1a9fbdeb5da3:/#


构建镜像

我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。

runoob@runoob:~$ cat Dockerfile

FROM    centos:6.7

MAINTAINER      Fisher "fisher@sudops.com"

RUN     /bin/echo 'root:123456' |chpasswd

RUN     useradd runoob

RUN     /bin/echo 'runoob:123456' |chpasswd

RUN     /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local

EXPOSE  22

EXPOSE  80

CMD     /usr/sbin/sshd -D

每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。

第一条FROM,指定使用哪个镜像源

RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。

然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。

runoob@runoob:~$ docker build -t runoob/centos:6.7 .

Sending build context to Docker daemon 17.92 kB

Step 1 : FROM centos:6.7

---> d95b5ca17cc3

Step 2 : MAINTAINER Fisher "fisher@sudops.com"

---> Using cache

---> 0c92299c6f03

Step 3 : RUN /bin/echo 'root:123456' |chpasswd

---> Using cache

---> 0397ce2fbd0a

Step 4 : RUN useradd runoob

......

参数说明:

  • -t :指定要创建的目标镜像名
  • . :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径

使用docker images 查看创建的镜像已经在列表中存在,镜像ID为860c279d2fec

runoob@runoob:~$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE

runoob/centos       6.7                 860c279d2fec        About a minute ago   190.6 MB

runoob/ubuntu       v2                  70bf1840fd7c        17 hours ago         158.5 MB

ubuntu              14.04               90d5884b1ee0        6 days ago           188 MB

php                 5.6                 f40e9e0f10c8        10 days ago          444.8 MB

nginx               latest              6f8d099c3adc        12 days ago          182.7 MB

mysql               5.6                 f2e8d6c772c0        3 weeks ago          324.6 MB

httpd               latest              02ef73cf1bc0        3 weeks ago          194.4 MB

ubuntu              15.10               4e3b13c8a266        5 weeks ago          136.3 MB

hello-world         latest              690ed74de00f        6 months ago         960 B

centos              6.7                 d95b5ca17cc3        6 months ago         190.6 MB

training/webapp     latest              6fae60ef3446        12 months ago        348.8 MB

我们可以使用新的镜像来创建容器

runoob@runoob:~$ docker run -t -i runoob/centos:6.7  /bin/bash

[root@41c28d18b5fb /]# id runoob

uid=500(runoob) gid=500(runoob) groups=500(runoob)

从上面看到新镜像已经包含我们创建的用户runoob


设置镜像标签

我们可以使用 docker tag 命令,为镜像添加一个新的标签。

runoob@runoob:~$ docker tag 860c279d2fec runoob/centos:dev

docker tag 镜像ID,这里是 860c279d2fec ,用户名称、镜像源名(repository name)和新的标签名(tag)。

使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。

runoob@runoob:~$ docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

runoob/centos       6.7                 860c279d2fec        5 hours ago         190.6 MB

runoob/centos       dev                 860c279d2fec        5 hours ago         190.6 MB

runoob/ubuntu       v2                  70bf1840fd7c        22 hours ago        158.5 MB

ubuntu              14.04               90d5884b1ee0        6 days ago          188 MB

php                 5.6                 f40e9e0f10c8        10 days ago         444.8 MB

nginx               latest              6f8d099c3adc        13 days ago         182.7 MB

mysql               5.6                 f2e8d6c772c0        3 weeks ago         324.6 MB

httpd               latest              02ef73cf1bc0        3 weeks ago         194.4 MB

ubuntu              15.10               4e3b13c8a266        5 weeks ago         136.3 MB

hello-world         latest              690ed74de00f        6 months ago        960 B

centos              6.7                 d95b5ca17cc3        6 months ago        190.6 MB

training/webapp     latest              6fae60ef3446        12 months ago       348.8 MB

转载于:https://www.cnblogs.com/guarderming/p/9455738.html

相关文章:

(C++)1018 锤子剪刀布

#include<cstdio>int Map(char c){//将字母映射到数字 if(cB){return 0;}else if(cC){return 1;}else{return 2;} } //对决函数&#xff0c;返回1表示甲胜&#xff0c;0表示平局&#xff0c;-1表示乙胜 int ko(int i1,int i2){if((i11)%3i2){//甲胜 return 1;}else if(i…

我的软考之路(九)——总结篇

经过两个月的备战&#xff0c;软考总算结束了。软考虽然结束了&#xff0c;但是还需要简单的总结一下得与失。我从时间安排&#xff0c;到讲课做真题简单的回顾一下软考的整个过程。 时间安排&#xff1a; 对于时间的安排&#xff0c;整个小组成员每个人都有自己的看法&#xf…

problem-solving-with-algorithms-and-data-structure-usingpython(使用python解决算法和数据结构) -- 基本数据结构(二)...

中缀、前缀和后缀表达式 1. 前缀表达式符号要求所有运算符在它们处理的两个操作数之前。 2. 后缀表达式要求其操作符在相应的操作数之后。 考虑表达式 A B * C &#xff0c; A B C * 是等价的后缀表达式。操作数 A&#xff0c;B 和 C 保持在它们的相对位置&#xff0c;只有操…

赢在中国(08-02-27)

在Google Calendar中设置了赢在中国的日程&#xff0c;结果没有发短信给我&#xff08;是不是可以起诉它呢&#xff1f;和Google打打官司&#xff0c;可是成名的好机会啊&#xff1a;&#xff09;&#xff09;后面一节还是看到了&#xff0c;印象比较深的是最后一位做教育的选手…

(C++)1041 考试座位号

//B1041 #include<cstdio> //直接将试机号作为下标 struct student{long long no;int sit; };int main(){int n1,n2;//总共参与考试的人数&#xff0c;来迟的人数 student stus[1010];scanf("%d",&n1);long long no;int sit,test;for(int i0;i<n1;i){s…

Premiere制作VCD视频几个关键设置

一&#xff0c;视频设置 1&#xff0c;编码设置&#xff1a;不要选cinepak codec by radius,这个编码速度非常慢,图象也不清晰,一般只在电脑多多媒体交互式演示文件中使用。很多朋友遇到的“速度慢”、“不清晰”&#xff0c;多半是这里设置不合适造成。 2&#xff0c;帧尺寸&a…

qt中定时器Timer的使用

转载于:https://www.cnblogs.com/zhouwenJS/p/3762341.html

python基础===拆分字符串,和拼接字符串

给定某字符&#xff0c;只需要保留其中的有效汉字或者字母&#xff0c;数字之类的。去掉特殊符号或者以某种格式进行拆分的时候&#xff0c;就可以采用re.split的方法。例如 RESTART: Shell >>> s Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.19…

(C++)1036 跟奥巴马一起编程

#include<cstdio> //10列 共5行 131 //11列 共6行 141 //n%20 1n/2-21 //n%2!0 1(n-1)/2-11 int main(){int col,mid;char c;scanf("%d %c",&col,&c);//第一行for(int i 0;i<col;i){printf("%c",c);} printf("\n");//中间行/…

使用LINQ进行多表操作(二)

1:M或者M:M关系的多表操作表结构如下直接写表达式 //正常选取var user context.Users.Where(p >p.UserID 10300).Select(p >new{p, p.UserTags})//带条件选取var user context.Users.Where(p >p.UserID 10300).Select(p >new{p, UserTags p.UserTags.Where(o >…

分布式文件系统

PDF格式PPT下载&#xff1a;分布式文件系统 转载于:https://www.cnblogs.com/mfrbuaa/p/3765902.html

Codis 3.2 集群搭建与测试

这里首选分为四个步骤进行一、软件下载codis 3.2.2 https://github.com/CodisLabs/codis/releasescodis-src https://codeload.github.com/CodisLabs/codis/zip/release3.2zeepkeeper 3.5.4 http://ftp.twaren.net/Unix/Web/apache/zookeeper/zookeeper-3.5.4-beta/zookeeper…

(C++)CSP202009-1 称检测点查询

#include<cstdio> #include<cmath> #define MAXSIZE 200//定义结构体 struct sqList{int r[MAXSIZE1][2];int length0; }; //交换 void swap(sqList* sqz,int index1,int index2){int temp sqz->r[index1][1];sqz->r[index1][1]sqz->r[index2][1];sqz-&…

sysbench的安装和做性能测试

sysbench的安装和做性能测试 http://imysql.cn/node/312 sysbench是一个模块化的、跨平台、多线程基准测试工具&#xff0c;主要用于评估测试各种不同系统参数下的数据库负载情况。 关于这个项目的详细介绍请看&#xff1a;http://sysbench.sourceforge.net。 它主要包括以下几…

React文档 state and lifecycle

状态和生命周期 这篇介绍 React 组件中状态和声明周期的概念。详情可以查看API参考 。 思考前一部分中时钟的例子。渲染元素中&#xff0c;我们仅学习了一种更新 UI 的方式。调用 ReactDOM.render() 改变渲染后的输出。 function tick() {const element (<div><h1>…

【讨论】基于WF的流程结构

大家都知道&#xff0c;在WF中默认情况下&#xff0c;其活动是以树状结构组成的&#xff0c;简单说就是复合活动包含其子活动&#xff0c;如果子活动也是复合活动也可以包含其子活动&#xff0c;但同一个活动不能成为两个活动的子活动。这种方式被大量使用在WF自带的活动库中&a…

(C++)设计一个程序能计算一个日期加上若干天后是什么日期and计算日期差值

输入第一行表示样例个数m&#xff0c;接下来m行每行四个整数分别表示年月日和累加的天数。 输出m行&#xff0c;每行按yyyy-mm-dd的个数输出。 #include<cstdio>//判断是否是闰年 bool isLeap(int year){return (year%40&&year%100!0)||year%4000; }//用二维数…

【转载】解决Apache2+PHP上传文件大小限制的问题

原文出处&#xff1a;http://evol1216.blog.163.com/blog/static/13019958020106783623528/ 在用PHP进行文件上传的操作中&#xff0c;需要知道怎么控制上传文件大小的设置&#xff0c;而文件可传大小是受到多种因素制约的&#xff0c;现总结如下&#xff1a; 1、php.ini:uploa…

第36章 网络管理

第36章 网络管理 监听 11g的话首先写配置文件vi /u01/grid/11g/network/admin/listener.ora打开后选取下面的两个部分修改就好了 模板所在地vi /u01/11g/network/admin/samples/listener.ora SID_LIST_LISTENER (SID_LIST (SID_DESC (GLOBAL_DNAMEwyzc11g) (SID_NAMEwyzc11g)…

(C++)CSP202006-2 稀疏向量 two pointers

#include<cstdio>const int M 500000;//a,b<5*10^5 int u[M1][2];//第一维是index,第二维是value int v[M1][2];int main(){//1.读入n,a,b//2.对数组进行遍历&#xff0c;如果第一位相等&#xff0c;将第二维相乘 int n,a,b,i;long long ans0;scanf("%d%d%d&qu…

基于【CentOS-7+ Ambari 2.7.0 + HDP 3.0】搭建HAWQ数据仓库01 —— 准备环境,搭建本地仓库,安装ambari...

一、集群软硬件环境准备&#xff1a; 操作系统&#xff1a; centos 7 x86_64.1804 Ambari版本&#xff1a;2.7.0 HDP版本&#xff1a;3.0.0 HAWQ版本&#xff1a;2.3.05台PC作为工作站&#xff1a; ep-bd01ep-bd02ep-bd03ep-bd04ep-bd05其中ep-bd01作为主节点&#xff0c;用于…

PDF编辑工具——PDF Desktop Converter 4 Professional

管理和操作PDF的工具。PDF Desktop Converter 4 Professional可以生成&#xff0c;转换&#xff0c;提取&#xff0c;组合&#xff0c;分割合并PDF。新增加的OCR功能可以将扫描后的文件转变成可以检索和编辑的PDF。以上这些功能只需要一个软件就可以全部实现。软件特点1. 快速&…

史上世界上最惨烈的几次股灾!

史上世界上最惨烈的几次股灾&#xff01;●最惨烈的几次股灾 1美国股灾 1.1 1929年大股灾 1929年10月24日&#xff0c;星 期四。灾难的发生是毫无征兆的&#xff0c;开盘时&#xff0c;并没有出现什么值得注意的迹象&#xff0c;而且有一段时间股指还非常坚挺&#xff0c;但交易…

(C++) CSP 201803-1 跳一跳

#include<cstdio> const int M 30; int a[M1][2];//第一维用于读入&#xff0c;第二维用于记录上一局得分 int main(){int temp,index0,ans0;scanf("%d",&temp);while(temp!0){a[index][0]temp;if(a[index][0]1){ans1;}else{if(a[index-1][0]2){a[index][…

C#对象数组排序方法

一个排序的类&#xff0c;用了几种方式实现的。 usingSystem; namespaceDataStruct { publicclassSorter { ///<summary>///冒泡排序法1 ///</summary>/*&#xff08;1&#xff09;对于数组list中的1至n个数据&#xff0c;先将第1个和第2个数据进行比…

Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入

原理&#xff1a;http://blog.csdn.net/cpytiger/article/details/8781457 原文地址&#xff1a;http://www.cnblogs.com/wintersun/archive/2011/12/09/2282675.html Cross-Site Request Forgery (CSRF) 是我们Web站点中常见的安全隐患。 下面我们在Asp.net MVC3 来演示一下。…

Windows下安装Redis服务

2019独角兽企业重金招聘Python工程师标准>>> Redis是有名的NoSql数据库&#xff0c;一般Linux都会默认支持。但在Windows环境中&#xff0c;可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法&#xff0c;希望能够帮到你。 1、要安…

(C++)1022 D进制的A+B 除基取余法将10进制数换成给定进制数

#include<cstdio> //除基取余法 const int M 30;int main(){long long a,b,c;int D,ans[M2];scanf("%lld%lld%d",&a,&b,&D);cab;int num0;do{ans[num]c%D;c c/D;}while(c!0);for(int inum-1;i>0;i--){printf("%d",ans[i]);}return…

Linux zip-tar.gz 压缩解压

tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子&#xff1a;把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。zip 压缩方法&#xff1a; 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归zip [参数] [打包后的文件名]…

Spring(ApplicationContextBeanFactory)

BeanFactory 才是 Spring 容器中的顶层接口。ApplicationContext 是它的子接口。 BeanFactory 和 ApplicationContext 的区别&#xff1a;创建对象的时间点不一样。 BeanFactory接口 spring的原始接口,针对原始接口的实现类功能较为单一.BeanFactory接口实现类的容器,特点是每次…