服务部署与持续集成(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_28089993/article/details/89482644

服务部署与持续集成(一)

Dockerfile

什么是Dockerfile?

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。

  1. 对于开发人员:可以为开发团队提供一个完全一致的开发环境;
  2. 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新
    的镜像开始工作了;
  3. 对于运维人员:在部署时,可以实现应用的无缝移植。

常用命令列表

命令 作用
FROM image_name:tag 定义了使用哪个基础镜像启动构建流程
MAINTAINER user_name 声明镜像的创建者
RUN command 是Dockerfile的核心部分(可以写多条)
ADD source_dir/file dest_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir/fi ledest_dir/file 和ADD相似,但是如果有压缩文件并不能解压
ENV key value 设置变设置量 (可以设置多条)
WORKDIR path_dir 设置工作目录
EXPOSE port1 prot2 用来指定端口,使容器内的应用可以通过端口和外界交互
CMD argument 在构建容器时使用,会被docker run 后的argument覆盖
ENTRYPOINT argument 和CMD相似,但是并不会被docker run指定的参数覆盖
VOLUME 将本地(宿主机)文件夹或者其他容器的文件挂载到容器中

更详细的命令可参考:
命令解析
命令详解

使用脚本制作Java镜像

创建文件夹usr/local/dockerjava

mkdir –p /usr/local/dockerjdk

将下载好的jdk放在该目录下

当前使用的是jdk-8u201-linux-x64.tar.gz

在该目录下创建Dockerfile

vim Dockerfile

注意只能使用Dockerfile命名

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER KL
#切换工作目录
WORKDIR /usr
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u201-linux-x64.tar.gz /usr/local/java/

#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_201
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

执行命令构建镜像

语法: docker build [OPTIONS] PATH | URL | -

docker build -t='jdk1.8' .

-t: 镜像的名字及标签
. 这里的.代表当前目录

Docker私有仓库

私有仓库搭建与配置

(1)拉取私有仓库镜像

docker pull registry

(2)启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

(3)打开浏览器 输入地址http://47.96.70.206:5000/v2/_catalog

看到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空

(4)修改daemon.json

vi /etc/docker/daemon.json

添加以下内容,保存退出。

{
"insecure‐registries":["47.96.70.206:5000"]
}

此步用于让 docker信任私有仓库地址

注意:更换自己的ip,另外如果你的内容格式错误,重启时会报如下异常

Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.

(5)重启docker 服务

systemctl restart docker

镜像上传至私有仓库

(1)标记此镜像为私有仓库的镜像

语法: docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]

示例

docker tag jdk1.8 47.96.70.206:5000/jdk1.8

jdk1.8是源镜像名称
47.96.70.206:5000/jdk1.8是目标镜像名称

(2)上传标记的镜像

语法: docker push [OPTIONS] NAME[:TAG]

示例

docker push 47.96.70.206:5000/jdk1.8

过程可能有点慢

最后访问你的镜像私有库http://47.96.70.206:5000/v2/_catalog,如果你的repositories中出现了jdk1.8,如下,说明push成功
{"repositories":["jdk1.8"]}

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)刷新配置,重启服务

sudo systemctl daemon-reload
sudo systemctl restart docker

(3)在iot-server工程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>47.96.70.206: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://47.96.70.206:2375</dockerHost>
				</configuration>
			</plugin>
		</plugins>
	</build>

(4)在iot-server工程的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 数据文件夹,因为 SpringBoot 使用的内嵌 Tomcat 容器默认使用 /tmp 作为工作目录项目的 jar 文件作为 “app.jar” 添加到容器的ENTRYPOINT 执行项目 app.jar。

为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source,比如ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"],为何这样做请猛击

(5)在windows的命令提示符下,进入iot-server工程所在的目录,输入以下命令,进行打包和上传镜像

mvn clean package docker:build -DpushImage -DskipTests

执行后,代码会正在上传,这个过程可能会比较慢,最终构建并push成功.浏览器访问 http://47.96.70.206:5000/v2/_catalog ,输出

{"repositories":["dx-iot-server","jdk1.8"]}

代表成功.

(6)进入宿主机 , 查看镜像

docker images
在这里插入图片描述

输出如上内容,表示iotserver微服务已经做成镜像
(7) 启动容器:

docker run ‐di ‐‐name=iotserver -p 8099:8099 47.96.70.106:5000/iotserver:1.0‐SNAPSHOT
启动时注意按照自己项目端口启动.

总结

这篇文章重要介绍了Dockerfile和Docker私有仓库的简单配置,大家感兴趣可以自己玩一下,上边那个是我的服务器,快到期了,大家可以-DpushImage玩玩.工作之余,注意享受生活.

猜你喜欢

转载自blog.csdn.net/qq_28089993/article/details/89482644