Docker基础入门:常规软件安装与镜像加载原理

这篇具有很好参考价值的文章主要介绍了Docker基础入门:常规软件安装与镜像加载原理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


💖The Begin💖点点关注,收藏不迷路💖

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

一、Docker常规软件安装

1.1、部署nginx

1、拉取nginx镜像
[root@zyl-server ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
a2abf6c4d29d: Pull complete 
a9edb18cadd1: Pull complete 
589b7251471a: Pull complete 
186b1aaa4aa6: Pull complete 
b4df32aa5a72: Pull complete 
a0bcbecc962e: Pull complete 
Digest: sha256:0d17b565c37bcbd895e9d92315a05c1c3c9a29f762b011a10c54a66cd53c9b31
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@zyl-server ~]# 

2、查看镜像
[root@zyl-server ~]# docker images
REPOSITORY                                            TAG       IMAGE ID       CREATED         SIZE
192.168.234.10:5000/centos                            1.2       d0a52e21dd65   20 hours ago    231MB
centos                                                1.2       d0a52e21dd65   20 hours ago    231MB
nginx                                                 latest    605c77e624dd   19 months ago   141MB
registry.cn-hangzhou.aliyuncs.com/zhaohaibao/centos   7.9       5d0da3dc9764   23 months ago   231MB
[root@zyl-server ~]# 

3、运行nginx,8011为容器外部端口,80端口为容器内部nginx的端口
[root@zyl-server ~]# docker run -d --name=mynginx -p 8011:80 nginx
926fd257ed887f86894e1fb3b99c2f5edda141e9fdd92c04de3255fd2b1b4973
[root@zyl-server ~]# 

[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                   NAMES
926fd257ed88   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8011->80/tcp, :::8011->80/tcp   mynginx
[root@zyl-server ~]# 

4、进入nginx容器
[root@zyl-server ~]# docker exec -it mynginx /bin/bash
root@926fd257ed88:/# ls
bin  boot  dev	docker-entrypoint.d  docker-entrypoint.sh  etc	home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@926fd257ed88:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@926fd257ed88:/# cd /etc/nginx/
root@926fd257ed88:/etc/nginx# ls
conf.d	fastcgi_params	mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@926fd257ed88:/etc/nginx# 
root@926fd257ed88:/etc/nginx# 

本地访问8011测试:

[root@zyl-server ~]# curl localhost:8011
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@zyl-server ~]# 

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

❓ 思考:每次修改nginx配置文件,都需要进入容器内部十分麻烦,------》引入数据卷,通过路径映射,在容器外部即可修改。

1.2、部署tomcat

1、下载tomcat
### --rm 用完即删(一般用来测试)
docker run -it --rm tomcat:9.0

###(这里使用这个)
docker pull tomcat:9.0

2、运行tomcat

参数说明:
-p 小写   主机端口:容器端口
-P 大写   随机分配端口
i         交互
t         终端
d         后台

docker run -d -p 8012:8080 --name=mytomcat tomcat

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

原因tomcat默认是最小的镜像,有的文件被删除了。保证最小运行环境。

解决:

1、进入容器
[root@zyl-server ~]# docker exec -it mytomcat /bin/bash
root@f8e5b8f57b2b:/usr/local/tomcat# ls
BUILDING.txt  CONTRIBUTING.md  LICENSE	NOTICE	README.md  RELEASE-NOTES  RUNNING.txt  bin  conf  lib  logs  native-jni-lib  temp  webapps  webapps.dist  work
root@f8e5b8f57b2b:/usr/local/tomcat# cd webapps
root@f8e5b8f57b2b:/usr/local/tomcat/webapps# ls
root@f8e5b8f57b2b:/usr/local/tomcat/webapps# 

2、拷贝webapps.dist下的文件到webapps
root@f8e5b8f57b2b:/usr/local/tomcat# cp -r webapps.dist/* webapps/
root@f8e5b8f57b2b:/usr/local/tomcat# 

测试访问:
Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

