SpringCloud-Day5-Docker
Docker
1.初始Docker
Docker是一个快速交付应用、运行应用的技术:
-
可以将程序及其依赖、运行环境一起打包为一个镜像,可以迁移到任意Linux操作系统
-
运行时利用沙箱机制形成隔离容器,各个应用互不干扰
-
启动、移除都可以通过一行命令完成,方便快捷
2.Docker与虚拟机的差别
Docker和虚拟机的差异:
-
docker是一个系统进程;虚拟机是在操作系统中的操作系统
-
docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般
3.Docker架构
3.1镜像和容器
镜像:Docker将应用程序以及所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像。
容器:镜像中的应用程序运行后形成的进程就是容器,只是Docker会给容器做隔离,对外不可见。
3.2DockerHub
DockerHub:DockerHub是一个Docker镜像的托管平台,这样的平台称为Docker Registry。
3.3Docker架构
Docker是一个CS架构,由两部分组成:
- 服务端(server):Docker守护进程,负责Docker指令,镜像管理,容器等。
- 客户端(client) : 通过命令或RestAPI向Docker服务端发送指。可以在本地或远程服务端发送指令。
4.Docker安装-CentOS环境
4.1安装CentOS
5.Docker基本操作
5.1镜像操作-镜像相关命令
- 镜像名称一般有两部分组成:[repository]:[tag]
- 在没有指定tag时,默认是latest,代表最新版本的镜像
5.2容器操作-容器相关命令
查看容器状态:
- docker ps
- 添加-a参数查看所有状态的容器
删除容器:
-
docker rm
-
不能删除运行中的容器,除非添加 -f 参数
进入容器:
-
命令是docker exec -it [容器名] [要执行的命令]
-
exec命令可以进入容器修改文件,但是在容器内修改文件是不推荐的
5.3数据卷
容器与数据耦合的问题
数据卷:是一个虚拟目录,指向宿主机文件系统中的某个目录。
数据卷的作用:
- 将容器与数据分离,解耦合,方便操作容器内数据,保证数据安全
数据卷操作:
- docker volume create
- docker volume ls
- docker volume inspect
- docker volume rm
- docker volume prune
5.4数据卷挂载
数据卷挂载方式:
-
-v volumeName: /targetContainerPath
-
如果容器运行时volume不存在,会自动被创建出来
6.Dockerfile自定义镜像
1.Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
2.Dockerfile的第一行必须是FROM,从一个基础镜像来构建
3.基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如:java:8-alpine
6.1镜像结构
镜像:将应用程序及其需要的系统函数库、环境、配置、依赖打包而成
6.2Dockerfile语法
Dockerfile:就是一个文本文件,其中包含一个个的指令(Instruction),用指令来说明要执行什么操作来构建镜像。每一个指令都会形成一层Layer。
# 指定基础镜像
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
更新详细语法说明,请参考官网文档: https://docs.docker.com/engine/reference/builder
6.3构建java项
# 指定基础镜像
FROM java:8-alpine
# 拷贝java项目的包
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar
7.DockerCompose
7.1初始DockerCompose
DockerCompose:可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器!
Compose文件:是一个文本文件,通过指令定义集群中的每个容器如何运行。
DockerCompose的详细语法参考官网:https://docs.docker.com/compose/compose-file/
7.2 部署微服务集群
8.Docker镜像仓库
镜像仓库( Docker Registry )有公共的和私有的两种形式:
-
公共仓库:例如Docker官方的 Docker Hub,国内也有一些云服务商提供类似于 Docker Hub 的公开服务,比如 网易云镜像服务、DaoCloud 镜像服务、阿里云镜像服务等。
-
除了使用公开仓库外,用户还可以在本地搭建私有 Docker Registry。企业自己的镜像最好是采用私有Docker Registry来实现。