为什么需要使用Docker

news2024/11/19 23:32:24

简介与概述


1.介绍

Docker是一个开源的应用容器引擎,基于Go语言开发的,并且遵从Apache2.0协议开源。

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

2.Docekr的主要目的是‘build , ship and run any app , anywhere’,也就是说打包了之后,可以做到将用户的app及其运行环境实现‘一次封装,到处运行’。

3.作用

4.优势 

 Docker三大要素


1.仓库

仓库就相当于手机自带的应用商店(存放镜像文件),你可以在里面下载app,docker的网站也是一样的

https://hub.docker.com/

2.镜像

里面的app就相当于镜像,也就是安装包,下一步下一步安装即可

要么自己做一个,比如springboot项目

要么去第三方仓库下载

3.容器

Docker的核心架构原理


注:如果要下载Nginx,首先Docker-Client会发一个请求 (docker pull),然后后台会单独开启一个进程去查看本地是否有Nginx的镜像文件,如果没有他就会去仓库(第三方--Dockerhub)里面下载并且缓存到本地(类似Maven)

docker-run 他会在运行前查看本地是否有相关的镜像缓存,如果没有就去下载一个,然后再交给容器进行运行

容器和虚拟机的区别


注:一个系统可以运行上千个容器,但是一个虚拟机(一台电脑)运行几十个就很不错的了 

CentOS7安装Docker


1.首先Docker会要求CentOS7的版本在3.10以上

通过  cat /etc/redhat-release 查看centos版本

通过 uname -a 可以查看Linux的版本和多少位

通过  uname -r 查看当前的Linux内核版本(centos)和多少位

 

2.使用root权限登录CentOS,确保yum包更新到最新

yum -y update

3.卸载旧版本(如果下载过旧版本的话)

yum remove docker docker-common docker-selinux docker-engine

4.yum install -y yum-utils

yum install -y yum-utils

5.设置yum源

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

6.可以查看所有仓库中的所有docker版本,并且可以选择指定版本安装

yum install docker-ce-18.06.3.ce

7.安装docker

sudo yum intall-y doker-ce   
#由于repo中的默认只开启stable仓库,所有这里安装的是最新稳定版 18.03.1

8.设置启动并且开机启动

systemctl start docker
systemctl enable docker

9.验证是否安装成功(有client 和service 两部分表示docker安装启动都成功了),或者查看是否有进程

docker version

ps aux | grep 'docker'

10.正在运行的容器

docker ps

Docker配置阿里云加速器镜像


1.阿里云服务器镜像加速器地址:

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

 2.如何仓库加速器镜像安装成功

docker info

 

注:可以下载一个tomcat试试

 

Docker-images使用原理


1.docker seach mysql

 http://hub.docker.com/

 2.latest是什么意思(最新版本)

3.下载的时候默认就是最新版本与删除镜像

注:docker rmi 镜像id或名称

 

如果提示镜像被使用,需要先停止某个ID的容器,那么要先删除容器再删除镜像,如需强行删除可以使用-f参数,例如:docker rmi -f tomcat:6

 

4.为什么原生的tomcat就是50多mb,但是images查看的时候事五六百mb

注:因为这里面包括了运行时环境,jdk,服务器 

5.如何下载指定tomcat的版本(八点几版本),以及获取镜像id

获取版本 docekr pull tomcat:8
获取镜像id docker images -q
显示镜像的摘要信息 docker images --digests
显示完整的镜像信息 docker images --no-trunc

 Docker-run的常见问题


1.tomcat可以会多个容器运行,如果不规定名称,你们每次运行都会开启一个tomcat进程,而且id也不同

 2.如果是使用stop停止docker运行,但是容器并没有停止,并且是可以使用docker ps-a进行查看

3.指定名称运行tomcat,并且使用容器外部(Linux虚拟机)进行连接(curl 127.0.0.1:8080)

 注:拒绝连接的解决方法就是改为后台启动

 因为没有项目运行,所以会404

 

4.前台启动和后台启动的区别

注:如果是后台启动了,但就是不能访问,防火墙也关闭了,那肯定是报错了,

这样就可以换到前台启动看看日志信息,再切换后台 

 Docker-commit的作用


 

 

