首页 > 其他分享 >Docker入门与实践

Docker入门与实践

时间:2023-06-02 23:56:08浏览次数:47  
标签:容器 入门 宿主机 jar 实践 指定 镜像 Docker

Docker容器化技术

对比虚拟机技术

虚拟机技术虚拟出一套硬件资源,在此上安装操作系统进而运行一些软件

而容器虚拟化出的容器都是直接使用宿主机硬件资源,基于宿主机的内核上进行运行,不用虚拟出来一套硬件资源,从而更快,更节约存储空间

虚拟机与容器化

1.两者是相辅相成的,可以共同使用的
2.云服务提供商通常采用虚拟机技术隔离不同的用户。而 Docker 通常用于隔离不同的应用 

Docker特点

1.所有的容器都基于宿主机内核,启动很快
2.镜像使用文件层系统构建的,包含了代码、完整的运行时环境、系统工具、系统库和设置;同时能够共享一些公共资源,占用资源更少;
3.隔离性不仅限于容器与容器之间,而且还各自独立于底层基础设施
4.Docker镜像提供了除内核外完整的运行时环境,保证了在任何机器上服务环境是一致的

镜像

是一个类似于Linux中的root文件系统。实际上是一个多层文件系统联合组成。

镜像在构建过程中,是一层一层的构建。同时也能复用之前构建好的镜像,然后添加新的分层定制自己的内容,成为一个新镜像

容器

是镜像的实体,能够运行的进程,有自己的生命周期,它是运行于自己独立命名空间。

它和镜像一样也是有自己的存储层,生命周期和容器是一样的,容器在则属于自己的存储层,消失都消失,容器存储层应该保持无状态化。所以不能向容器存储层写入任何数据,否则会有丢失数据的问题。所有数据写入,应该使用数据卷或者绑定到宿主机,能够持久化

容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。

科普:无状态化说白了就是不依赖其他事务或数据,是独立的;有状态是需要依赖其他事务,会受其他事务影响的

仓库

负责存储镜像的地方

官网提供的一个共享镜像

数据卷

作用:

  1. 能够实现宿主机与容器数据文件共享,也就是说宿主机数据文件修改后会影响到容器相应的内容

  2. 容器与数据卷的生命周期不一样,容器销毁停止,但是数据卷依然存在

两种方式:

  • 指定目录方式 -v 宿主机绝对路径:容器内的位置
在启动容器时,会将指定宿主机目录下的文件数据同步到容器指定的位置中,如果不存在Docker会自动创建它
docker run -d -p 8080:8080 --name tomcat01 -v /opt/apps:/usr/local/tomcat/webapps tomcat:8.0-jre8
  • 匿名数据卷方式 -v 数据卷名字:容器内的位置
在启动容器时,将指定容器的目录文件同步到自定义数据卷中
docker run -d -p 8080:8080 --name tomcat01 -v aa:/usr/local/tomcat/webapps tomcat:8.0-jre8

常用命令

对某个镜像或者容器操作时,可以使用短id或者id的前3个标识符即可

  • 查看镜像、容器、数据卷所占用的空间

    docker system df
    
  • 强制删除当前所有的正在运行的容器

    docker rm -f $(docker ps -qa)
    
  • 查看实时日志

    docker logs -ft containerId
    

Dockerfile指令

作用:用来清晰的构建镜像

注意:Dockerfile中每个指令都会新建一层

From:指定基础镜像,必须是Dockerfile文件中第一个指定。也可以指定一个虚拟的概念镜像FROM scratch

#以java8为基础镜像

From Java:8

Run:在构建当前镜像时要执行的 shell 或 exec 命令

#执行shell命令创建/usr/src/redis目录

RUN mkdir -p /usr/src/redis

VOLUME:用于指定容器内挂载宿主机匿名卷的位置,当容器启动时会自动在宿主机创建一个匿名卷与当前指定的位置进行挂载。

# 如下指定/data,会在var/lib/docker/xxxx/_data与其挂载

VOLUME /data

COPY:会将构建上下文中的文件/目录拷贝到镜像指定的位置。目标路径不需要事先创建,当指定的位置不存在会自动创建的

# COPY ./app.jar /opt/app.jar
ADD:有COPY的功能,同时也可以解压,可以下载链接的文件

在 Docker 官方的 Dockerfile 最佳实践文档 中要求,尽可能的使用 COPY,因为 COPY 的语义很明确,就是复制文件而已,而 ADD 则包含了更复杂的功能,其行为也不一定很清晰。最适合使用 ADD 的场合,就是所提及的需要自动解压缩的场合。

