热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

docker的安装和镜像

一、docker的安装:第一种:yum-yinstalldockersystemctlstartdocker.servicesystemctlstatusdocker第二种:安装包

一、docker的 安装 :

第一种:

yum -y install docker

systemctl start docker.service

systemctl status docker

第二种:安装包安装

[root@localhost ~]# ls

docker 的安装和镜像

[root@localhost ~]# tar xzf docker.tar.gz

docker 的安装和镜像

[root@localhost ~]# cd docker/

docker 的安装和镜像

[root@localhost docker]# sh docker.sh

docker 的安装和镜像

[root@localhost ~]# docker --version

docker 的安装和镜像

ce表示免费版本

[root@localhost ~]# docker ps

docker 的安装和镜像

安装成功

二、docker镜像

镜像(docker image) --- Docker 运行容器之前需要本地存在镜像,若本能地不存在,那么 Docker 会找默认镜像仓库( Docker Hub 公共注册服务器中的仓科)下载,用户也可以通过配置使用自己的镜像库

(1)下载镜像

#docker pull NAME:TAG

下载某个被打上了某个标签的叫 ×× 名字的镜像

eg:

docker pull ubuntu:latest

若在下载时你未指定标签,默认追加 latest标签,表示库中最新镜像

镜像在下载过程中是分层的,并且在每层前会有各层的 ID号,层(Layer )是 AUFS (联合文件系统)的重要概念,是实现增量保存与更新的基础

实际上面的命令的原型是

#docker pull registry.hub.docker.com/centos:7

即从默认的注册服务器下载指定的镜像当然,以此你也可以用这种格式到其他仓库下载你所需要的镜像了!!!

(2)查看本地镜像相关信息

[root@localhost ~]# docker images

docker 的安装和镜像

显示结果:

#docker tag docker.io/ubuntu:latest ubuntu:latest

a.源自哪个仓库

b.标签信息 ---用于区分同一个仓库的同名镜像可用 docker tag仓库名:

标签名 新库名:新标签

c. 镜像 ID

d. 创建时间

e. 镜像大小

改名:给对应的镜像新添加了一个名字,使用该名字调用的还是原来的那个镜像

docker 的安装和镜像

[root@localhost ~]# docker tag ppc64le/busybox:latest aaabusybox:v1

docker 的安装和镜像

删除起的别名

[root@localhost ~]# docker rmi aaabusybox:v1

(3)搜索库中满足需求的镜像,以此下载符合需求的镜像文件

#docker search 镜像名

显示结果:

a.哪个库

b.绝对路径,库中的带有搜索关键字的镜像

c.描述

d.官方

e.是否自动创建

(4)删除本地镜像

#docker rmi imageID号 # 要删除的镜像对应的imageID号

eg:

docker rmi ubuntu: latest

当有别名镜像时,是同一个ID 号多个名字,删除任一个对互相无伤害,直至删除最后一个,镜像被彻底删除用ID号删除,默认会删除同一个ID的多个镜像,除非该镜像创建的容器存在,那么镜像能够不被删除,所以在删除时正确顺序是先删除使用镜像的容器,再删除镜像

三、docker镜像分层 :

docker镜像的分层结构:支持通过扩展现有镜像,创建新的镜像

docker 的安装和镜像

可以看到,新镜像是从 base 镜像一层一层叠加生成的。每安装一个软件,就在现有镜像的基础上增加一层。

分层结构的优势:

共享资源:

有多个镜像都从相同的 base 镜像构建而来,那么 Docker Host 只需在磁盘上保存一份 base 镜像;同时内存中也只需加载一份 base 镜像,就可以为所有容器服务了。而且镜像的每一层都可以被共享,我们将在后面更深入地讨论这个特性。

这时可能就有人会问了:如果多个容器共享一份基础镜像,当某个容器修改了基础镜像的内容,比如 /etc 下的文件,这时其他容器的 /etc 是否也会被修改?

答案是不会!

修改会被限制在单个容器内。

这就是我们接下来要学习的容器 Copy-on-Write 特性。

可写的容器层:

docker 的安装和镜像

当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作“容器层”,“容器层”之下的都叫“镜像层”。

所有对容器的改动 - 无论添加、删除、还是修改文件都只会发生在容器层中。

只有容器层是可写的,容器层下面的所有镜像层都是只读的。