注:将镜像打包成一个文件(war包)

 注:这也是为什么运行的时候出现404的原因,因为没有任何项目

1.如何进入webapps中创建一个html,并且写入内容,并且使用8081访问

 

2.根据当前容器作为模板做成一个镜像文件,然后运行的时候就自带项目了

docker run -p 8088:8080 tomcat:1.0

 

 Docker数据卷的作用


1.概念

2.添加方式 (挂载)

 

 

 注:指定一个 -v 的指令

 注:左边是容器外部,右边是内部,容器外部的文件用的内部文件夹做一个共享      

也就是说把html文件放到data/nginx/html目录下面(宿主机上的数据卷路径),然后输入  :/usr/share/nginx/html# ls 也可以查看(容器中要挂载的数据卷路径)

3.添加流程

3.1.创建/data/nginx/html文件夹:

3.2.然后运行并且现在nginx

3.3.查看文件夹目录

3.4.吧文件拷贝到html目录下面,然后进入进入文件夹查看文件,并且输入81端口号可以访问

 

 4.添加方式 (卷共享)

docker run -d --name host_data1 -v /path/to/host/data1:/var/lib/docker/containers/container1_data1 -v /path/to/host/data2:/var/lib/docker/containers/container2_data2 container_image

卷共享:将多个容器的数据卷共享,实现数据的复制。例如,宿主机上有两个数据卷 data1 和 data2,要将它们共享,可以使用以下命令:

5.添加方式

 DockerFile的作用


1概念 

注:再dockerfile里面把所以的环境依赖下载,然后打包成一个镜像,再容器运行

2. Dockerfile的基本组成
dockerfile有一系列指令和参数组成,每条指令都必须为大写,执行时按顺序从上到下执行,所以应该根据需要合理安排指令的顺序。

Dockerfile的基本组成及说明:

组成     说明
基础镜像信息FROM
维护者信息    MAINTAINER
镜像操作指令RUN、(COPY/ADD)、EXPOSE、WORKDIR、ONBUILD、USER、、VOLUME等
容器启动时执行指令CMD、ENTRYPOINT

2.1 FROM
指定基础镜像,如:

FROM ubuntu:18.04

2.2 MAINTAINER
指定该镜像的作者及电子邮件等信息

MAINTAINER lisen "xxxxx@163.com"

2.3 RUN
在镜像内部执行的指令,如安装软件,配置基础环境等,可用\进行换行

RUN echo 'hello' > /usr/local/file.txt

也可以使用exec格式,RUN ["命令", "参数1","参数2"], 如:

RUN ["apt-get", "install", "-y", "ubuntu"]

2.4 COPY
将主机的文件复制到镜像中,如果目的目录不存在,docker会自动创建所需目录结构。注意:该命令只是单纯的复制,并不会做文件的提取解压工作。

COPY  file.txt /usr/local

注:需复制的文件或目录必须要放在Dockerfile文件的同级目录下。

2.5 ADD
将宿主机文件复制到镜像,该命令与COPY命令作用和用法是一样的,但ADD命令会对压缩文件做解压和提取操作(tar,gzip等)

2.6 EXPOSE
暴露镜像的端口供主机做端口映射,运行镜像时使用-P参数将镜像端口与宿主机随机端口或指定端口做映射。
示例:

EXPOSE 8080
可以通过docker port查看到端口的映射情况。

2.7 WORKDIR
WORKDIR指令用来在从镜像创建一个新容器时,在容器内部设置一个工作目录,ENTRYPOINT和/或CMD指定的程序会在这个目录下执行。
我们可以使用该指令为Dockerfile中后续的一系列指令设置工作目录,也可以为最终的容器设置工作目录。

示例:

WORKDIR /opt/webapp/db 
RUN bundle install
WORKDIR /opt/webapp 
ENTRYPOINT [ "rackup" ]

这里,我们将工作目录切换为/opt/webapp/db后运行了bundle install命令,之后又将工作目录设置为/opt/webapp,最后设置了ENTRYPOINT指令来启动rackup命令。

可以通过-w标志在运行时覆盖工作目录,如代码清单4-57所示。

代码清单4-57 覆盖工作目录

$ sudo docker run -ti -w /var/log ubuntu pwd 
/var/log


