将微服务运行在Docker上

 将微服务运行在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微服务架构实战》

你可能感兴趣的:(云原生,Docker)