镜像层数量可能会很多,所有镜像层会联合在一起组成一个统一的文件系统。如果不同层中有一个相同路径的文件,比如 /a,上层的 /a 会覆盖下层的 /a,也就是说用户只能访问到上层中的文件 /a。在容器层中,用户看到的是一个叠加之后的文件系统。

添加文件

在容器中创建文件时,新文件被添加到容器层中。

读取文件

在容器中读取某个文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,打开并读入内存。

修改文件

在容器中修改已存在的文件时,Docker 会从上往下依次在各镜像层中查找此文件。一旦找到,立即将其复制到容器层,然后修改之。

删除文件

在容器中删除文件时,Docker 也是从上往下依次在镜像层中查找此文件。找到后,会在容器层中记录下此删除操作。

只有当需要修改时才复制一份数据,这种特性被称作 Copy-on-Write。可见,容器层保存的是镜像变化的部分,不会对镜像本身进行任何修改。

这样就解释了我们前面提出的问题:容器层记录对镜像的修改,所有镜像层都是只读的,不会被容器修改,所以镜像可以被多个容器共享。

四、docker镜像创建

创建镜像的三种方法

(1)基于修改后的容器创建:docker commit 命令

(2)基于本地模板导入

(3)基于 Dockerfile 文件创建

(1)基于修改后的容器创建

docker 的安装和镜像

[root@localhost ~]# docker run -it mariadb:latest /bin/sh #/bin/sh是环境变量

docker 的安装和镜像

此时容器较镜像已经发生改变,我们以此生成新镜像

[root@localhost ~]# docker ps -a #查看当前环境已有的容器

docker 的安装和镜像

[root@localhost ~]# docker commit 5ea060bff8c9 test:latest # CONTAINER ID 新镜像名字

docker 的安装和镜像

[root@localhost ~]# docker images

docker 的安装和镜像

查看镜像列表,本地多了一个创建的新镜像

[root@localhost ~]# docker run -it --name jxtest test:latest /bin/sh #新创建的容器名为jxtest

docker 的安装和镜像

这个新容器有新创建的文件

[root@localhost ~]# docker ps -a

docker 的安装和镜像

新容器创建成功

删除容器

[root@localhost ~]# docker rm cc01fb82e45e # 要删除容器的CONTAINER ID

将所有容器删除

for id in `docker ps -a | grep Exited | awk '{print $1}'`;do docker rm $id;done

(2)基于模板导出和导入镜像

导出:将镜像保存为本地文件,以cturra/ntp为例

docker 的安装和镜像

[root@localhost ~]# docker save -o ntp.tar.gz cturra/ntp:latest

docker 的安装和镜像

[root@localhost ~]# docker rmi c35549b258c5 #删除cturra/ntp

导入 :将压缩包文件导入到本地镜像列表

[root@localhost ~]# docker load -i ntp.tar.gz

docker 的安装和镜像

镜像导入成功。

(3)基于 Dockerfile 文件创建

dockerfile 是一个文本文件,用来配置 image,记录了镜像构建的所有步骤。Docker 根据 该文件生成二进制的 image 文件。如何可以生成 image 文件?如果你要推广自己的软件,势必要自己制作 image 文件。

[root@localhost ~]# mkdir test

[root@localhost ~]# cd test/

[root@localhost test]# vim dockerfile

FROM test:latest

RUN yum install lrzsz -y

[root@localhost test]# docker build -t test:latest .

build:创建镜像

-t:为镜像指定名字

.:指明 build context 为当前目录,我们也可以通过 -f 参数指定 Dockerfile 的位置

docker 的安装和镜像

从这步开始就是镜像真正的构建过程。 首先 Docker 将 build context 中的所有文件发送给 Docker daemon。build context 为镜像构建提供所需要的文件或目录。Dockerfile 中的 ADD、COPY 等命令可以将 build context 中的文件添加到镜像。此例中,build context 为当前目录 /root/docker,该目录下的所有文件和子目录都会被发送给 Docker daemon。

所以,使用 build context 就得小心了,不要将多余文件放到 build context,特别不要把 /、/usr 作为 build context,否则构建过程会相当缓慢甚至失败。

[root@localhost ~]# docker history IMAGE ID #镜像的ID

docker 的安装和镜像

Docker 会缓存已有镜像的镜像层,构建新镜像时,如果某镜像层已经存在,就直接使用,无需重新创建。在前面的 Dockerfile 中添加一点新内容,往镜像中复制一个文件:

五、dockerfile的常用命令

FROM:指定 base 镜像。

MAINTAINER:设置镜像的作者,可以是任意字符串。

