项目部署环境工具docker(二)

一、镜像加载的原理

(一)docker底层结构

1.Linux文件系统由bootfs和rootfs两部分组成

 bootfs:包含bootloader(引导加载程序)和 kernel(内核)

 rootfs: root文件系统,包含的就是典型 Linux 系统中的/dev,/proc,/bin,/etc等标准目录和文件

不同的linux发行版,bootfs基本一样,而rootfs不同,如ubuntu,centos等

Docker镜像底层实际上是有多个不同的联合文件系统组成的

最底层:bootfs,并使用宿主机的bootfs-复用

第二层:root文件系统rootfs,称为base image

Union fs

然后再往上可以叠加其他的镜像文件

统一文件系统(Union File System)技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,隐藏多层的存在,我们看来只是存在一个文件系统。

所以当我们安装的tomcat镜像大小是600多MB 是因为里面还包含了jdk和centos的镜像

而centos镜像复用了宿主机的bootfs 下载的只有rootfs 所以小很多

所以tomcat>jdk(父镜像)->centos> 所以整个向外暴露就是600MB

镜像只读 当从一个镜像启动容器时, 所以docker会在镜像上面加载一个可读可写的文件系统作为容器运行。

https://hub.docker.com/_/tomcat

 

 (二)Docker Commit

主要作用:根据当前容器制作为镜像文件

流程:

  1. 从docker hub中下载一个tomcat8镜像文件;
  2. 运行tomcat8镜像文件 在tomcatwebapps 目录中新增 boyatop文件夹 index.html
  3. 将当前容器内容根据模板制作为镜像文件

1.安装一个tomcat8

 docker run -p 8081:8080   tomcat:8

2.docker exec -it 3a06b4c779a8   bash

3.cd webapps

4.mkdir boyatop

5.touch index.html

6.echo "boyatop" >>index.html

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]

1.根据当前容器作为模板制作为镜像文件

docker commit -m="boyatop tomcat" -a="boyatop"  3a06b4c779a8 boyatop-tomcat:1.0

2.在以当前自己制作的镜像文件运行

docker run -p 8088:8080   boyatop-tomcat:1.0

(三)docker数据卷

数据卷就是宿主机上的一个文件或目录

当容器目录和数据卷(宿主机)目录绑定,双方修改会立即同步操作

一个数据卷可以被多个容器同时挂载

数据卷作用:容器数据的持久化 外部机器和容器间接通信 容器之间数据交换

使用 -v命令。

1.数据卷添加的方式

容器内与宿主机实现数据的共享

数据卷--添加两种方式

(1)直接命令形式添加  docker run -it -v 宿主机绝对路径目录:容器内目录 镜像文件名称

(2)Dockerfile方式添加

2.安装Nginx实现负载均衡

(1)挂载nginx html文件

https://hub.docker.com/search?q=nginx&type=image

1.创建挂载目录
mkdir -p /data/nginx/{conf,conf.d,html,logs}

2.启动docker容器
docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html 虚拟机目录 --挂载 容器目录 /usr/share/nginx/html
上传一个 html 放入到  /data/nginx/html

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html nginx

-v /data/nginx/html: linux虚拟机目录
/usr/share/nginx/html 容器中html目录

(2)nginx .conf文件和日志文件

docker run --name nginx81 -d -p 81:80 -v /data/nginx/html:/usr/share/nginx/html \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/logs:/var/log/nginx  nginx 

\反斜杠  表示换行
/usr/share/nginx/html
/usr/share/nginx/conf
/usr/share/nginx/log

 (三)docker实战部署软件

1.安装tomcat 服务器

docker run -p 8081:8080   tomcat:8 -p 8081 :8080    
容器外部(linux虚拟机访问端口8081):8080(容器端口号)
docker ps  获取tomcat正在运行的容器id 进入到中 
docker exec -it 1210e05f1a59 bash

docker run -p 8081:8080   tomcat:8

-p 8081:8080  8081(linux虚拟机访问的端口号):8080(容器内部中端口号)

docker run -p 8081:8080 -d   tomcat:8 后台启动 ---每次运行都会创建一个新的容器

docker run --name boyatop-tomcat  -p 8081:8080 -d   tomcat:8 

--name: 指定容器名称
-p:指定容器端口号
-d:指定容器后台运行
docker run --name boyatop-tomcat    tomcat

docker run --name boyatop-tomcat1  -p 8081:8080  tomcat
8081(容器外部或者linux虚拟机访问的端口号 宿主机)
8080 容器内部的端口号
docker run --name boyatop-tomcat2022  -p 8081:8080 -d   tomcat:8 
-d 后台启动
前台启动与后台启动的区别
前台启动会打印启动日志信息
后台启动不会打印启动日志信息

2.安装Nginx实现静态服务


Docker run 运行容器

--name nginx-test:容器名称。
-p 8080:80  端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx: 设置容器在在后台一直运行。

docker  ps --- 正在运行的容器
docker ps -a 显示所有的容器 包括为运行的容器
docker ps 容器id

docker run --name nginx-boyatop -p 8080:80 nginx   默认前台启动 
docker run --name nginx-boyatop -p 8080:80 -d nginx   后台启动方式

前台与后台启动区别:

前台启动:会展示容器启动的日志信息-----
后台启动:不会展示启动日志信息 

8080:80 8080 虚拟机本地端口 ---浏览器访问 80 容器内部端口