该命令会将容器内的工作目录设置为/var/log。

2.8 ONBUILD
当一个包含ONBUILD命令的镜像被用作其他镜像的基本镜像时,ONBUILD指令将执行。
例如:base-image

FROM ubuntu
ONBUILD ADD . /var/www


......
当使用base-image作基础镜像创建imageA时,

FROM base-image


......
则base-image基础镜像的 ONBUILD指令会执行

2.9 USER
指定镜像以什么用户执行

USER user01
2.10 VOLUME
向基于镜像创建的容器添加卷。一个卷是可以存在于一个或者多个容器内的特定的目录,这个目录可以绕过联合文件系统,并提供如下共享数据或者对数据进行持久化的功能。
示例:

#使用VOLUME 指令向容器添加volume
VOLUME  /data
 
#可以添加多个
VOLUME ["/data1","/data2"] #添加多个
注意:VOLUME指令不能挂载宿主机中指定的目录,这是为了保证Dockerfile的可移植性,因为不能保证所有的宿主机都有对应的目录。

2.11 CMD
CMD指令用于指定一个容器启动时要运行的命令,这有点儿类似于RUN指令,只是RUN指令是指定镜像被构建时要运行的命令,而CMD是指定容器被启动时要运行的命令。
例如:

$ sudo docker run -i -t jamtur01/static_web /bin/true


在Dockerfile中以下的CMD指令是等效的

CMD ["/bin/true"]
可以为要运行的命令指定参数,以下代码清单

CMD ["/bin/bash", "-l"]
这里我们将-l参数传递给了/bin/bash命令。

需要注意的是使用docker run命令可以覆盖CMD指令,如果我们在Dockerfile里指定了CMD指令,而同时在docker run命令行中也指定了要运行的命令,命令行中指定的命令会覆盖Dockerfile中的CMD指令。

2.12 ENTRYPOINT
ENTRYPOINT指令与CMD指令很相似,它们的区别在于ENTRYPOINT指令提供的命令不容易在启动容器时被覆盖,docker run命令行中指定的任何参数都会当作参数再次传给ENTRYPOINT命令。
ENTRYPOINT命令的一个示例:

ENTRYPOINT ["/usr/sbin/nginx"]


与CMD命令相似,ENTRYPOINT命令可以使用数组形式指定参数,如以下代码清单:

ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]


若我们构建镜像,并将ENTRYPOINT设置为ENTRYPOINT["/usr/sbin/nginx"],用docker build构建镜像,代码清单如下:

$ sudo docker build -t="jamtur01/static_web" .


然后用如下命令启动容器:

sudo docker run –t -i jamtur01/static_web -g "daemon off;"


则命令行参数-g "daemon off;"会传递给ENTRYPOINT指定的命令。在这里该命令为/usr/sbin/nginx -g "daemon off;"。该命令会以前台运行的方式启动Nginx守护进程,此时这个容器就会作为一台Web服务器来运行
3.编写规范

 4.为什么使用run执行centos之后他就会自动进入,不需要bash

 注:因为他会默认执行

5为什么docker不能使用vim插件语法

yum -y install vim

注:因为docker是一个轻量级的容器,不是所有的都会下载,需要手动下载

6.Dockerfile文件如下

#0.vi Dockerfile进入编辑模式
#1.指定基础镜像,并且必须是第一条指令
FROM ubuntu:latest
#2.指明该镜像的作者和其电子邮件
MAINTAINER zs "zs@qq.com"
#3.在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录
WORKDIR /usr/local/java
#4.一个复制命令,把jdk安装文件复制到镜像中,语法:ADD <src>... <dest>,注意:jdk*.tar.gz使用的是相对路径
ADD jdk-8u151-linux-x64.tar.gz /usr/local/java/
#5.配置环境变量
ENV JAVA_HOME=/usr/local/java/jdk1.8.0_151
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH=$JAVA_HOME/bin:$PATH
#容器启动时需要执行的命令
#CMD ["java","-version"]

docker-compose的作用


 注:可以给定一个顺序,比如按顺序运行依赖,先运行mysql,reids,nginx,最后再运行springboot项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/491999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新库上线 | CnOpenData中国标准数据