COPY:将文件从 build context 复制到镜像。

COPY 支持两种形式:

COPY src dest

COPY ["src", "dest"]

注意:src 只能指定 build context 中的文件或目录。

ADD:与 COPY 类似,从 build context 复制文件到镜像。不同的是,如果 src 是归档文件(tar, zip, tgz, xz 等),文件会被自动解压到 dest。

ENV:设置环境变量,环境变量可被后面的指令使用。例如:ENV MY_VERSION 1.3

RUN apt-get install -y mypackage=$MY_VERSION

EXPOSE:指定容器中的进程会监听某个端口,Docker 可以将该端口暴露出来。我们会在容器网络部分详细讨论。

VOLUME:将文件或目录声明为 volume。

WORKDIR:为后面的 RUN, CMD, ENTRYPOINT, ADD 或 COPY 指令设置镜像中的当前工作目录。

RUN:在容器中运行指定的命令,RUN 指令通常用于安装应用和软件包。

CMD:容器启动时运行指定的命令。

Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效。CMD 可以被 docker run 之后的参数替换。

ENTRYPOINT:设置容器启动时运行的命令,可让容器以应用程序或者服务的形式运行。

Dockerfile 中可以有多个 ENTRYPOINT 指令,但只有最后一个生效。CMD 或 docker run 之后的参数会被当做参数传递给 ENTRYPOINT。

六、docker常用命令

(1)创建容器,create命令是创建并不启动容器

#docker creat -it centos:7

(2)查看所有状态的容器

#docker ps -a 查看所有容器

#docker ps 查看所有已经开启的容器

(3)启动停止的容器

#docker start ID

(4)运行一个容器

#docker run -it docker.io/centos:7 /bin/bash

创建并运行一个容器 ,此时你会直接被切换到容器中

#ctrl+d//exit退出,并且容器也退出

#ctrl+p+q退出容器,并且保持容器up的状态

-t 分配一个伪终端

-i 让容器的标准输入持续打开

用/bin/bash环境显示

(5)以后台守护进程(Daemonized)形态运行 用-d参数实现

#docker run -dti docker.io/centos:7

#docker ps -a

(6)终止容器

#docker stop NAME/ID #docker kill NAME/ID

#docker ps -a

(7)重启容器

#docker restart NAME/ID

#docker ps -a

需要注意,非持久后台守护状态的虚拟机,在重启后当你查看时还是关闭状态

(8)删除容器

语法: docker rm 参数 NAME NAME …

#docker -rm -f NAME/ID

-f 强制删除处于运行中的容器

-l 删除链接,保留容器

-v 删除挂载的数据卷

(9)进入容器

docker attach 和 docker exec 两种方式:

docker attach直接进入容器 启动命令的终端,不会启动新的进程

#docker run -d centos /bin/bash -c while true; do sleep 1;echo I_am_docker;done”

#docker attach NAME/ID

docker exec则是在容器中打开新的终端,并且可以启动新的进程

#docker exec -it NAME/ID /bin/bash

(10)导入和导出容器

a. 导出容器:导出一个已经创建的容器到文件,不管容器是否运行

#docker ps -a

假设当前系统中有两个处于运行和停止状态的容器

#docker export ID > *.tar

#ls

b.将容器导入系统成为镜像

#cat *.tar | docker import - 镜像名

(11)查看容器日志

显示容器启动进程的控制台输出

#docker logs -f 容器的CONTAINER ID

(12)暂停容器

#docker pause NAME/ID

(13)取消暂停继续运行容器

#docker unpause NAME/ID

下面是容器的常用操作命令:

docker 的安装和镜像


推荐阅读
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • CentOS 6.5安装VMware Tools及共享文件夹显示问题解决方法
    本文介绍了在CentOS 6.5上安装VMware Tools及解决共享文件夹显示问题的方法。包括清空CD/DVD使用的ISO镜像文件、创建挂载目录、改变光驱设备的读写权限等步骤。最后给出了拷贝解压VMware Tools的操作。 ... [详细]
  • 在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板
    本文介绍了在Xamarin XAML语言中如何在页面级别构建ControlTemplate控件模板的方法和步骤,包括将ResourceDictionary添加到页面中以及在ResourceDictionary中实现模板的构建。通过本文的阅读,读者可以了解到在Xamarin XAML语言中构建控件模板的具体操作步骤和语法形式。 ... [详细]
author-avatar
mobiledu2502913277
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有