这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战
1, Docker安装Nginx
# 1, 第一步搜索镜像
docker search nginx
# 2, 下载镜像
docker pull nginx
# 下载成功之后,查看镜像
docker images
# 后台启动nginx
docker run -d --name nginx01 -p 9527:80 nginx
-d: 后台运行
--name 给容器命名
-p 宿主机端口, 容器内部端口
# 查看当前运行的容器
docker ps
# 启动之后,本机自测NGXIN
curl localhost:9527
# 进入到ngxin01里面
docker exec -it nginx01 /bin/bash
# 查看ngxin
whereis nginx
2, Docker 安装一个tomcat
# 官方使用方法
docker run -it --rm tomcat:9.0
我们之前的启动都是后台,停止了容器之后,容器还是可以查到的, docker run -it --rm 一般用来测试,用完删除
## 官方使用不推荐,常用的方法
docker pull tomcat
# 下载启动
docker run -d --name tomcat01 -p 3355:8080 tomcat
# 测试访问
# 进入容器
docker exec -it tomcat01 /bin/bash
3, 可视化工具
1, portainer
Docker 图形化界面管理工具,提供一个后台面板供我们操作
# 安装 portainer
docker run -d -p 8088:9000 \
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
外围访问地址: http://182.254.211.121:8088/
4, Docker镜像讲解
镜像是什么?
镜像是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件, 它包含运行某个软件所需要的所有内容,包括代码,运行时库,环境变量和配置文件。
1, UnionFS(联合文件系统)
UnionFS(联合文件系统):Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,Union文件系统是Dokcer镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的镜像。
特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统加载起来,这样最终的文件系统会包含所有的底层文件和目录
2, Docker镜像加载原理?
Docker的镜像实际上是由一层一层的文件系统构成,这种层级的文件系统UnionFS。主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的linux/unix系统是一样的,包含boot加载器内核。当boot加载完之后整个内核就都在内存中了,此时内存的使用权已经由bootfs交给内核了,此时系统也会卸载bootfs
平时我们安装进虚拟机的CentOS都是好几个G,为什么docker这里才200M
对以一个精简的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序库就行,因为底层直接用host和kernel,自己只需要提供rootfs就行。由此可见对于不同的Linux发行版,bootfs基本是一致的,rootfs会有差别,因此不同的发行版可以公用bootfs。
3, 分层的镜像
以pull为例,在下载的过程中我么可以看到docker的镜像好像是在一层一层的下载
4, 为什么Docker镜像要采用这种分层的结构?
最大一个好处就是——共享资源
比如:有多个镜像都从相同的base镜像构建而来,那么宿主机只需要在磁盘上保存一份base镜像,同时内存中也需要加载一份base镜像,就可以为所有服务器服务了。而且镜像的每一层都可以被共享。
5, Docker特点
Docker镜像都是只读的
当容器启动时,一个新的可写层被加载到镜像的顶部。
这一层通常被称作“容器层”,“容器层”之下都叫“镜像层”
6, 如何提交一个自己的镜像?
# commit 镜像
docker commit 提交容器成为一个新的副本
docker commit -m=“提交的描述信息” -a="作者" 容器ID 目标镜像名:[TAG]
举例:tomcat
(1) 启动Tomcat
(2) 查看运行的容器,并进入Tomcat
(3) 进入Tomcat之后, copy webapps.dist里面的所有内容到webapps里面,因为官方的webapps里面什么文件都没有
(4) 成功启动Tomcat之后,感觉这个镜像被修改之后,很好,可以备注提交一下
总结上面的步骤:
# 1, 启动一个默认的Tomcat
# 2, 发现这个默认的tomcat没有webapps应用,官方默认镜像原因,
# 3,把自己文件拷贝进入webpass文件
# 4, 将我们操作过的容器通过commit 提交为一个镜像,方便以后使用