zoukankan      html  css  js  c++  java
  • Docker 镜像、容器、仓库

    Docker的一些概念

    • docker image   docker镜像

    即容器模板,操作系统+软件运⾏环境+⽤户程序

    类似于安装操作系统的windows镜像、centos镜像,只是一个模板

    • Docker container   docker容器

    容器是从镜像运行的实例,比如用tomcat镜像运行tomcat,就得到一个tomcat容器

    容器,是应用程序的容器,tomcat容器是运行tomcat的,mysql容器是运行mysql的,微服务的容器是运行某个微服务的

    一个镜像可运行多个容器(实例),好比一个类可以new多个对象,这个容器是相互隔离的,互不影响。

    • Docker registerie  docker仓库

    ⽤于存储镜像,分为公有仓库、私有仓库,好⽐Maven的中央仓库和本地仓库。

    docker的公有仓库在国外,访问速度慢,需要我们配置一下国内的镜像,常用的镜像加速器比如阿里云、网易的

    配置阿里云的镜像加速器

    登录阿里云,搜索容器镜像服务 -> 找到镜像加速器 -> centos,把那一串命令复制到centos上执行即可

    每个人分配的加速器地址不同,需要登录阿里云才会分配加速器地址。


    启动、停止Docker

    启动docker:systemctl start docker

    停止docker:systemctl stop docker

    重新加载docker的配置:systemctl daemon-reload

    重启docker:systemctl restart docker


    image  镜像常用命令

    在公有仓库中搜索镜像:docker search tomcat

    此处是搜索tomcat的镜像,会列出相关的所有镜像,包括官方的、组织机构、个人上传的

    只列出官方的镜像:docker search --filter is-official=true tomcat

    只列出star数>=10的镜像:docker search --filter stars=10 tomcat

    下载|拉取镜像:docker pull tomcat:9

    冒号后面指定版本,如果不指定,默认下载公有仓库中的最新版latest,下载到本地仓库

    docker镜像的体积很大,往往几百兆、几个G,因为镜像不仅包含应用程序,还包含了所需的环境、依赖。

    查看本地仓库中的镜像:docker images

    第一列是镜像名称,第二列tag是镜像的版本号,最新版不会显示具体的版本号,会显示为latest

    删除本地仓库中的镜像:docker rmi tomcat:9   #删除tomcat:9这个镜像,rmi即remove image


    container  容器常用命令

    从镜像运行一个容器:docker run -itd --name=tomcat1 tomcat:9    

    -it:都要有,以交互方式运行容器,分配命令行等交互资源

    -d:以守护线程的方式在后台运行,比如不使用-d,运行后当前标签页不可用,需重起一个标签页执行命令,如果关闭当前标签页或在当前标签页中Ctrl+C,都会终止该容器的运行。

    --name:指定容器的name,如果不使用--name,会自动化分配一个name

    如果不指定镜像的版本号,默认使用最新版latest,如果本地仓库没有最新版,会自动从公有仓库拉取

    -d会返回容器id,很长,往往只取一部分。id、name都唯一标识一个容器

    启动容器:docker start id|name

    停止:docker stop id|name

    重启:docker restart id|name

    docker run是创建并运行容器,docker start是运行一个已存在的容器

    有些容器在docker run创建运行时,需要设置参数,比如msyql就需要设置数据库密码,如果不设置参数,会创建但启动失败

    容器的环境都是打包好的,环境没有问题,如果使用docker run或docker start启动失败,说明没有设置某些参数

    查看正在运行的所有容器:docker ps    #第一列id就只列出了id的一部分,这一部分也可以唯一标识一个容器

    查看所有容器:docker ps -a    #a即all,正在运行+停止

    状态一栏,Up表示该容器正在运行,Exited表示该容器处于停止状态,时间是停止|启动了多久

    查看容器的详细信息:docker inspect id|name

    重命名容器:docker rename id|name  newName

    删除容器:docker rm id|name   #容器要是已停止的才能删除。rm是删除容器,rmi是删除镜像,i是images

    强制删除容器:docker rm -f id|name    #如果容器正在运行,也能删除

    进入容器:docker exec -it id|name /bin/bash

    一个容器就是一个虚拟机,进入容器相当于进入一个Linux服务器,照样可以执行linux命令,可以修改容器配置、程序参数

    该容器处于运行状态才能进入

    exit   #退出容器,只是退出该容器的命令行,该容器仍在运行

    批量操作容器:

    那些根据id|name操作单个容器的命令,都可以同时操作多个容器,

    eg.  docker start id1|name1 id2|name2    #启动多个容器,空格间隔

    可以用 $(docker ps -aq) 表示所有容器的id|name(正在运行+已停止)

    eg. docker start $(docker ps -aq)   #启动所有容器


    容器、宿主机之间的文件复制

    从宿主机复制到容器:docker  cp  srcPath  id|name:distPath

    从容器复制到宿主机:docker  cp  id|name:srcPath  distPath

    eg. 假设容器的name是tomcat1

    docker cp /root/1.txt  tomcat1:/usr/local/   #把宿主机上的/root/1.txt复制到tomcat1的/usr/local/下

    docker cp tomcat1:/usr/local/1.txt  /root/2.txt   #把容器tomcat1中的/usr/local/1.txt复制到宿主机的/root/下,文件名使用2.txt

    注意:

    docker cp这个命令是在宿主机上执行的,宿主机安装了docker,才可以执行docker命令

    不是在docker exec进入容器执行的,容器没有安装docke,不能执行docker命令

    宿主机上的文件路径可以写相对路径或者绝对路径,不知道当前路径的可以用pwd命令查看


    容器挂载

    一个容器是运行在一个单独的虚拟的Linux上,每个容器都对应一个单独的Linux,

    应用安装在这个Linux的/usr/local/下,比如tomcat安装位置是与之对应的Linux的/usr/local/tomcat

    容器使用的文件系统是与之对应的Linux的文件系统,不是宿主机的文件系统,在宿主机上看不到容器对应的Linux上的文件。

    宿主机、容器文件系统的隔离造成了一个问题:如果容器故障,容器的数据全部丢失

    容器挂载是使用宿主机的某个文件夹作为容器文件系统的某个目录,宿主机、容器都可以访问、操作这个目录,这个目录在宿主机、容器中的状态、数据是一致的

    比如说把容器tomcat3挂载到宿主机的/usr/local/tomcat3:

    mkdir  /usr/local/tomcat3   #在宿主机上新建一个目录用于挂载容器

    docker  run  -itd  -v  /usr/local/tomcat:/usr/local/tomcat/webapps  --name=tomcat3  tomcat:9     #前面是宿主机的path,后面是容器的path,会把宿主机的path映射为容器的指定path

     以后在tomcat上部署项目时,直接把项目放在宿主机的/usr/local/tomcat下即可,这个目录就是容器的tomcat的webapps目录

    如果容器故障,这个目录还在,重新挂载一个tomcat容器即可,不需要重新部署项目

    容器挂载的优点

    • 操作简便,不用进入容器操作文件、目录,直接在宿主机就可以操作
    • 数据安全,可以映射为重要数据的存储目录,比如作为redis的数据存储目录,容器故障,目录还在,数据还在,不会丢失

    容器挂载十分常用


    Docker镜像层、容器层

    镜像是一个只读模板,docker run创建容器时都是从镜像中读取数据,放到内存中,每个容器占据单独的内存空间。

    镜像中的数据只读,容器中的数据可读可写。

  • 相关阅读:
    [No0000CA]什么是“普瑞马法则”?以及 如何利用“普瑞马法则”,三步克服惰性
    [No0000B9]C# 类型基础 值类型和引用类型 及其 对象复制 浅度复制vs深度复制 深入研究2
    [No0000B8]WPF或Winform调用系统Console控制台显示信息
    [No0000B7]If else 与 三元表达式? : 效率对比
    [No0000B5]C# 类型基础 值类型和引用类型 及其 对象判等 深入研究1
    [No0000B4].Net中String是引用类型还是值类型,答string是特殊的引用类型
    [No0000B6]C#中 ==与equals的区别
    [No0000B3].NET C# 单体模式(Singleton)
    [No0000AF]去除wpf窗口标题栏ICON
    [No000090]C#捕获控制台(console)关闭事件及响应cmd快捷键
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/12823163.html
Copyright © 2011-2022 走看看