1、DevOps是什么?

  • DevOps包含development和operations,是开发和运营维护的总称。软件设计过程中,应对开发部门,运维部门进行协调,确保各项工作流程与方法高效使用。

2、什么是docker?

  • 快速交付应用,运行应用的容器技术。

3、如何使用Docker构建与环境无关的系统?

  • docker有三个特定的功能用于建立与环境无关的系统
  • 数据卷
  • 环境变量
  • 只读文件系统

4、Dockerfile中的命令COPY和ADD命令有什么区别?

  • copy和add命令的区别为是否支持从远程URL获取资源
  • copy命令只能从执行构建的宿主机上读取资源并复制到镜像中。
  • add命令支持通过URL获取远程服务器中的资源并加载到镜像中。

5、什么是Docker镜像?

  • 就是一个系统的安装包,包含了系统的各种环境或者服务。

6、什么是Docker容器?

  • 镜像运行时的实体(系统)

7、什么是Docker Hub?

  • Docker的中央仓库,用于存放Docker官方提供的镜像文件。

8、Dockerfile中最常见的指令是什么?

  • from 指定基础镜像(运行的系统)
  • env 设置一些环境变量
  • copy 将本地的资源到镜像指定的目录
  • run 用于执行linux的命令
  • entrypoint 用于镜像中应用的启动命令,例如java -jar

9、Docker run常用的参数有那些?(至少写5个,并且说明作用和使用场景)

  • -p 用于外界访问容器时,将容器的端口映射到宿主机。
  • -d 用于将容器至于后台运行
  • -v 用于给容器挂载一个数据卷,适用于要修改容器内部的一些信息时。
  • –name 用于给容器取一个名字。
  • -e 设置容器的一些环境变量,适用于容器需要某一项配置在容器全局均可使用的场景。

10、如何把开发环境迁移到测试环境?

  • 将开发环境中使用的服务,依赖,函数库等,制作成一个镜像,将镜像文件拷贝到测试环境即可。

11、Docker容器有几种状态?

  • 创建
  • 暂停
  • 运行
  • 停止

12、Docker常用命令有那些?(至少写20个,并且说明作用和使用场景)

  • docker load 加载镜像文件,适用于将打包好的镜像文件加载到docker中。
  • docker save 将镜像文件进行打包,适用于将一些镜像文件进行传输给他人等情况。
  • docker pull 用于镜像文件的下载,适用于要下载镜像文件时。
  • docker push 上传镜像 ,适用于将自己做好的镜像文件进行上传等情景。
  • docker images 查看docker中所有的镜像文件,适用于需要查看自己是否下载该镜像等情景。
  • docker rmi 删除镜像文件,适用于不需要某个镜像文件,需要删除时。
  • docker search 搜索镜像文件, 使用于需要下载某个镜像时,可以直接使用搜索,不需要去官网。
  • docker run 用于创建并启动容器。适用于需要启动某个服务时。
  • docker stop 停止容器,适用于不在需要某个服务,可以用于停止该服务
  • docker start 启动容器,适用于启动暂停或只创建了并没有运行的容器。
  • docker rm 删除容器,适用于不需要某个容器时,将这个容器进行删除。
  • docker inspect 查看容器的详细信息,比如容器的ip,环境变量的位置,端口等信息。
  • docker version 查看docker客户端和服务端的版本信息,适用于查看docker是否成功安装,或查看安装的docker的版本信息。
  • docker restart 重启容器 , 适用于修改了容器的一些配置信息,需要重新加载等情况。
  • docker rename 给容器重命名, 适用于一些容器名称重复时,给容器改名等情况。
  • docker port 查看容器所有的映射端口, 适用于需要查看容器的开放端口和映射宿主机的端口。
  • docker pause 暂停容器 ,适用于短时间不需要某个容器时。
  • docker unpause 将暂停的容器恢复运行状态, 适用于将暂停的容器恢复成运行状态。
  • docker logs 查看容器的日志,适用于需要查看某个容器的运行日志时。
  • docker exec 进入指定的容器内部,适用于需要进入容器做一系列处理等情况。
  • docker create 创建一个容器 ,适用于创建一个容器但是不需要它运行时。

