微服务部署 Dockerfile入门
Dockerfile
1.1
什么是
Dockerfile
Dockerfile
是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个
新的镜像。
1
、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2
、对于测试人员:可以直接拿开发时所构建的镜像或者通过
Dockerfile
文件构建一个新
的镜像开始工作了;
3
、对于运维人员:在部署时,可以实现应用的无缝移植。
1.2
常用命令
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
ENV key value 设置环境变量
(
可以写多条
)
RUN command 是
Dockerfile
的核心部分
(
可以写多条
)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件, 将会在复制后自动解压
COPY source_dir/file dest_dir/file 和
ADD
相似,但是如果有压缩文件并不能解压
WORKDIR path_dir 设置工作目录
EXPOSE port1 prot2 用来指定端口,使容器内的应用可以通过端口和外界交 互
CMD argument 在构建容器时使用,会被
docker run
后的
argument覆 盖
ENTRYPOINT argument 和
CMD
相似,但是并不会被
docker run
指定的参数覆盖
VOLUME 将本地文件夹或者其他容器的文件挂载到容器中
1.3
使用脚本创建镜像
1.3.1
创建
JDK1.8
镜像
步骤:
(
1
)创建目录
mkdir –p /usr/local/dockerjdk8
(
2
)下载
jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中 的
/usr/local/dockerjdk8
目录
(
3
)创建文件
Dockerfile
vi Dockerfile
#
依赖镜像名称和
ID
FROM centos:7
#
指定镜像创建者信息
MAINTAINER *****
#
切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD
是相对路径
jar,
把
java
添加到容器中
ADD jdk‐8u171‐linux‐x64.tar.gz /usr/local/java/
#
配置
java
环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH
$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
(
4
)执行命令构建镜像
docker build ‐t='jdk1.8' .
注意后边的空格和点,不要省略
(
5
)查看镜像是否建立完成
docker images
(
6
)创建容器
docker run ‐it ‐‐name=myjdk8 jdk1.8 /bin/bash
1.3.2
创建
Eureka
镜像
(
1
)进入控制台,
eureka
工程的目录下,执行
maven
命令
mvn clean package
(
2
)服务器创建
/usr/local/dockereureka
目录, 将生成的
app.jar
上传到服务器的此目
录
(
3
)创建文件
Dockerfile
FROM jdk1.8
VOLUME /tmp
ADD app.jar /usr/local/
ENTRYPOINT ["java","‐jar","/usr/local/app.jar"]
(
4
)创建镜像
docker build ‐t='eureka' .
(
5
)创建容器
docker run ‐di ‐‐name=myeureka ‐p 6868:6868 eureka
2 Docker
私有仓库
2.1
私有仓库搭建与配置
(
1
)拉取私有仓库镜像
docker pull registry
(
2
)启动私有仓库容器
docker run ‐di ‐‐name=registry ‐p 5000:5000 registry
(
3
)打开浏览器 输入地址
http://192.168.184.135:5000/v2/_catalog
看
到
{"repositories":[]}
表示私有仓库搭建成功并且内容为空
(
4
)修改
daemon.json
vi /etc/docker/daemon.json
添加以下内容,保存退出。
{
"insecure‐registries"
:[
"192.168.184.135:5000"
]}
此步用于让
docker
信任私有仓库地址
(
5
)重启
docker
服务
systemctl restart docker
2.2
镜像上传至私有仓库
(
1
)标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.184.135:5000/jdk1.8
(
2
)上传标记的镜像
docker push 192.168.184.135:5000/jdk1.8
2.3 DockerMaven
插件
微服务部署有两种方法:
(
1
)手动部署:首先基于源码打包生成
jar
包(或
war
包)
,
将
jar
包(或
war
包)上传至虚
拟机并拷贝至
JDK
容器。
(
2
)通过
Maven
插件自动部署。
对于数量众多的微服务,手动部署无疑是非常麻烦的做法,并且容易出错。所以我们这
里学习如何自动部署,这也是企业实际开发中经常使用的方法。
Maven
插件自动部署步骤:
(
1
)修改宿主机的
docker
配置,让其可以远程访问
vi /lib/systemd/system/docker.service
其中
ExecStart=
后添加配置
‐H tcp://0.0.0.0:2375 ‐H unix:///var/run/docker.sock
修改后如下
复制后别忘记,在此行的上一行末尾加上
\
(
2
)刷新配置,重启服务
systemctl daemon‐reload
systemctl restart docker
(
3
)在
工程
pom.xml
增加配置
<build>
<finalName>
app
</finalName>
<plugins>
<plugin>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring‐boot‐maven‐plugin
</artifactId>
</plugin>
<!‐‐ docker
的
maven
插件,官网:
https://github.com/spotify/docker‐maven‐plugin ‐‐>
<plugin>
<groupId>
com.spotify
</groupId>
<artifactId>
docker‐maven‐plugin
</artifactId>
<version>
0.4.13
</version>
<configuration>
<imageName>
192.168.184.135:5000/${project.artifactId}:${project.version}
</imageName>
<baseImage>
java
</baseImage>
<entryPoint>
["java", "‐jar", "/${project.build.finalName}.jar"]
</entryPoint>
<resources>
<resource>
<targetPath>
/
</targetPath>
<directory>
${project.build.directory}
</directory>
<include>
${project.build.finalName}.jar
</include>
</resource>
</resources>
<dockerHost>
http://192.168.184.135:2375
</dockerHost>
</configuration>
</plugin>
</plugins>
</build>
(
4
)在
工程的
src/main
目录下创建
docker
目录,目录下创建
Dockerfile
文件,内容如下:
FROM jdk1.8
VOLUME /tmp
ADD app.jar app.jar
ENTRYPOINT ["java","‐jar","/app.jar"]
解释下这个配置文件:
VOLUME
指定了临时文件目录为
/tmp
。其效果是在主机
/var/lib/docker
目录下创
建了一个临时文件,并链接到容器的
/tmp
。此步骤是可选的,如果涉及到文件系统
的应用就很有必要了。
/tmp
目录用来持久化到
Docker
数据文件夹,因为
Spring
Boot
使用的内嵌
Tomcat
容器默认使用
/tmp
作为工作目录
项目的
jar
文件作为
“app.jar”
添加到容器的
ENTRYPOINT
执行项目
app.jar
。为了缩短
Tomcat
启动时间
,添加一个系统属性指
向
“/dev/urandom”
作为
Entropy Source
(
5
)在
windows
的命令提示符下,进入
工程所在的目录,输入以下
命令,进行打包和上传镜像
mvn clean package docker:build ‐DpushImage
执行后,会有如下输出,代码正在上传
浏览器访问
http://192.168.184.135:5000/v2/_catalog
,输出
{"repositories":[""]}
(
6
)进入宿主机
,
查看镜像
docker imag
(
7
) 启动容器:
docker run ‐d ‐‐name=eureka ‐p 6868:6868
192.168.184.135:5000/tensquare_eureka:1.0‐SNAPSHOT