中国标准数据 一、数据简介 按照《中华人民共和国标准化法》的定义&#xff0c;标准是指农业、工业、服务业以及社会事业等领域需要统一的技术要求。标准作为一种通用性的规范语言&#xff0c;在合理利用国家资源、保障产品质量、提高市场信任度、促进商品流通、维护公平竞争、…

使用JPA自动生成代码(轻松上手看了就会版)

目录 背景&#xff1a;方案概念&#xff1a;JPA 的主要作用 jpa简单使用&#xff08;Springboot项目&#xff09;jpa进阶使用总结 背景&#xff1a; 项目需要自动生成sql代码&#xff0c;不需要写sql语句&#xff0c;能够自动进行查询&#xff0c;我想到了JPA。 方案 概念&a…

Jetpack Compose 不止是一个UI框架~

Jetpack Compose是用于构建原生Android UI的现代工具包。 Jetpack Compose使用更少的代码&#xff0c;强大的工具和直观的Kotlin API&#xff0c;简化并加速了Android上的UI开发。这是Android Developers 官网对它的描述。 本文不是教你Jetpack Compose 的一些基本使用方法&am…

【通过xib自定义Cell Objective-C语言】

一、我们怎么样来自定义单元格呢, 1.我们先来分析一下, 我们这里虽然有很多行,但是每一行,长的都是一样的, 这里有一个Label、那里有一个Label, 每一行每一行,长的都是一样的,唯独只有数据不一样吧, 所以说,遇到这种情况,我们就可以考虑用一个xib,描述一个单元…

倒计时24天!接棒香港展,CTIS2023观众预登记全面启动

4月22日,环球资源春季香港展在亚洲国际展览馆落下帷幕。两期展会,十馆全开,共历时8天。汇聚来自中国大陆、香港、台湾地区、韩国、越南、印度等地逾4,000家优质供应商超过30万件产品。吸引近10万人次的专业观众参观。环球资源为买卖双方打造优质贸易平台,让买家第一时间把握消费…

【Python零基础学习入门篇⑤】——第五节:Python中的函数

⬇️⬇️⬇️⬇️⬇️⬇️ ⭐⭐⭐Hello&#xff0c;大家好呀我是陈童学哦&#xff0c;一个普通大一在校生&#xff0c;请大家多多关照呀嘿嘿&#x1f601;&#x1f60a;&#x1f618; &#x1f31f;&#x1f31f;&#x1f31f;技术这条路固然很艰辛&#xff0c;但既已选择&…

【RDC2022纪念板】RT-Smart D1s上手

目录 环境准备开发板硬件介绍开发环境搭建烧录 环境准备 windows电脑&#xff08;用于烧录固件和串口日志查看&#xff09;Ubuntu虚拟机&#xff08;用于编译生成固件&#xff09;RDC2022纪念板TypeC数据线 开发板硬件介绍 开发板使用了全志科技的D1s芯片&#xff0c;全志RIS…

PAVC100R4222 PARKER轴向柱塞泵

PAVC100R4222 PARKER轴向柱塞泵特点&#xff1a; 1、壳体为高强度铸铁 2、两段设计便于维护 3、全密封的轴用轴承 4、内置增压器***高转速性能&#xff0c;可达3000 RPM( PAVC100为2600 RPM) 5、控制器为插装形式&#xff0c;易于现场更换 6、配流盘为可替换的青铜复合 10、过滤…

R实践——paleobioDB详解(paleobiology database)

paleobioDB详解&#xff08;paleobiology database&#xff09; PBDB初步认识paleobioDB一个简单的例子 所有函数详解1. pbdb_collection描述用法参数细节值例子 2. pbdb_collections描述用法参数值例子 3. pbdb_collections_geo描述用法参数值例子 4. pbdb_interval描述用法参…

成为数据分析师,需要具备哪些技能?

随着互联网的发展&#xff0c;数据分析师的特点越来越明显&#xff0c;对数据分析师综合素质的要求也较高。 1、较强的数据挖掘、信息整理、和逻辑分析能力 数据分析&#xff0c;也是数据分析师的一个方向。 制作日常性的经营报表&#xff0c;对公司或者行业KPI指标进行拆解…

【Linux超强学习路线图】赶紧收藏学习!