13、Docker的4中网络模式是那些?作用是?

  • host模式 :使用host模式后,容器不会虚拟出自己的网卡,ip地址,将会使用宿主机的ip,主机名等。
  • container模式:容器会和另一个已经运行的容器的主机名和ip相等。
  • none模式:容器有自己的network namespace,但是不存在主机名和IP地址,需要我们自己为容器配置ip地址。
  • bridge模式:为docker的默认网络设置,会给每一个容器分配独立的network namespace ,设置ip地址,并将同一个宿主机上所有的容器连接到同一个虚拟网桥上。

14、Docker容器之间互相访问的3种访问方式?

  • 虚拟ip访问:创建容器时,如果不指定特定的网络模式,则容器会默认设置网络模式为bridge模式,此模式会给每个容器都设置一个ip地址,并将同一宿主机上的所有容器连接到同一个网桥上,此时容器之间可以通过容器的ip地址进行互相访问。
  • 使用link参数 : 在运行容器时,添加–link 参数,并跟上要访问的容器的名称:给容器取个别名。
  • 创建网桥:将容器连接到网桥,此时在同一个网桥上的容器可以互相访问。

15、Docker为什么启动非常的快?

  • docker与宿主机共享硬件,在cpu,内存的利用率上docker的效率更高。
  • 在新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统的内核这样费时的操作。

1、安装Mysql5.7版本的按照命令是?

要求:1、删除容器不影响数据库存在的数据;2、可以在宿主机上连接安装好的Mysql

  • 下载mysql5.7的镜像文件
docker pull mysql:5.7
  • 创建并运行mysql容器
docker run --name mysql -v /tmp/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=1234 -d -p 3307:3306 mysql:5.7
  • 成功连接
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LgtWbp11-1655126530387)(C:\Users\BZQZB\AppData\Roaming\Typora\typora-user-images\1655120123565.png)]

2、使用Dockerfile构建一个含有jdk环境的镜像.【预习剩余视频后完成】

要求:jdk版本1.8

  • 编写Dockerfile文件
# 指定基础镜像
FROM centos:7
# 配置环境变量,JDK的安装目录
ENV JAVA_DIR=/usr/local

# 拷贝jdk
COPY ./jdk8.tar.gz $JAVA_DIR/

# 安装JDK
RUN cd $JAVA_DIR \
 && tar -xf ./jdk8.tar.gz \
 && mv ./jdk1.8.0_144 ./java8

# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
  • 使用docker bulid 命令构建镜像
docker build -t jdk:8 .
  • 构建镜像成功

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nka4y6rN-1655126530388)(C:\Users\BZQZB\AppData\Roaming\Typora\typora-user-images\1655123294211.png)]

遇到的问题:

在完成镜像的构建时,出现发送上下文到守护线程的数据过大的情况。提示:
Sending build context to Docker daemon 6.659GB

看到数据过大,第一时间考虑肯定有问题,检查是否是基础镜像有问题,并将基础镜像改为目前使用的镜像Centos:7.6 由此引发了第二个错误。invalid reference format: repository name must be lowercase ,基础的镜像必须为小写,再次将基础镜像改为centos:7.6 再次引出了第三个错误manifest for centos:7.6 not found: manifest unknown: manifest unknown。 发现找不到版本为7.6的的基础镜像。最后在面向百度的情况下,将基础镜像改为了一个存在的centos:7。 再次面对百度,发现在进行镜像的构建时会加载于Dockerfile文件同目录下的所有文件,于是创建一个新的文件夹,用于存放Dockerfile文件和相应的tar.gz包,再次构建时就未出现加载数据过大的问题。