docker--学习(一)

一、什么是Docker

1.docker简介

之前的部署方式要想部署一个web应用,我们需要完成以下步骤:

  • 安装jdk
  • 安装tomcat
  • 安装mysql
  • 打包项目并部署

分布式微服务项目,意味着一个大型的项目将为拆分成很多个小应用(服务),30-100个服务都是有可能的。

Docker就出现了。

Docker解决什么问题:

  • 将部署的工作提前完成,只需要通过一个命令就可以做到,一次打包,到处运行

  • docker充分使用了镜像+容器的技术方案,让部署做到秒级启动——快!

2.docker实现的虚拟化

1)docker实现了虚拟化

docker提供的是一个沙盒机制,每次运行将会产生一个沙盒——虚拟机。

使用docker创建了10个沙盒,相当于创建了10台虚拟机。

docker run tomcat

安装了tomcat,安装了一个ubuntu系统,该系统中安装了tomcat。

2)什么是虚拟化?

虚拟出的电脑。虚拟硬件,让软件在虚拟的硬件上跑。

  • vmware: 做虚拟化。

  • docker: 也在做虚拟化。

    特点:占用的空间非常的小。

    ​ 秒级甚至毫秒级启动。

    ​ 方便管理、安全、沙盒。

3) docker是如何实现虚拟化的。

4)docker和传统虚拟机的比较

特性 Docker容器 虚拟机
启动 秒级 分钟级
硬盘使用 一般为 MB 一般为 GB
性能 接近原生 弱于
系统支持量 单机支持上千个容器 一般几十个

3.docker引擎的执行流程

4.docker引擎的内部结构

5.容器、镜像、仓库

  • 仓库: 存放镜像的仓库,一般分为官方仓库和私有仓库。
    • 公共仓库:官方:hub.docker.com、https://www.daocloud.io/
    • 私有仓库: 企业内部建立的 比如 registry
  • 镜像:好比面向对象中的类。一个模版,供下载,下载完后可以用镜像创建容器
  • 容器:好比面向对象中的对象。使用镜像创建容器,一个镜像可以创建多个容器

二、docker的安装

执行该命令即可:

apt-get install docker.io

2.配置镜像加速器

  • 编辑该文件vi /etc/default/docker,添加内容
{
  "registry-mirrors": ["https://ohfqk9xf.mirror.aliyuncs.com"]
}
  • 重启服务
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

三、镜像操作

1.常用的命令

# 拉去镜像
docker pull tomcat:8.5.23

# 查看当前本地所有的镜像
docker images

# 删除镜像,注意:要删除镜像的前提是保证该镜像没有运行相应的容器,要把容器先删掉。
docker rmi 镜像id(写前三位即可)

# 使用镜像创建容器
docker run -p 8080:8080 tomcat:8.5.23

# 运行并进入容器
docker run -it \ # 以交互式终端的方式进入到容器内部
 --rm \ #退出容器后 该容器会被删除
 tomcat
bash  # shell命令, bash是shell命令(中文)中的一种语言(普通话)

#进入正在运行的容器
docker exec -it 容器id bash

其中的tag中的latest是拉取时默认的tag,latest会使用最近最稳定的版本,可以通过hub.docker.com来查看latest对应的版本。

重要的发现

- 当进入到容器内部时,原来tomcat镜像就是一个linux系统里装了tomcat软件而已。
可以通过tomcat镜像的Dockerfile文件来查看到,tomcat镜像是安装在ubuntu系统之上的。
- 官方打镜像的时候,是把tomcat安装在/usr/local下面的,而且进入到镜像中默认路径是:/usr/local/tomcat

2.镜像的体积

Tomcat8.5.23和tomcat8.5.24 在列出镜像时发现都是600多mb,但是镜像是分层存储的,因此这两个镜像中有很多层是相同的,所以会共用,因此两个镜像加起来的体积大小不会是600*2。

3.以交互方式进入到正在运行的容器

docker exec -it 容器id bash

4.虚悬镜像

在自定义镜像过程中,会出现覆盖之前构建好的镜像,那么之前构建好的镜像就成为了虚悬镜像。

通过命令来删除,删除时要先删除虚悬镜像创建出的容器

docker image prune

5.关于端口映射

用镜像启动容器时,使用-p进行端口映射,让宿主机的端口映射到容器暴露出的端口上。

docker run -p 8080:8080 tomcat

四、使用Dockerfile制作自定义镜像

1.前提

我们在使用docker pull tomcat的时候拉取的官方的tomcat镜像,实际上我们要用容器来部署我们的项目,我们要想实现的效果:使用官方的tomcat,在tomcat里部署我们自己的项目。

2.实现逻辑

3.Dockerfile的介绍

官方打包tomcat镜像时也是用Dockerfile文件的。要想实现自定义镜像,就必须通过Dockerfile文件来实现。

步骤:

  • 创建Dockerfile文件
  • 编写Dockerfile文件的内容:
FROM tomcat:8.5.23 # 设置基础镜像,表示当前镜像是基于8.5.23来打包的
WORKDIR /usr/local/tomcat/webapps/ROOT/ # 设置工作路径:进入到当前路径下,而且我们进入容器时默认的路径就是这个。
RUN echo “hello”>>index.html # RUN 执行具体的命令的指令
  • 使用docker build命令来构建镜像