3.安装mysql5.7

1.查询mysql版本
docker search mysql
2.下载MySQL5.7版本
docker pull mysql:5.7  (这里选择的是第一个mysql镜像, :5.7选择的5.7版本)
3.等待下载完成、创建MySQL容器
docker create --name mysql3308 -e MYSQL_ROOT_PASSWORD=root -p 3308:3306 mysql:5.7
创建容器名称为mysql3308,密码为root


1.启动容器
docker start mysql3308
2.进入到容器
docker exec -it mysql3308 bash
3.mysql连接
mysql -uroot –p

(四)docker运行底层原理

  1. 首先启动docker systemctl start docker
  2. Docker是一个CS架构的系统,docker守护进程运行在主机上,让后通过socket连接

从客户端访问,守护进程从客户端接收命令管理运行在主机上的容器。

ps aux | grep 'docker'

 网站为bs

数据卷volumes-from

容器间传递共享数据volumes-from

启动容器报错了如何解决?

先改为前台启动如果没有问题的情况下,在修改为后台启动。

容器与容器局域网

(五)DockerFile 解析

一个镜像文件到底是如何创建?

  1. dockerfile 描述出镜像文件需要的一些依赖配置和环境变量 执行命令
  2. 将我们dockerfile 文件打包成一个镜像文件
  3. 直接使用我们的容器运行到该镜像文件。
  1. 需要手动编写一个dockerfile文件
  2. 将该dockerfile  docker build 自定义成一个镜像文件
  3. docker run 运行容器

Centos镜像文件

docker run -it centos 

DockerFile编写规范

A.#描述注释

B.指令必须要大写,后面至少需要带至少一个参数;

C.指令是按照从上到下,顺序执行;

DockerFile指令

  1. FROM 指定父镜像:  基于哪个镜像image构建  指定基础镜像,必须为第一个命令
  2. MAINTAINER :维护者
  3. RUN: 容器创建的时候执行一段命令   构建镜像时执行的命令
  4. ADD: 将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
  5. COPY:功能类似ADD,但是是不会自动解压文件,也不能访问网络资源
  6. CMD:构建容器后调用,也就是在容器启动时才进行调用。 .sh执行文件
  7. ENV: 设置环境变量
  8. EXPOSE: 指定于外界交互的端口
  9. VOLUME  用于指定持久化目录
  10. WORKDIR 设置进入容器时的路径
  11. Tomcat docker File:

    tomcat/8.5/jdk8/openjdk-slim-buster/Dockerfile at 385e8403a38fab7097d4c3fed2484caba7dfd099 · docker-library/tomcat · GitHub

    https://github.com/docker-library/redis/blob/231905d0841f52ee4f3a5b8b42d62cd6d14a1a93/6.2/Dock

 

DockerFile案例

Base镜像(scratch) docker hub中的镜像都是通过base镜像中安装和配置需要的软件构建的。

构建自己centos镜像

docker run -it centos

  1. 需求定制修改centos根目录;
  2. 实现支持vim插件;

yum -y install vim 

需要自己制作一个dockerfile文件

继承docker hub中的centos

在docker hubcentos 上加入以下两个功能

A.进入容器中 默认访问目录/usr

B.实现支持vim插件

需要将该dockerfile文件打包成一个镜像文件 交给我们容器执行

定制cenos镜像

FROM  centos
MAINTAINER boyatop-yushengjun
ENV  MYPATH /usr
WORKDIR $MYPATH
RUN yum -y install vim
EXPOSE 80
CMD /bin/bash

Dockerfile→使用docker 将该Dockerfile实现打包成镜像文件→容器运行该镜像文件。

docker build---将该Dockerfile实现打包成镜像文件

将该dockerfile文件上传到linux服务器中

使用docker build -f Dockerfile -t mycs:1 .

Dockerfile ------配置文件

mycs----打包镜像文件名称

1 tag 版本号码

docker run -it mycs:1 

将springboot项目打包部署
1.基于docker原生方式 部署我们的springboot项目
Dockerfile
2.dockercompose----- 容器编排技术

springboot项目----变成镜像文件---容器运行
1.将我们springboot项目---打成一个jar包

2.定义dockerfile文件-----描述出springboot项目 配置依赖和环境变量
JDK
注意:springboot内置嵌入我们的tomcat服务器 所以不需要额外的tomcat容器来
运行。
原生方式运行我们的jar包 
Java- jar指令 
2.需要先将我们外部jar,拷贝到容器中
3.容器运行成功执行java -jar
2.将该dockerfile文件打包成镜像文件-





1.将springboot项目打包;
2.制作dockerfile文件;
A.继承我们的jdk环境
B.将我们本地的jar包拷贝到容器中
C.Java -jar
  
3.将dockerfile文件打包成镜像文件;
4.运行该镜像文件即可;
将springboot项目打包

mvn clean package 

制作dockerfile文件
# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER www.boyatop.com
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为boyatop.jar
ADD boyatop-thymeleaf-1.0-SNAPSHOT.jar boyatop.jar
# 运行jar包
RUN bash -c 'touch /boyatop.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/boyatop.jar"]
#暴露8080端口
EXPOSE 8080
打包成镜像文件

docker build -f Dockerfile -t boyatop-member:1 .

docker build -f Dockerfile -t boyatop-member:1 .

启动容器

docker run -p 8070:8080   boyatop-member:1

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值