1.相关问题:

1.什么是容器化技术? 把软件代码和所需的所有组件打包在一起,让它们隔离在自己的“容器”中。

2.docker的作用? 使用docker可以解决什么问题? 作用:搬运软件整体环境,将软件环境快速迁移 解决的问题: 1.Docker允许开发中将应用、依赖、函数库、配置一起打包,形成可移植镜像,Docker应用运行在容器中,使用沙箱机制,相互隔离 ,解决大型项目依赖关系复杂,不同组件依赖的兼容性问题 2.Docker镜像中包含完整运行环境,包括系统函数库,仅依赖系统的Linux内核,因此可以在任意Linux操作系统上运行,解决开发、测试、生产环境有差异的问题

3.Docker和虚拟机的区别? 1.docker是一个系统进程;虚拟机是在操作系统中的操作系统 2.docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般

4.数据卷是什么?有什么用?如何使用? 问题:容器内数据严重和容器耦合,不方便操作容器内数据 数据卷:是一个虚拟的目录,指向宿主机文件系统中的某个目录。 作用:解决容器与容器内文件耦合,方便操作容器内数据,保证数据安全 如何使用:在docker run的命令中通过 -v 数据卷名称:容器内目录 就能将挂载数据卷到容器中

2.容器化技术Docker:

1.Docker的概念

:::info Docker是一个快速交付应用、运行应用的技术 :::

2.Docker的优势

:::info

  • 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
  • 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  • 启动、移除都可以通过一行命令完成,方便快捷 :::

    3.Docker和虚拟机的差异

    :::info

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统

  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般 :::

    3.Docker架构

    1.Docker的相关名词

    :::info 1.镜像(Image):Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
    2.容器(Container):镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器进程做隔离,对外不可见。 :::

    2.DockerHub

    仓库地址 :::info DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。
    作用:用于镜像的共享和拉取 :::

    3.Docker结构

    :::info Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server):接收命令或远程请求,操作镜像或容器

  • 客户端(client):发送命令或者请求到Docker服务端 :::

    注意:要使用Docker来操作镜像、容器,就必须要安装Docker.

    4.安装Docker

    安装链接

    5.数据卷

    1.数据卷概念及其作用

    :::info 数据卷:是一个虚拟的目录,指向宿主机文件系统中的某个目录。
    作用:解决容器与容器内文件耦合,方便操作容器内数据,保证数据安全 :::

    2.挂载数据卷

    :::info 在docker run的命令中通过 -v 数据卷名称:容器内目录 就能将挂载数据卷到容器中. ::: image.png

    3.解决容器与容器内文件耦合其他方法

    :::info 目录挂载与数据卷挂载的语法是类似的:

  • -v [宿主机目录]:[容器内目录]

  • -v [宿主机文件]:[容器内文件] :::

    6.Dockerfile自定义镜像

    1.镜像结构

    image.png :::info 镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。 :::

    2.Dockerfile指令

    语法参考
    image.png

    3.构建自定义镜像的方式

    方式一:自己搭建

    :::info 1.新建空文件夹
    2.将项目jar包拷入文件夹
    3.将jdk8.tar.gz拷入文件夹
    4.将Dockerfile脚本拷入文件夹
    5.将文件夹上传到虚拟机
    6.在文件夹目录下运行docker build -t javaweb:1.0 . 命令 ::: ```xml

    指定基础镜像

    FROM ubuntu:16.04

    配置环境变量,JDK的安装目录

    ENV JAVA_DIR=/usr/local

拷贝jdk和java项目的包

COPY ./jdk8.tar.gz $JAVA_DIR/ COPY ./docker-demo.jar /tmp/app.jar

安装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

暴露端口

EXPOSE 8090

入口,java项目的启动命令

ENTRYPOINT java -jar /tmp/app.jar

  1. <a name="lFNXg"></a>
  2. ### 方式二:基于其他镜像基础
  3. :::info
  4. 1.新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile<br />2.将项目jar包拷入文件夹<br />3.编写Dockerfile文件:
  5. - a 基于java:8-alpine作为基础镜像
  6. - b 将app.jar拷贝到镜像中
  7. - c 暴露端口
  8. - d 编写入口ENTRYPOINT
  9. 4.使用docker build命令构建镜像<br />5.使用docker run创建容器并运行
  10. :::
  11. ```xml
  12. FROM java:8-alpine
  13. COPY ./app.jar /tmp/app.jar
  14. EXPOSE 8090
  15. ENTRYPOINT java -jar /tmp/app.jar

注意:

:::info

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine :::

    7.相关操作指令

    1.镜像

    :::info tag表示版本 不写默认latest,代表最新版本稳定的镜像
    docker images 查看镜像
    docker pull 镜像名:tag 从服务拉取镜像
    docker rmi 镜像名:tag 删除镜像
    docker save -o Xxx.tar 镜像名:tag 镜像名:tag 保存镜像为压缩包
    docker load -i Xxx.tar 加载压缩包为镜像
    docker build -t 镜像名:tag . 构建镜像
    docker push 镜像名:tag 推送镜像到服务 :::

    2.容器

    :::info docker run \
    —name 容器名 \
    -d \ #后台运行
    -p 宿主机端口:容器内软件端口 \ #将宿主机端口与容器端口映射
    -v 数据卷名:/容器内的目录 \ #挂载数据卷(直接挂载就会自动创建)容器内容会先同步到数据卷
    -v /文件夹:/容器内的文件夹 \ #挂载文件夹 宿主机内容覆盖容器 宿主机为主
    -v /文件:/容器内的文件 \ #挂载文件 宿主机内容覆盖容器 宿主机为主
    镜像名:tag 创建并运行一个容器
    docker ps 查看所有运行的容器和状态
    docker ps -a 查看所有容器
    docker logs -f 容器名 持续查看容器日志
    docker pause 让一个运行的容器暂停
    docker unpause 让一个容器从暂停状态恢复运行
    docker stop 容器名 停止一个运行的容器
    docker start 容器名 让一个停止的容器再次运行
    docker rm 容器名 删除容器
    docker rm -f 容器名 强制删除容器
    docker update —restart=always 容器名 设置容器开机自启
    —restart具体参数值详细信息:
    no - 容器退出时,不重启容器;
    on-failure - 只有在非0状态退出时才从新启动容器;
    always - 无论退出状态是如何,都重启容器; :::

    3.数据卷

    :::info docker volume create 数据卷名 创建一个数据卷
    docker volume ls 列出所有的数据卷
    docker volume rm 数据卷名 删除一个或多个指定的数据卷
    docker volume prune 删除未使用的数据卷
    docker volume inspect 显示一个或多个数据卷的信息 :::

    4.网络

    :::info docker network create 网络名称 创建一个docker局域网络
    docker network connect 容器名 to 网络名称 将某个容器连接到一个docker网络
    docker network ls 显示所有docker局域网络
    docker network rm 网络名称 删除docker网络
    docker network prune 删除所有未引用的docker局域网络
    docker network inspect 显示某个局域网络信息 :::