使用Docker部署服务

注意:RUN命令在 image 文件的构建阶段执行,执行结果都会打包进入 image 文件;CMD命令则是在容器启动后执行。另外,一个 Dockerfile 可以包含多个RUN命令,但是只能有一个CMD命令。
注意,指定了CMD命令以后,docker container run命令就不能附加命令了(比如前面的/bin/bash),否则它会覆盖CMD命令。

# 基于哪个镜像 From java:8 # 复制文件到容器 ADD microservice-eureka-server-0.0.1-SNAPSHOT.jar /app.jar # 声明需要暴露的端口 EXPOSE 8761 # 配置容器启动后执行的命令 ENTRYPOINT java ${JAVA_OPTS} ‐jar /app.jar 
 # 格式: docker build -t 镜像名称:标签 Dockerfile的相对位置 在这里,使用-t选项指定了镜像的标签。执行该命令后,终端将会输出如下的内容 docker build -t eureka-images:1.0 -f docker/DockerFile . docker build -t eureka-images:1.0 . 启动镜像,加-d可在后台启动 docker run ‐d ‐p 8761:8761 microservice‐eureka‐server:0.0.1 使用 -v 可以挂载一个主机上的目录到容器的目录 docker run ‐d ‐p 8761:8761 ‐v /log:/container‐log eureka-images:1.0 加上JVM参数: # ‐‐cap‐add=SYS_PTRACE 这个参数是让docker能支持在容器里能执行jdk自带类似jinfo,jmap这些命令,如果不需要在容器里执 行这些命令可以不加 docker run -e JAVA_OPTS='-Xms1028M -Xmx1028M -Xmn512M -Xss512K -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M' --cap-add=SYS_PTRACE -d -p 8761:8761 --name eureka eureka-images:1.0 

我们制作好了微服务镜像,一般需要发布到镜像仓库供别人使用,我们可以选择自建镜像仓库,也可以直接使用docker官方镜像仓库,这里我们选择docker官方镜像仓库:Docker Hub
首先,我们需要在docke官方镜像仓库里注册一个账号
然后,在linux服务器上用docker login命令登录镜像仓库

[root@node01 k8s]# docker login 

要把镜像推送到镜像仓库,需要将镜像前面加个分组名,执行如下命令修改镜像名字,需要将镜像前面加个分组名(一般就是docker hub的账户名),执行如下命令修改镜像名字

docker tag fairy-images 用户名/fairy-images:1.0 

最后将镜像推送到远程仓库

docker push 用户名/fairy-images:1.0 

之后就可以登录docker查看推送的镜像

denied: requested access to the resource is denied 因为要求 tag 必须是 hub 仓库的用户名才行。 docker tag fairy-images 用户名/fairy-images:1.0 

docker搭建私服

1.安装docker pull registry,官网上截止目前的版本是V2

启动registry

docker run -itd -v /mydata/docker:/var/lib/registry \ -p 5000:5000 --restart=always --name registry registry:latest 这将使用官方的 registry 镜像来启动私有仓库。 默认情况下,仓库会被创建在容器的 /var/lib/registry 目录下。你可以通过 -v 参数来将镜像文件存放在本地的指定路径,例如下面的例子将上传的镜像放到本地的 /mydata/docker 目录。 
http://192.168.36.139:5000/v2/

出现 {} 表示搭建成功

打标签:

docker tag cc304d806073 192.168.36.138:5000/eureka:base

push出错

[root@node01 sysconfig]# docker push 192.168.36.138:5000/eureka:base The push refers to repository [192.168.36.138:5000/eureka] Get https://192.168.36.138:5000/v2/: http: server gave HTTP response to HTTPS client

原因是docker私有仓库服务器,默认是基于https传输的,所以我们需要在客户端192.168.36.138做相关设置,不使用https传输
将下面的代码放进去保存并退出。

 vi /etc/docker/daemon.json 添加 "insecure-registries":["192.168.36.138:5000"]

最终如下所示:

[root@node01 nginx]# cat /etc/sysconfig/docker { "registry-mirrors": ["https://oqx1npiz.mirror.aliyuncs.com"], "registry-mirror": [ "https://hub-mirror.c.163.com", "https://mirror.baidubce.com" ], "insecure-registries": [ "192.168.36.138:5000" ] 多个配置, "192.168.36.138:5000","192.168.36.139:5000" }

再次上传即可

[root@node01 sysconfig]# docker push 192.168.36.138:5000/eureka:base
查看 http://192.168.36.13:5000/v2/eureka/tags/list
#!/bin/bash APPNAME=fairy-images-1.0.jar LOG_FILE=console.log export JAVA_HOME export JAVA="$JAVA_HOME/bin/java" JAVA_OPT="${JAVA_OPT} -Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java-frontend.hprof \ -Dspring.logging.path=./logs \ -Dfile.encoding=UTF-8 \ -Dserver.servlet.context-path=/fairy-images \ -Dserver.port=8081 -Dspring.datasource.type=com.alibaba.druid.pool.DruidDataSource -Dspring.datasource.druid.username=root -Dspring.datasource.druid.password=root -Dspring.datasource.druid.url=jdbc:mysql://node01:33306/fairy?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai -Dspring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver" echo $JAVA $JAVA_OPT $APPNAME $JAVA $JAVA_OPT -jar $APPNAME >$LOG_FILE 2>&1 & 
sh start.sh 

Dockerfile文件

FROM openjdk:latest MAINTAINER docker部署发布SpringBoot项目 LABEL name="fiary-image镜像" version="1.0" author="lulu" COPY fairy-images-1.0.jar /data/fairy-images-1.0.jar WORKDIR /data/java ENV JAVA_OPTS "" ADD start.sh /data/start.sh RUN echo 'JAVA_OPTS=' $JAVA_OPTS CMD sh /data/start.sh $JAVA_OPTS 

启动脚本命令

#!/bin/bash JAVA_OPTS=$* echo '入参参数:' $JAVA_OPTS java $JAVA_OPTS -jar /data/fairy-images-1.0.jar 

docker启动

 docker run --name fairy-images -d \ -e JAVA_OPTS="-Xms1024m -Xmx1024m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./java-frontend.hprof \ -Dserver.port=8081" -p 8081:8081 fairy-images

原文链接:https://blog.csdn.net/huanglu0314/article/details/124482130

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享