• docker从入门到入土


    docker到底是什么?

    • docker是世界领先的软件容器平台,基于GO语言进行开发实现
    • docker能够自动执行重复性任务,例如搭建和配置开发环境,从而解放开发人员
    • 用户可以方便地创建和使用容器,把自己的应用放入容器,容器还可以进行版本管理,复制,分享,修改,就像管理普通的代码一样
    • docker可以对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器

    为什么要使用docker

    docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的linux机器上,也可以实现虚拟化

    容器是完全使用沙箱机制,相互之间不会有任何接口,更重要的是容器性能开销低

    传统的开发流程中,我们的项目通常需要使用Mysql,Redis等环境,这些环境都是需要我们手动去进行下载并配置的,安装配置流程极其复杂,而且不同操作下的操作也不一样。

    docker的出现完美地解决了这一问题,我们可以在容器中安装mysql。redis等软件环境,使得应用和环境架构分开,它的优势在于:

    1. 一致的运行环境,能够更轻松地迁移
    2. 对进程进行封装隔离,容器与容器之间互不影响,更高效地利用系统资源
    3. 可以通过镜像复制多个一致的容器
    4. 更快速的启动时间
    5. 一致的运行环境
    6. 持续交付和部署

    linux中安装docker centos7 为例

    curl -fsSL get.docker.com -o get-docker.sh
    sh get-docker.sh --mirror Aliyun
    
    • 1
    • 2

    安装完成后直接启动服务:

    systemctl start docker
    
    • 1

    推荐设置开机自启,执行指令 :

    systemtl enable docker
    
    • 1

    Docker中的几个概念

    镜像

    镜像就是一个只读模版,镜像可以用来创建docker容器,一个镜像可以创建多个容器

    容器

    容器是用镜像创建的运行实例,Docker利用容器独立运行一个或一组应用。它可以被启动,开始,停止,删除,每个容器都是相互隔离的,保证安全的平台。可以把容器看作是一个简易的linux环境和运行在其中的应用程序,容器的定义和镜像几乎一模一样。也是一堆层的统一视角。唯一区别在于容器的最上面那一层是可读可写的

    仓库

    仓库是集中存放镜像文件的场所。仓库和仓库注册服务器是有去别的,仓库注册服务器上往往放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签。仓库分为公开仓库和私有仓库两种,最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载,国内的公开仓库有阿里云,网易云等

    总结

    一个镜像代表一个软件;而基于某个镜像运行就是生成一个程序实例,这个程序实例就是容器;而仓库是用来存储Docker中所有镜像的

    其中仓库又分为远程仓库和本地仓库,第一次访问依赖时,将其下载到本地仓库,第二次,第三次使用时直接用本地仓库的依赖即可

    Docker初体验

    可以去访问DockerHubhttps://hub.docker.com/open in new window

    搜索想要下载的镜像,找到下载的指令

    例如mysql的指令:

    docker pull MySQL
    
    • 1

    该指令会下载MySQL镜像的最新版本

    docker镜像指令

    查看docker中当前拥有哪些镜像:

    docker images
    
    • 1

    查询指定镜像名:

    docker images MySQL 
    
    • 1

    -q表示仅显示镜像的id:

    docker images -q
    
    • 1

    下载镜像使用:

    docker pull MySQL:5.7
    
    • 1

    未指定则下载最新的

    删除镜像使用指令 :

    docker images rm MySQL 
    
    • 1

    还可以通过指定镜像id进行删除。

    在删除之前应该先让容器停止

    也可以进行强制执行删除

    docker iamges rm -f id 
    
    • 1

    该指令会将镜像和通过该镜像执行的容器全部删除,谨慎使用

    docker容器指令

    容器是基于镜像的

    若需要通过镜像运行一个容器,则使用:

    docker run tomcat:8.0-jre8
    
    • 1

    如果没有这个镜像

    所有就先去下载一个镜像

    docker pull tomcat:8.0-jre8
    
    • 1

    下载完成之后就可以运行了,运行后查看一下当前运行的容器:docker ps

    通过该方式运行的tomcat是不能直接被外部访问的,因为容器具有隔离性,若是想直接通过8080端口访问容器内部的tomcat,则需要对宿主机端口与容器内的端口进行映射:

    docker run -p 8080:8080 tomcat:8.0-jre8
    
    • 1

    解释一下这两个端口的作用(8080:8080),第一个8080为宿主机端口,第二个8080为容器内的端口,外部访问8080端口就会通过映射访问容器内的8080端口。

    此时外部就可以访问Tomcat了:

    若是这样进行映射:

    docker run -p 8088:8080 tomcat:8.0-jre8
    
    • 1

    则外部需访问8088端口才能访问tomcat,需要注意的是,每次运行的容器都是相互独立的,所以同时运行多个tomcat容器并不会产生端口的冲突。

    容器还能够以后台的方式运行,这样就不会占用终端:

    docker run -d -p 8080:8080 tomcat:8.0-jre8
    
    • 1

    启动容器时默认会给容器一个名称,但这个名称其实是可以设置的,使用指令:

    docker run -d -p 8080:8080 --name tomcat01 tomcat:8.0-jre8
    
    • 1

    此时的容器名称即为tomcat01,容器名称必须是唯一的

    该参数会将运行和非运行的容器全部列举出来:

    docker ps -a
    
    • 1

    接下来是容器的开始,停止,重启指令,因为非常简单,

    docker start xxx
    docker restart xxx
    docker stop xxx
    docker kill xxx
    docker rm xxx
    docker rm -f xxx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    查看容器的日志

    docker logs xxx
    
    • 1

    查看实时的日志

    docker logs -f xxx
    
    • 1

    通过-t参数还能够显示日志的时间戳,通常与-f参数联合使用

    docker logs -ft xxx
    
    • 1

    查看容器内运行了哪些进程可以使用指令:

    docker top xxx
    
    • 1

    若想与容器进行交互,则使用指令:

    docker exec -it xxx bash
    
    • 1

    此时终端将会进入容器内部,执行的指令都将在容器中生效

    若退出则使用exit

    下面将介绍如何在容器中部署一个项目

    docker cp ./test.html xxx:/usr/local/tomcat/webapps
    
    • 1

    通过docker cp 指令能够将文件从Centos复制到容器中,./test.html为centos中的资源路径,xxx为容器id,/usr/local/tomcat/webapps 为容器的资源路径,此时test.html文件将会被复制到该路径下

    docker exec -it xxx bash
    cd webapps
    ls
    
    • 1
    • 2
    • 3

    若是想见容器内的文件复制到centos中,则反过来写即可

    docker cp xxx:usr/local/tomcat/webapps/test.html./
    
    • 1

    所以现在若是想要部署项目,则先将项目上传到centos,然后将项目从centos复制到容器内,此时启动容器即可

    看似使用docker中启动软件环境非常简单,但是同时也面临着一个问题,我们无法知晓容器内部具体细节,比如监听的端口,绑定的ip地址等

    我们可以使用

    docker inspect xxx
    
    • 1

    docker数据卷

    学习了容器的相关指令之后,我们来学习一下docker中的数据卷,它能够实现宿主机与容器之间的文件共享,它的好处在于我们对宿主机的文件进行修改将直接影响容器,而无需再将宿主机的文件再复制到容器中

    若是想将宿主机中/opt/apps目录与容器中webapps目录做一个数据卷,则应该这样编写指令:

    docker run -d -p 8080:8080 --name tomcat01 -v /opt/apps:/usr/local/tomcat/webapps tomcat:8.0-jre8
    
    • 1

    若此时发现无法访问,这就说明我们的设置成功了。docker会将容器内的webapps目录与/opt/apps目录进行同步,而此时/opt/apps目录是空的,导致webapps目录也会变成空目录,所以无法访问

    此时我们只需要向/opt/apps目录下添加文件,就会使得webapps目录也会拥有相同的文件,达到文件共享。

    这种方式设置的数据卷称为自定义数据卷,因为数据卷的目录是我们自己设置的

    docker还为我们提供了另一种设置数据卷的方式 :

    docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat:8.0-jre8
    
    • 1

    此时的aa并不是数据卷的目录而是数据卷的别名,docker会自动为我们创建一个名为aa的数据卷,并且会将容器内webapps目录下所有的内容复制到数据卷中,该数据卷的位置在/var/lib/docker/volumes目录下:

    此时我们只需要修改该目录的内用就能够影响到容器

    最后再介绍几个容器和镜像相关的指令:

    docker commit -m '描述信息' -a '镜像作者' tomcat01 my_tomcat:1.0
    
    • 1

    该指令能够将容器打包成一个镜像,此时查询docker中的镜像将会看到自己的镜像

    若想将镜像备份出来,则可以使用指令:

    docker save my_tomcat:1.0 -0 my-tomact-1.0.tar
    
    • 1

    拥有.tar格式的镜像,如何加载到docker中呢?

    docker load -i my-tomcat-1.0.tar
    
    • 1
  • 相关阅读:
    「设计模式」六大原则之单一职责小结
    华为云桌面Workspace,实惠更实用!
    【一起学Rust | 框架篇 | ws-rs框架】属于Rust的Websocket框架——ws-rs
    [Java]枚举类
    java类的练习 -- 声明一个接口(Calculability),接口中
    跨域推荐:嵌入映射、联合训练和解耦表征
    C#手动填充DataSet
    KMP算法(详解加图解)
    Minium:专业的小程序自动化工具
    Discrete Mathematics and Its Applications 8th Edition 目录
  • 原文地址:https://blog.csdn.net/qq_74136205/article/details/136100103