​很多朋友在学习Linux时&#xff0c;不知道学什么&#xff0c;不知道怎么学&#xff0c;有的朋友甚至把所有知识点都当成重点学起&#xff0c;但其实这样不仅浪费时间更浪费精力。今天就给大家安排一份「Linux超强学习路线图」&#xff01; 这张Linux超强学习路线图&#xff…

ThingsBoard使用jar包单机部署的问题以及如何解决问题

1、概述 这一节我将给大家讲述一下前面章节的问题,因为我直接都是跳过问题直接给大家演示正确的步骤,相当于我帮大家把坑踩完了,我主要讲两个问题,尤其是第一个问题,很多人都遇到过。 2、问题1 为什么要在thingsboard.yml中配置install.data_dir? 如果不配置这个inst…

7种优秀的导航菜单设计总结

导航是应用程序界面中最常见的模块之一&#xff0c;在链接应用程序中起着每个页面的作用。 不同的设计需求和业务目标决定了导航的设计因品而异&#xff0c;移动设备的尺寸远小于计算机。因此&#xff0c;在设计移动终端导航时&#xff0c;应考虑更全面&#xff0c;以确保简单…

手把手教你怎么搭建自己的AI数字人直播间?帮你24小时不间断直播卖货

在搭建AI数字人直播间之前&#xff0c;您需要了解数字人技术。 一、什么是AI数字人、数字人直播间&#xff1f; 数字人是一种由人工智能技术构建的虚拟人物&#xff0c;其外貌、行为、语言等特征与真实人物相似&#xff0c;可以与人进行互动。数字人可以通过语音合成、人脸识…

国产化:复旦微JFM7K325T +华为海思 HI3531DV200 的综合视频处理平台

板卡概述 TES714 是自主研制的一款 5 路 HD-SDI 视频采集图像处理平台&#xff0c;该平台采用上海复旦微的高性能 Kintex 系列 FPGA 加上华为海 思的高性能视频处理器 HI3531DV200 来实现。 华为海思的 HI3531DV200 是一款集成了 ARM A53 四核处理 器性能强大的神经网络引擎…

SpringFox SpringDoc 附件ui展示

文章目录 前言一、swagger v3 附件类型参数二、springdoc 附件类型参数1.springfox迁移springdoc注解对应关系2.springdoc 附件参数处理 三、RequestBody、RequestPart、RequestBody的区别3.1 RequestParam3.2 RequestBody3.3 RequestPart 前言 swagger 升级V3后发现swagger u…

【光伏预报/太阳能预报】上海道宁与Solargi为您提供开发地理数据库模拟工具和网络服务

Solargis提供开发地理数据库 模拟工具和网络服务 用于太阳能发电的规划 性能监控和管理 推动全球经济 转向可持续生产和消费 并推广环保能源技术 Solargis数据是用于 屋顶光伏系统性能监测的 日射强度计的实用替代方案 对于大型地面安装光伏系统 Solargis可作为 独立…

DB2 将多行记录合并成一行

SELECT replace(replace(xml2clob(xmlagg(xmlelement(NAME A, wdd.CASE_NUMBER||,))),<A>,),</A>,) AS CASE_NUMBERFROM WMS_DECLARE_DETAIL wdd其中&#xff1a;NAME A 要与 ‘’ 相同 &#xff0c;wdd.CASE_NUMBER 为字段&#xff0c;也可以加上GROUP BY 进行分组…

“邮件营销:5个关键问题,缺一不可

外贸公司的客户习惯使用邮件处理日常和工作事项。所以&#xff0c;我们也可以考虑使用邮件来和他们达成长期联系。而邮件营销作为最早出现的一批营销方式&#xff0c;它以极高的投资回报比依然占据着不可撼动的地位。但是&#xff0c;对于想开始邮件营销&#xff0c;但苦于没有…

W10做 .py文件的定时任务

因为领导让我们每天六点报当天数据,所以我写了个自动化的脚本,在定时这个问题研究了一两天 我有尝试过通过使用pyinstaller来打包我的.py文件,打包成exe文件,但是打包后存在各种问题,最多的就是缺少包,但是把包的文件夹导了也会出现问题,那就只能另辟蹊径了 1.我在py里面做了…