Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像

文章目录

  • Docker
      • 一、部署Nginx
      • 二、部署Tomcat
      • 三、可视化面板(Portainer)
      • 四、镜像
      • 五、commit镜像

Docker

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第1张图片


一、部署Nginx

# 1. 搜索镜像
docker search nginx
# 2. 下载镜像
docker pull nginx
# 3. 运行nginx
docker run -d --name nginx01 -p 8848:80 nginx

在这里插入图片描述

  • 上面的 -p 8848:80 端口即:宿主机端口号:容器内部端口号

运行测试:curl localhost:8848

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第2张图片
在win主机上访问也是可以的:

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第3张图片

进入容器查看:

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第4张图片

  • 这里说一下端口号暴露问题:

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第5张图片

二、部署Tomcat

  1. 下载测试完随即删除(测试完就自动删除了)
docker run -it --rm tomcat:9.0
  1. 正常下载测试
docker pull tomcat

测试:

docker run -d --name tomcat01 -p 8838:8080 tomcat

问题:
进入容器后发现 webapps 目录为空!访问不到 tomcat主页!

[root@localhost ~]# docker exec -it tomcat01 /bin/bash
root@933acd022070:/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@933acd022070:/usr/local/tomcat# cd webapps
root@933acd022070:/usr/local/tomcat/webapps# ls
root@933acd022070:/usr/local/tomcat/webapps#

而webapps.dist目录下面有:

root@933acd022070:/usr/local/tomcat/webapps.dist# ls
ROOT  docs  examples  host-manager  manager

我们将webapps.dist目录下拷贝到webapps目录下:cp -r webapps.dist/* webapps,外网访问:

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第6张图片

三、可视化面板(Portainer)

docker的图形化管理面板工具,提供一个后台面板供使用!

  1. 下载镜像
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
  1. 外网测试访问:ip+8088
    这里设置用户名和密码即可。

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第7张图片
设置完登录进来选择仓库:我们选择本地

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第8张图片
可以看到docker的所有信息:容器、镜像…

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第9张图片

四、镜像

  1. 镜像是什么?
    是一种轻量级、可执行的独立软件包,包含软件的所有内容:代码、运行时库、环境、配置文件等。
  2. 镜像的获取方式
    1)远程仓库下载
    2)拷贝
    3)自己制作
  3. 镜像加载原理

1)先了解一下联合文件系统(UnionFS),当我们下载镜像时会发现是一层一层下载的,它是一种分层、 轻量级并且高性能的文件系统,支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。它是Docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第10张图片
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

2)镜像加载原理:

docker 的镜像实际上由一层一层的文件系统组成,这种层级的文件系统就是上面说的UnionFS。
Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第11张图片
bootfs(boot file system) :主要包含bootloader(引导加载程序)和kernel(内核),bootloader 主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就存在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs,这部分是公用的!
roorfs (root file system):在bootfs之上。包含的就是典型Linux系统中的 /dev ,/proc,/bin ,/etx 等标准的目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。
3)CentOS虚拟机要几个G,而使用docker的才几百MB?
对于一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就可以了,因为底层直接用Host(宿主机)的kernel,自己只需要提供rootfs就行了,由此可见对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
4)为什么采用分层结构?
共享资源,多个镜像从相同的父镜像构建而来,那么宿主机只需在磁盘上保存一份父镜像,同时内存中也只需加载一份父镜像就可以为所有容器服务了,并且镜像的每一层都可以被共享。
Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第12张图片
我们可以看到tomcat的分层:

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第13张图片
5)docker 镜像都是只读的,当容器启动时,一个新的可写层被加载到镜像的顶部。这一层通常被称作 “容器层” ,“容器层” 之下的都叫镜像层,我们的操作都是基于容器层的。

五、commit镜像

我们以tomcat为例,commit这个镜像。(修改内容:将webapps.dist目录下的文件拷贝到webapps下)

  1. 启动tomcat:docker run -it -p 8080:8080 tomcat
  2. 进入容器,拷贝文件:docker exec -it 81690f276071 /bin/bashcp -r webapps.dist/* webapps
  3. 提交修改后的容器:docker commit -a="code_chen" -m="Add something to the webapps" 81690f276071 tomcat02:1.0
    参数:-a=“作者”,-m=“描述”,修改后的容器名称:tomcat02:1.0
  4. 查看镜像

Docker学习(二)部署Nginx、Tomcat、可视化面板(Portainer)、镜像原理、commit镜像_第14张图片

//下篇再见…谢谢
在这里插入图片描述

你可能感兴趣的:(Docker)