将微服务运行在Docker上,首先要把服务制作成镜像,然后将镜像推送到公有仓库或私有仓库(可选步骤),最后像使用其他镜像的方式一样,使用我们的镜像。
本文将展示三种将微服务运行在Docker上的方式:1)通过Dockerfile;2)通过maven插件;3)通过Docker Compose
一、Dockerfile的方式
Dockerfile是一个文本文件,其中包含了若干指令,指令描述了构建镜像的细节,将部署包和Dockerfile放在同一个目录,通过docker build命令将Dockerfile所在目录的所有内容按Dockerfile配置的信息进行镜像制作。
1、Dockerfile指令
1)FROM:指定基础镜像,需要放在所有指令之前,表示当前要做的镜像是从FROM基础镜像继承。
FROM
FROM :
例如:FROM java:8
2)ADD:复制文件:将Dockerfile目录下的文件复制到生成的镜像中的文件
ADD
例如:ADD test.jar a.jar
3)COPY:复制文件,不支持URL和压缩包的复制
COPY
4)ENV:设置环境变量
ENV
ENV =
例如:ENV JAVA_HOME /path/to/java
5)ARG:设置构建参数,即构建时的环境变量,容器运行时是不会存在这些变量的
ARG =
例如:ARG name=houzigege
6)ENTRYPOINT:入口点,同CMD命令,且也是多个只有最后一个才被执行
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2 #在shell中执行
例如:ENTRYPOINT ["java", "-jar", "a.jar"]
7)CMD:容器启动时执行的命令,多个CMD只有最后一条被执行
CMD ["executable", "param1", "param2"]
CMD["param1", "param2"] #为ENTRYPOINT指令提供预设参数
CMD command param1 param2 #在shell中执行
例如:CMD echo "this is show when contaniner is starting"
8)RUN:执行命令
RUN
RUN ["executable", "param1", "param2"]
例如:["/bin/bash", "-c", "echo hello"]
9)VOLUME:指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,该目录可被容器本身使用,也可共享给其他容器
VOLUME /path
10)WORKDIR:指定工作目录,写在该指令后的RUN,CMD,ENTRYPOINT会将该目录作为当前目录,并执行相应的命令
WORKDIR /path/workdir
11)EXPOSE:用于声明在运行时容器提供服务的端口,这只是一个声明,其作用是帮助镜像使用者理解该镜像服务的守护端口
EXPOSE port1
EXPOSE port1 port2 port3
12)MAINTAINER:指定维护者的信息,用于为Dockerfile署名
MAINTAINER 猴子哥哥
13)USER:设置用户,用于启动镜像时的用户或者UID
USER 用户名
14)LABEL:为镜像添加元数据,一些描述性数据
LABEL =
2、制造镜像
1)创建Dockerfile文件,参考1中所需指令
2)将jar包放在Dockerfile所在目录
3)docker build命令
docker build -t 仓库名称/镜像名称:标签 .
注:其中.表示当前目录
镜像重命名命令
docker tag 原镜像名:原标签 新镜像名:新标签
3、推送到私有仓库
1)登录
docker login ip:port
输入用户名密码
2)推送到仓库
docker push image:tag
注:push的镜像名称格式需满足
ip:port/{project_name}/image:tag
二、使用Maven插件构建Docker镜像
// TODO
三、使用Docker Compose编排微服务
// TODO
如需查看Docker基础命令,请参考:https://blog.csdn.net/qq_21033663/article/details/84963204
参考:《Spring Cloud与Docker微服务架构实战》