微服务部署 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
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页