目录
注意:要使用Docker来操作镜像、容器,就必须要安装Docker.
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的概念
Docker是一个快速交付应用、运行应用的技术
2.Docker的优势
- 可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
- 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
- 启动、移除都可以通过一行命令完成,方便快捷
3.Docker和虚拟机的差异
- docker是一个系统进程;虚拟机是在操作系统中的操作系统
- docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
3.Docker架构
1.Docker的相关名词
1.镜像(Image)
:Docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
2.容器(Container)
:镜像中的应用程序运行后形成的进程就是
容器
,只是Docker会给容器进程做隔离,对外不可见。
2.DockerHub
DockerHub是一个官方的Docker镜像的托管平台。这样的平台称为Docker Registry。
作用:用于镜像的共享和拉取
3.Docker结构
Docker是一个CS架构的程序,由两部分组成:
- 服务端(server):接收命令或远程请求,操作镜像或容器
- 客户端(client):发送命令或者请求到Docker服务端
注意:要使用Docker来操作镜像、容器,就必须要安装Docker.
4.安装Docker
5.数据卷
1.数据卷概念及其作用
数据卷:是一个虚拟的目录,指向宿主机文件系统中的某个目录。
作用:解决容器与容器内文件耦合,方便操作容器内数据,保证数据安全
2.挂载数据卷
在docker run的命令中通过 -v 数据卷名称:容器内目录 就能将挂载数据卷到容器中.
3.解决容器与容器内文件耦合其他方法
目录挂载与数据卷挂载的语法是类似的:
- -v [宿主机目录]:[容器内目录]
- -v [宿主机文件]:[容器内文件]
更改容器文件的三种方法
6.Dockerfile自定义镜像
1.镜像结构
镜像就是在系统函数库、运行环境基础上,添加应用程序文件、配置文件、依赖文件等组合,然后编写好启动脚本打包在一起形成的文件。
2.Dockerfile
指令
3.构建自定义镜像的方式
方式一:自己搭建
1.新建空文件夹
2.将项目jar包拷入文件夹
3.将jdk8.tar.gz拷入文件夹
4.将Dockerfile脚本拷入文件夹
5.将文件夹上传到虚拟机
6.在文件夹目录下运行docker build -t javaweb:1.0 . 命令
# 指定基础镜像 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.新建一个空的目录,然后在目录中新建一个文件,命名为Dockerfile
2.将项目jar包拷入文件夹
3.编写Dockerfile文件:
- a 基于java:8-alpine作为基础镜像
- b 将app.jar拷贝到镜像中
- c 暴露端口
- d 编写入口ENTRYPOINT
4.使用docker build命令构建镜像
5.使用docker run创建容器并运行
FROM java:8-alpine COPY ./app.jar /tmp/app.jar EXPOSE 8090 ENTRYPOINT java -jar /tmp/app.jar
注意:
- Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
- Dockerfile的第一行必须是FROM,从一个基础镜像来构建
- 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine
7.相关操作指令
1.镜像
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.容器
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 restart 容器id 重启容器
docker update –restart=always 容器名 设置容器开机自启
–restart具体参数值详细信息:
no – 容器退出时,不重启容器;
on-failure – 只有在非0状态退出时才从新启动容器;
always – 无论退出状态是如何,都重启容器;
3.数据卷
docker volume create 数据卷名 创建一个数据卷
docker volume ls 列出所有的数据卷
docker volume rm 数据卷名 删除一个或多个指定的数据卷
docker volume prune 删除未使用的数据卷
docker volume inspect 显示一个或多个数据卷的信息
4.网络
docker network create 网络名称 创建一个docker局域网络
docker network connect 容器名 to 网络名称 将某个容器连接到一个docker网络
docker network ls 显示所有docker局域网络
docker network rm 网络名称 删除docker网络
docker network prune 删除所有未引用的docker局域网络
docker network inspect 显示某个局域网络信息