CMD:是在构建容器的时候要执行的 shell 或 exec 命令。

如果docker run 指定了shell命令,那么该Dockerfile中CMD命令会失效。

在与ENTRYPOINT配合使用时,会被当做ENTRYPOINT参数使用,相当于 " ""

注意CMD与RUN指令的区别:CMD是在启动容器时使用,RUN是构建镜像时使用

ENTRYPOINT:类似于CMD,在启动容器时指定的shell命令,但与CMD配合使用时,会将CMD当做参数传递给ENTRYPOINT

ENTRYPOINT ["java","-jar","testApp.jar"]

EXPOSE:仅仅声明了当前容器暴露的端口

Dockerfile文件案例

FROM java:8
RUN mkdir -p /opt/lk/project
WORKDIR /opt/lk/project
COPY ./test-container-project-0.0.1-SNAPSHOT.jar testApp.jar
VOLUME /data
ENTRYPOINT ["java","-jar","testApp.jar"]
EXPOSE 8080

标签:容器,入门,宿主机,jar,实践,指定,镜像,Docker
From: https://www.cnblogs.com/party-abu/p/17453149.html

相关文章

  • GAN的原理入门
    GAN的基本原理其实非常简单,这里以生成图片为例进行说明。假设我们有两个网络,G(Generator)和D(Discriminator)。正如它的名字所暗示的那样,它们的功能分别是:G是一个生成图片的网络,它接收一个随机的噪声z,通过这个噪声生成图片(如正态分布,auto-encoder是中间输出是一般也是),记做G(z)。D是一个......
  • ASP.NET Core MVC 从入门到精通之自动映射(一)
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。经过前几篇文章的讲解,初步了解ASP.NETCore......
  • AI入门(重实践)书籍推荐
    AI书籍推荐我最近看了下https://book.douban.com/subject/30147778/ 另外如果要看电子书的话建议看这个https://book.douban.com/subject/27154347/评价也非常高从项目着手机器学习和深度学习都有并且难度也不高其中文翻译电子版可以看这里https://github.com/it-ebooks......
  • 项目_使用docker部署前端教程
    dist文件夹直接替换systemctlrestartdockersudodockerps-asudodockerrestart<ContainerId> 问题1:docker端口映射或启动容器时报错 Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpoint解决方法:https://blog.csdn.net/what......
  • kali使用docker时遇到的错误及解决问题
    前言最近在学习在kali用docker搭建环境,但是一开始就遇到了问题本机无法访问kali开启的docker容器问题描述物理机访问kali开启的docker容器时访问不了。在虚拟机中可以通过telnetipport的方式可以确定docker容器的端口通过虚拟机可以访问,但是在物理机中无法通过telnet测试,并......
  • Docker CLI docker create 常用命令
    Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化。Docker是内核虚拟化,不使用Hypervisor是不完全虚拟化,依赖内核的特性实现资源隔离。本文主要介绍DockerCLI中d......
  • Jasypt入门
    Jasypt是一个java库,它允许开发人员以最小的工作量为他/她的项目添加基本的加密功能,而不需要对密码学的工作原理有深入的了解。一、特性Jasypt为您提供了简单的单向(摘要)和双向加密技术。用于任何JCE提供程序的开放API,而不仅仅是默认的JavaVM提供程序。Jasypt可以很......
  • 一站式元数据治理平台——Datahub入门宝典
    随着数字化转型的工作推进,数据治理的工作已经被越来越多的公司提上了日程。作为新一代的元数据管理平台,Datahub在近一年的时间里发展迅猛,大有取代老牌元数据管理工具Atlas之势。国内Datahub的资料非常少,大部分公司想使用Datahub作为自己的元数据管理平台,但可参考的资料太少。所以整......
  • docker 部署prometheus和grafana
    prometheus(普罗米修斯):天生为采集存储监控数据而生的时序数据库。prometheus通过各种Exporter采集到监控数据,然后存储进prometheus中,以供查询展示。grafana:一个监控仪表系统。grafana的数据来源可以有很多(如:Prometheus、Graphite、OpenTSDB、InfluxDB、MySQL/PostgreSQL、Microsof......
  • 手把手docker安装nginx
    记录下一步步流程,没有使用dockerfile,直接命令安装。1、下载nginx镜像,不指定版本默认拉取最新版本dockerpullnginx 2、创建nginx挂载目录,目录可以自己随便建mkdir-p/usr/local/nginx 3、启动nginx容器,如果非80端口则使用自己实际端口dockerrun--name......