docker build -t 自定义镜像名 . #必须在Dockerfile的同级目录内构建,后面的.不要忘记了

  • 使用自定义镜像来创建容器

  • 具体步骤

    ##自己完成的具体步骤,使用Dockerfile制作自定义镜像(详细)
    
    1.进入 cd /usr/local/docker/目录下
    2.查看是否已有tomcat目录 :有的话删掉它 :rm -rf tomcat/
    3.继续在第一步目录下创建文件夹 mkdir dockerfile
    4.进入cd dockerfile 文件下
    5.在当前目录下创建 mkdir mytomcat
    6.进入 cd mytomcat下  
    7.使用 vi dockerfile去配置文件
    	FROM tomcat:8.5.23 # 设置基础镜像,表示当前镜像是基于8.5.23来打包的
    	WORKDIR /usr/local/tomcat/webapps/ROOT/ # 设置工作路径:进入到当前路径下,而且我们进入容器时默认的路径就是这个。
    	RUN echo “hello”>>index.html # RUN 执行具体的命令的指令
    8.docker build -t 自定义镜像名 . 
      上一步例如:docker build -t mytomcat:1.0.0 . #构建一个mytomcat:1.0.0的自定义镜像
    
    9.成功后:可以查看一下所有镜像 docker images
    10.使用命令运行:docker run -p 8080:8080 -d 自定义镜像名(mytomcat:1.0.0)
    11.使用命令:docker exec -it CONTAINERID(容器ID:可通过 docker ps查看) bash 后,工作路径会发生改变,进入容器内部
    

4.用Dockerfile制作ssm项目的镜像

FROM tomcat:8.5.23
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -rf * # 删除root下的所有的东西
COPY ./ROOT.tar.gz ./ # 复制当前docker客户端下的路径下的ROOT.tar.gz到当前工作路径下
RUN tar -zxvf ROOT.tar.gz # 解压缩
RUN rm -rf ROOT.tar.gz #删除压缩包
WORKDIR /usr/local/tomcat #切换回工作路径

简化之前的COPY命令,简化成ADD

FROM tomcat:8.5.23
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -rf * # 删除root下的所有的东西
ADD ./ROOT.tar.gz ./ # 复制当前docker客户端下的路径下的ROOT.tar.gz到当前工作路径下,自动解压并删除
WORKDIR /usr/local/tomcat #切换回工作路径

具体步骤

#自己完成的具体步骤(详细)
1.将自己的ssm项目放到下载的文件tomcat中的webapps下运行bin/startup.sh命令,它会自动解压,然后将解压后的文件夹打包成zip
2.在虚拟机root用户下,进入cd /usr/local/docker/
3.创建 mkdir 项目文件夹(library_ssm) 并进入到此目录下
4.将刚刚打包的zip项目包上传到此文件目录下
5.将其 unzip library_ssm.zip 解压 并删除zip包 rm -rf library_ssm.zip
6.进入解压后的目录 cd library_ssm/后,将下面的文件打包 tar -zcvf ROOT.tar.gz ./  #其中的ROOT是自己定义的  ./表示当前目录下的文件
7.通过 mv ROOT.tar.gz ../ 移除到上一级目录,然后退出 cd ..,将刚刚的多余解压后的文件夹删除 rm -rf library_ssm/
8.在当前目录创建Dockerfile文件: vi Dockerfile
9.向Dockerfile中添加下面内容
FROM tomcat:8.5.23
WORKDIR /usr/local/tomcat/webapps/ROOT/
RUN rm -rf * # 删除root下的所有的东西
COPY ./ROOT.tar.gz ./ # 复制当前docker客户端下的路径下的ROOT.tar.gz到当前工作路径下
RUN tar -zxvf ROOT.tar.gz # 解压缩
RUN rm -rf ROOT.tar.gz #删除压缩包
WORKDIR /usr/local/tomcat #切换回工作路径

10.运行  docker run -p 8080:8080 -d library_ssm:1.0.0
11.浏览器中测试

五、Dockerfile中的指令

  • FROM 指定基础镜像

  • WORKDIR 指定工作路径

  • RUN 运行shell命令

  • COPY 复制当前路径下的文件内容到镜像里面

  • ADD 复制当前路径下的文件内容到镜像里面然后解压缩然后删除压缩包

  • EXPOSE: 镜像创建容器后,容器暴露出的端口,用于被宿主机映射

  • CMD 容器启动时执行的命令, 比如 容器启动时运行tomcat,这个命令在dockerfile中只能使用一次

  • ENTRYPOINT 如果让容器启动时执行多条命令。cmd只能执行一次,但是ENTRYPOINT可以执行多次

  • ENV 设置环境变量

  • VOLUME 数据卷

tomcat的官方dockerfile:https://blog.csdn.net/gongxiaojiu/article/details/74935947

1.创建mysql容器的docker命令:

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7.25
posted @ 2021-07-21 15:57  牛奶配苦瓜  阅读(52)  评论(0编辑  收藏  举报