• Docker镜像和容器的使用


    1)掌握Docker镜像的拉取、获取、查找等基本操作。

    2)掌握容器的运行、删除等基本管理。

    3)掌握使用Dockerfile构建自定义镜像。

    所有节点已安装好docker-ce。

    1.镜像的基本管理和使用

    可将Docker镜像看作只读模板,通过它可以创建Docker容器。

    例如,某个镜像可能包含一个Ubuntu操作系统、一个Apache HTTP Server以及用户开发的Web应用。

    镜像有多种生成方法:

    ①可以从无到有开始创建镜像。

    ②可以下载并使用别人创建好的现成的镜像。

    ③可以在现有镜像上创建新的镜像。

    可以将镜像的内容和创建步骤描述在一个文本文件中,这个文件被称作Dockerfile,通过执行docker build <docker-file>命令可以构建出Docker镜像。

    1)查看镜像列表

    使用docker images命令来列出本地主机上的镜像。

     

    各个选项说明:

    l REPOSITORY:表示镜像的仓库源

    l TAG:镜像的标签

    l IMAGE ID:镜像ID

    l CREATED:镜像创建时间

    l SIZE:镜像大小

    同一仓库源可以有多个TAG,代表这个仓库源的不同个版本。例如http仓库源里有 2.2.312.2.32等多个不同的版本,可以使用REPOSITORY:TAG命令来定义不同的镜像。

    使用版本为2.2.31http镜像来运行容器

    使用版本为2.2.32http镜像来运行容器

     

    参数说明:

    l -i:交互式操作。

    l -t:终端。

    l -d:后台运行。

    l httpd:2.2.31:镜像名,使用https:2.2.31镜像为基础来启动容器。

    l /bin/bash:容器交互式Shell

    如果不指定镜像的版本标签,则默认使用latest标签的镜像。

    2)获取镜像

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

    # docker pull [OPTIONS] NAME[:TAG|@DIGEST]

    OPTIONS说明:

    l -a:拉取所有tagged镜像。

    l --disable-content-trust:忽略镜像的校验,默认开启。

    3)查找镜像

    查找镜像一般有两种方式,可以通过Docker Hubhttps://hub.docker.com/)网站来搜索镜像,也可以使用docker search命令来搜索镜

    # docker search [OPTIONS] TERM

    OPTIONS说明:

    l --automated:只列出automated build类型的镜像。

    l --no-trunc:显示完整的镜像描述。

    l --filter=stars:列出收藏数不小于指定值的镜像。

    需要一个httpd镜像作Web服务时,使用docker search命令搜索httpd来寻找适合的镜像

     

    参数说明:

    l NAME:镜像仓库源的名称。

    l DESCRIPTION:镜像的描述。

    l OFFICIAL:是否是Docker官方发布。

    l stars:类似GitHub里面的star,表示点赞、喜欢的意思。

    l AUTOMATED:自动构建。

    4)删除镜像

    镜像删除使用docker rmi命令

    # docker rmi [OPTIONS] IMAGE [IMAGE...]

    OPTIONS说明:

    l -f:强制删除。

    l --no-prune:不移除该镜像的过程镜像,默认移除。

    强制删除本地镜像busybox

    2.容器的基本管理和使用

    容器是一种轻量级的、可移植的、自包含的软件打包技术,使应用程序几乎可以在任何地方以相同的方式运行。开发人员在自己笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、物理服务器或公有云主机上运行。

    容器由应用程序本身和依赖两部分组成。容器在宿主机操作系统的用户空间中运行,与操作系统的其他进程隔离。这一点显著区别于的虚拟机。

    传统的虚拟化技术,比如VMWareKVMXen,目标是创建完整的虚拟机。为了运行应用,除了部署应用本身及其依赖(通常几十MB),还得安装整个操作系统(几十GB)。

    容器使软件具备了超强的可移植能力。

    1)运行容器

    运行第一个容器

     

    参数说明:

    l -i:交互式操作。

    l -t:终端。

    l -rm:容器退出后随之将其删除,可以避免浪费空间。

    l -p:端口映射。

    l -d:容器在后台运行。

    其过程可以简单的描述为:

    ①下载Nginx镜像。

    ②启动容器,并将容器的80端口映射到宿主机的80端口。

    当使用docker run来创建容器时,Docker在后台运行的标准流程如下:

    ①检查本地是否存在指定的镜像,不存在就从公有仓库下载。

    ②利用镜像创建并启动一个容器。

    ③分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。

    ④从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。

    ⑤从地址池配置一个IP地址给容器。

    ⑥执行用户指定的应用程序。

    接下来可以通过浏览器验证容器是否正常工作。在浏览器中输入地址http://172.16.51.35

     

    启动容器

    # docker start [CONTAINER ID]

    启动所有的Docker容器

     

    2)操作容器

    列出运行中的容器。

    # docker ps

    # docker container ls

     

    列出所有容器(包含终止状态)。

    查看具体容器的信息。

    # docker inspect [container ID or NAMES]

    查看容器的使用资源状况。

    # docker stats [container ID or NAMES]

    查看容器日志。

    # docker logs [OPTIONS] [container ID or NAMES]

    OPTIONS说明

    l --details:显示更多的信息。

    l -f,--follow:跟踪实时日志。

    l --sincestring:显示自某个timestamp之后的日志,或相对时间,如42分钟。

    l --tailstring:从日志末尾显示多少行日志,默认是all

    l -t,--timestamps:显示时间戳。

    l --until string:显示自某个timestamp之前的日志,或相对时间,如42分钟。

    进入容器。

    # docker exec -it [CONTAINER ID] bash

    进入容器后,输入exit或者按Crtl+C键即可退出容器

     

    3)终止容器

    删除终止状态的容器。

    # docker rm [CONTAINER ID]

    删除所有处于终止状态的容器。

    # docker container prune

    删除未被使用的数据卷。

    # docker volume prune

    删除运行中的容器。

    # docker rm -f [CONTAINER ID]

    批量停止所有的容器。

    # docker stop $(docker ps -aq)

    批量删除所有的容器。

    # docker rm $(docker ps -aq)

    终止容器进程,容器进入终止状态。

    # docker container stop [CONTAINER ID]

    (4)导入/导出容器

    将容器快照导出为本地文件

    # docker export [CONTAINER ID] > [tar file]

    同样的,也可以把容器快照文件再导入为镜像,

    # cat [tar file] | docker import - [name:tag]

     

    使用docker import命令导入一个容器快照到本地镜像库时,将丢弃所有的历史记录和元数据信息,即仅保存容器当时的快照状态。

    3.构建自定义镜像

    Docker Hub提供了很多镜像,但在实际工作中,Docker Hub中的镜像并不能满足工作的需要,往往需要构建自定义镜像。构建自定义镜像主要有两种方式:docker commitDockerfile

    可以将docker commit视为在以往版本控制系统里提交变更,然后进行变更的提交即可。docker commitdocker exportdocker add类似都可以输出image,但是最好的生成image的方法还是使用Dockerfile

    Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大地简化了部署工作。DockerfileFROM命令开始,紧接着跟随各种方法、命令和参数,其产出为一个新的可以用于创建容器的镜像。

    1docker commit

    docker commit命令用于从容器创建一个新的镜像

    # docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

    OPTIONS说明:

    l -a:提交的镜像作者。

    l -c:使用Dockerfile指令来创建镜像。

    l -m:提交时的说明文字。

    l -p:在commit时,将容器暂停。

    查看已有的容器,将容器ee84ee51a2e2保存为新的镜像,并添加提交人信息和说明信息

     

    使用docker commit命令构建的镜像,除了制定镜像的人知道执行过什么命令,怎么生成的镜像,别人根本无从得知。建议使用Dockerfile来制作镜像,镜像的生成过程是透明的, docker commit可用于被入侵后保存现场等操作。

    2Dockerfile

    Dockerfile是一个文本文档,其中包含了组合映像的命令,可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。

    docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile

    # docker build -f /path/to/a/Dockerfile

    Dockerfile一般分为4部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,“#”为Dockerfile中的注释。

    Dockerfile主要指令如下:

    l FROM:指定基础镜像,必须为第一个命令。

    l MAINTAINER:维护者信息。

    l RUN:构建镜像时执行的命令。

    l ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget

    l COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源。

    l CMD:构建容器后调用,也就是在容器启动时才进行调用。

    l ENTRYPOINT:配置容器,使其可执行化。配合CMD可省去“application”,只使用参数。

    l LABEL:用于为镜像添加元数据。

    l ENV:设置环境变量。

    l EXPOSE:指定与外界交互的端口。

    l VOLUME:用于指定持久化目录。

    l WORKDIR:工作目录,类似于cd命令。

    l USER:指定运行容器时的用户名或UID,后续的RUN也会使用指定用户。使用USER指定用户时,可以使用用户名、UIDGID,或是两者的组合。当服务不需要管理员权限时,可通过该命令指定运行用户。

    l ARG:用于指定传递给构建运行时的变量。

    l ONBUILD:用于设置镜像触发器。

    接下来以centos:latest为基础镜像,安装jdk1.8并构建新的镜像centos-jdk

    新建文件夹用于存放JDK安装包和Dockerfile文件

    [root@master ~]# mkdir centos-jdk

    [root@localhost ~]# mv jdk/jdk-8u141-linux-x64.tar.gz ./centos-jdk/

    [root@master ~]# cd centos-jdk/

    编写Dockerfile。

    [root@master centos-jdk]# cat Dockerfile

    # CentOS with JDK 8

    # Author   Guo

    # 指定基础镜像

    FROM centos

    # 指定作者

    MAINTAINER Guo

    # 新建文件夹用于存放jdk文件

    RUN mkdir /usr/local/java

    # JDK文件复制到镜像内并自动解压

    ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/

    # 创建软链接

    RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk

    # 设置环境变量

    ENV JAVA_HOME /usr/local/java/jdk

    ENV JRE_HOME ${JAVA_HOME}/jre

    ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib

    ENV PATH ${JAVA_HOME}/bin:$PATH

    使用docker build命令构建新镜像

     

    查看构建的新镜像。

     

    使用新构建的镜像运行容器验证JDK是否安装成功。

     

  • 相关阅读:
    依赖注入模式与反模式
    WPF异常——某个ItemsControl与它的项源不一致
    C# 3进化的数据访问之智能的编译器
    C# 2的重大改进之可空类型
    C# 1之外:构建于坚实基础上的新特性
    C# 1的核心基础之二——类型系统
    C# 1的核心基础之一——委托
    C#进化史
    单一职责原则
    HBase简介
  • 原文地址:https://www.cnblogs.com/lzp123/p/13769768.html
Copyright © 2020-2023  润新知