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 数据卷名称:容器内目录 就能将挂载数据卷到容器中. :::
3.解决容器与容器内文件耦合其他方法
:::info 目录挂载与数据卷挂载的语法是类似的:
-v [宿主机目录]:[容器内目录]
- -v [宿主机文件]:[容器内文件]
:::
6.Dockerfile自定义镜像
1.镜像结构
:::info
镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。
:::
2.Dockerfile指令
语法参考
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
<a name="lFNXg"></a>### 方式二:基于其他镜像基础:::info1.新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile<br />2.将项目jar包拷入文件夹<br />3.编写Dockerfile文件:- a 基于java:8-alpine作为基础镜像- b 将app.jar拷贝到镜像中- c 暴露端口- d 编写入口ENTRYPOINT4.使用docker build命令构建镜像<br />5.使用docker run创建容器并运行:::```xmlFROM java:8-alpineCOPY ./app.jar /tmp/app.jarEXPOSE 8090ENTRYPOINT java -jar /tmp/app.jar
注意:
:::info
- Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
- Dockerfile的第一行必须是FROM,从一个基础镜像来构建
- 基础镜像可以是基本操作系统,如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 显示某个局域网络信息 :::