❓ 思考:部署项目,每次进入容器内部,是不是很麻烦?------》引入数据卷,通过路径映射,在容器外部即可修改。

1.3、部署elasticsearch

❓ 思考:

es暴露端口多
es内存占用大
es的数据一般要放置到安全目录(挂载)
——————怎么解决?

1、下载、启动elasticsearch 
[root@zyl-server ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
Unable to find image 'elasticsearch:7.6.2' locally
7.6.2: Pulling from library/elasticsearch
ab5ef0e58194: Pull complete 
c4d1ca5c8a25: Pull complete 
941a3cc8e7b8: Pull complete 
43ec483d9618: Pull complete 
c486fd200684: Pull complete 
1b960df074b2: Pull complete 
1719d48d6823: Pull complete 
Digest: sha256:1b09dbd93085a1e7bca34830e77d2981521a7210e11f11eda997add1c12711fa
Status: Downloaded newer image for elasticsearch:7.6.2
89b955d50f2fd130d2e19e4048d30a8c38c6beb1023552be2af0c49b6fbf5951

2、查看当前运行的镜像
[root@zyl-server ~]# docker ps
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
89b955d50f2f   elasticsearch:7.6.2   "/usr/local/bin/dock…"   7 seconds ago    Up 6 seconds    0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp   elasticsearch
f8e5b8f57b2b   tomcat                "catalina.sh run"        20 minutes ago   Up 20 minutes   0.0.0.0:8012->8080/tcp, :::8012->8080/tcp                                              mytomcat
926fd257ed88   nginx                 "/docker-entrypoint.…"   57 minutes ago   Up 57 minutes   0.0.0.0:8011->80/tcp, :::8011->80/tcp                                                  mynginx
[root@zyl-server ~]# 

3、查看当前cpu使用情况(50%)
docker status

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

4、测试访问elasticsearch
[root@zyl-server ~]# curl localhost:9200
{
  "name" : "89b955d50f2f",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "pJGBGgBpTOSEqmbG0uMUdg",
  "version" : {
    "number" : "7.6.2",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
    "build_date" : "2020-03-26T06:34:37.794943Z",
    "build_snapshot" : false,
    "lucene_version" : "8.4.0",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
[root@zyl-server ~]# 

5、停止elasticsearch、增加内存限制(-e ES_JAVA_OPTS="-Xms64m -Xmx512m"),最低占用64m内存,最高占用512m内存。

[root@zyl-server ~]# docker stop 89b955d50f2f
89b955d50f2f
[root@zyl-server ~]# 

6、再次运行
[root@zyl-server ~]# docker run -d --name myelasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2

7、再次查看内存
[root@zyl-server ~]# docker stats 

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

1.4、如何部署kibana–>连接elasticsearch

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

1.5、部署可视化工具

1、portainer(使用这个)
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

2、Rancher(CI/CD、持续部署、集成时再用这个)

什么是portainer ?

portainer 是 Docker的图形化界面管理工具!提供一个后台面板供我们操作!

1、启动运行

[root@zyl-server ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
Unable to find image 'portainer/portainer:latest' locally
latest: Pulling from portainer/portainer
94cfa856b2b1: Pull complete 
49d59ee0881a: Pull complete 
a2300fd28637: Pull complete 
Digest: sha256:fb45b43738646048a0a0cc74fcee2865b69efde857e710126084ee5de9be0f3f
Status: Downloaded newer image for portainer/portainer:latest
99974acec5857c8559b5230e5c76063a82346a0e986780582ea6a40a7f62628c
[root@zyl-server ~]#  


2、访问测试:http://192.168.234.10:8088

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生
Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

二、 镜像加载原理

2.1、镜像是什么

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

所有的应用,直接打包docker镜像,就可以直接跑起来!

如何得到镜像:

从远程仓库下载
朋友拷贝给你
自己制作一个镜像DockerFile

2.2、Docker镜像加速原理

UnionFS(联合文件系统)

我们下载的时候看到的一层层就是这个!

UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

Docker镜像加载原型

docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统UnionFS。

bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs(root file system),在bootfs之上。包含的就是典型Linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。
rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

平时我们安装进虚拟机的CentOS都是好几个G,为什么Docker这里才200M?

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

对于一个精简的OS,rootfs可以很小,只需要包含最基本的命令,工具和程序库就可以了,因为底层直接用Host的kernel,自己只需要提供rootfs就可以了。

由此可见对于不同的linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。

(虚拟机是分钟级,容器是秒级!)

2.3、分层理解

分层的镜像

我们可以去下载一个镜像,注意观察下载的日志输出,可以看到是一层一层的在下载!

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

思考:为什么Docker镜像要采用这种分层的结构呢?

最大的好处,我觉得莫过于是资源共享了!比如有多个镜像都从相同的Base镜像构建而来,那么宿主机只需在磁盘上保留一份base镜像,同时内存中也只需要加载一份base镜像,这样就可以为所有的容器服务了,而且镜像的每一层都可以被共享。

查看镜像分层的方式可以通过 docker image inspect命令!

[root@zyl-server ~]# docker image inspect tomcat:9.0

所有的Docker 镜像都起始于一个基础镜像层,当进行修改或增加新的内容时,就会在当前镜像层之上,创建新的镜像层。

举一个简单的例子,假如基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。

该镜像当前已经包含3个镜像层,如下图所示(这只是一个用于演示的很简单的例子)。

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生
在添加额外的镜像层的同时,镜像始终保持是当前所有镜像的组合,理解这一点非常重要。下图中举了一个简单的例子,每个镜像层包含3个文件,而镜像包含了来自两个镜像层的6个文件。

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生
上图中的镜像层跟之前图中的略有区别,主要目的是便于展示文件。
下图中展示了一个稍微复杂的三层镜像,在外部看来整个镜像只有6个文件,这是因为最上层中的文件7是文件5的一个更新版本。
Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生
这种情况下,上层镜像层中的文件覆盖了底层镜像层中的文件。这样就使得文件的更新版本作为一个新镜像层添加到镜像当中。

Docker通过存储引擎(新版本采用快照机制)的方式来实现镜像层堆栈,并保证多镜像层对外展示为统一的文件系统。

Linux上可用的存储引擎有AUFS、Overlay2、Device Mapper、Btrfs以及ZFS。顾名思义,每种存储引擎都基于Linux中对应的文件系统或者块设备技术,并且每种存储引擎都有其独有的性能特点。

Docker在Windows 上仅支持 windowsfilter一种存储引擎,该引擎基于NTFS文件系统之上实现了分层和CoW[1]。

下图展示了与系统显示相同的三层镜像。所有镜像层堆叠并合并,对外提供统一的视图。

Docker基础入门:常规软件安装与镜像加载原理,容器化与编排技术深度解析,docker,容器,运维,Docker基础入门,docker常规软件安装,docker镜像加载原理,云原生

特点:

Docker镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部!
这一层就是我们通常说的容器层,容器之下的都叫镜像层!文章来源地址https://www.toymoban.com/news/detail-657414.html


💖The End💖点点关注,收藏不迷路💖

到了这里,关于Docker基础入门:常规软件安装与镜像加载原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker基础入门:容器数据卷与Dockerfile构建镜像(发布)

    💖The Begin💖点点关注,收藏不迷路💖 1、完成数据持久化和共享数据,docker容器中的数据,同步到本地。 2、重要数据back_up 特点: 实时生效、数据卷可在容器之间共享和重用数据、数据卷中的更改不会包含在镜像更新中、数据卷的生命周期会一直延续到没有容器使用它为止

    2024年02月10日
    浏览(42)
  • linux下docker安装、镜像下载、镜像基础操作、容器基础操作

    目录 一、环境准备 1、开启虚拟化 2、关闭防火墙 3、yum仓库获取阿里源(清华、京东都可以) 4、确保能ping到外网 二、安装docker 1、yum安装docker 2、启动docker并设置开机自启 3、安装docker-ce阿里镜像加速器 三、docker基本操作 1、查看版本 2、查看详细信息 四、镜像操作 1、do

    2024年02月06日
    浏览(41)
  • docker入门(Linux环境下安装Docker,Docker构建镜像)

    1.1 官方解释 Docker is the world’s leading software containerization platform。 Docker公司开发,开源,托管在github跨平台, 支持Windows、Macos、Linux。 1.2 抽象解释 2.1 集装箱-类似一个容器 没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程

    2024年02月15日
    浏览(37)
  • Docker如何安装基础镜像服务

    本文章讲述从0到1安装docker 及相关依赖服务镜像如何安装,安装之前,确保开放所需要的端口或者关闭防火墙。 外部机器不能直接访问容器,网是不通的,但可以访问宿主机,只要将容器的端口与宿主机进行映射后,访问宿主机的端口就相当于访问了容器的端口。 1.docker安装

    2024年02月09日
    浏览(30)
  • Docker入门安装、镜像与容器下载 —— 基本操作

    目录 前言 Docker 1. docker介绍 2. docker安装 3. docker基本使用 3.1 镜像下载 3.2 操作容器         虚拟机:基于主机(物理机或虚机)的多服务实例。 在该模式下,软件开发人员可以提供单个或多个物理机或虚机,同时在每个主机上运行多个服务实例。 此模式有几种不同的实现形式

    2024年01月17日
    浏览(64)
  • 逸学Docker【java工程师基础】2.Docker镜像容器基本操作+安装MySQL镜像运行

    在这里我们的应用程序比如redis需要构建成镜像, 它作为一个Docker文件就可以进行 构建 ,构建完以后他是在 本地的 ,我们可以 推送 到镜像服务器,逆向可以 拉取 到上传的镜像,或者说我们可以保存为 压缩包 进行 相互传递 。 在本地的镜像可以传来传去,本身也可以查看

    2024年02月01日
    浏览(43)
  • 【Docker】Linux中Docker技术入门与实战及实用的常规命令

    目录 一、引言 1. 说明: 2. Linux介绍 3. Docker简介 二、Docker三要素 1. 镜像(Image) 2. 容器(Container) 3. 仓库(Repository) 三、实现案例 1. 创建 2. 设置镜像 3. 开启设置 4. Docker安装 5. Docker使用及命令 每篇一获 Linux 是开源的,因此是免费的。 Web 主机仅需要支付技术支持即可安

    2024年02月01日
    浏览(27)
  • docker环境安装软件、更换镜像源以及E: Unable to locate package xxx解决

    一、问题分析 在docker容器内使用VIM命令时,因为没有安装vim;所以提示安装;但是在安装过程中却抛出一下问题: 二、解决方案 下载地址由于是海外地址,下载速度异常慢而且可能中断更新流程,将下载地址更改为国内 三、再次安装 四. 此镜像源已失效 报错原因:linux系统

    2024年02月11日
    浏览(39)
  • 002-基础入门-Web架构&集成软件&Docker&资源平台等

    原理:源码数据都在同服务器 影响:无,常规安全测试手法 原理:源码数据库不在同服务器 存储:其他服务器上数据库云数据库产品 影响:数据被单独存放,能连接才可影响数据 原理:前端JS框架,API传输数据 https://www.rxthink.cn/ 前端站点 http://manage.thinkphp6.elevue.rxthink.cn/

    2024年01月24日
    浏览(33)
  • docker笔记3 Docker常规安装

    docker hub上面查找tomcat镜像  docker search tomcat 从docker hub上拉取tomcat镜像到本地 docker pull tomcat  docker images查看是否有拉取到的tomcat   使用tomcat镜像创建容器实例(也叫运行镜像)  docker run -it -p 8080:8080 tomcat -p 小写,主机端口:docker容器端口 -P 大写,随机分配端口 i:交互 t:终端

    2024年02月09日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包