使用Docker部署微服务

听说最近大家都不用虚拟机,开始用Docker进行微服务部署了,所以稍微学习了一下,下面是使用Docker进行微服务部署的一个简单的例子。

一. 环境准备

1. centOS7安装

如果是windows下需要用VMWare搭建centOS7的环境。

过程略

2. jdk安装

我下载的是jdk1.8.0_172,放在 /usr/lib/java/jdk1.8.0_172 目录下。

过程略

3. docker安装

(1)更新yum包到最新

# sudo yum update

(2)设置yum源

# sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

(3)安装docker

# sudo yum install docker-ce

(4)启动并加入开机启动

# sudo systemctl start docker
# sudo systemctl enable docker

(5)验证是否安装成功

# docker version

 

二. 微服务部署

1. 在windows下编译出可运行的jar包

我这里生成的jar包在 D:\workspace\JavaBasicStudy\target\ 下

2. 复制到centos,并编译成docker可运行的镜像

(1)通过SSH直接将jar包复制到centos的/usr/local/springbootService目录下,目录自己建

(2)在centos中运行下面的命令,将jdk复制到springbootService目录下

#cd /usr/local/springbootService
#cp -r /usr/lib/java/jdk1.8.0_172 /usr/local/springbootService

(3)创建Dockerfile,用来将jar包编译成docker可运行的镜像

#vi Dockerfile

 

Dockerfile的内容如下:

# Enviroment
FROM  centos
# Copy JDK
COPY jdk1.8.0_172 jdk1.8.0_172
# Set JDK
ENV JAVA_HOME=./jdk1.8.0_172
ENV PATH=$JAVA_HOME/bin:$PATH
ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# Copy jar
COPY JavaBasicStudy-1.0-SNAPSHOT.jar .
ADD JavaBasicStudy-1.0-SNAPSHOT.jar app.jar
# Port
EXPOSE 6001
# Command
ENTRYPOINT ["java","-jar","/app.jar"]

(4)构建镜像

docker build -t mystudy:1.0 .

(5)查看镜像

[root@hadoop1 springbootService]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mystudy             1.0                 4c1ade2235eb        27 seconds ago      677MB
centos              latest              0f3e07c0138f        8 weeks ago         220MB

3. 启动镜像

# docker run -p 5001:6001 mystudy:1.0

这里没有用-d,因为想要看一下服务是否真的能启动。

如果加上-d,容器就会在后台运行,返回一串ID就表示成功了:

[root@hadoop1 springbootService]# docker run -d -p 5001:6001 mystudy:1.0
61ccdef3cd5a57e715800bf0e2661959020b33fe3dc1b4c98639e566e449202b

通过docker ps -a 命令可以看到所有容器(加上-a可以看到已经退出[STATUS=Exited]的容器,不加就只能看到正在运行[STATUS=Up]的容器):

[root@hadoop1 springbootService]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                       PORTS                    NAMES
61ccdef3cd5a        mystudy:1.0         "java -jar /app.jar"   3 minutes ago       Up 3 minutes                 0.0.0.0:5001->6001/tcp   exciting_knuth
b5b67e37c30d        mystudy:1.0         "java -jar /app.jar"   10 minutes ago      Exited (130) 4 minutes ago                            awesome_morse

使用下面的命令可以进入容器:

docker attach NAMES或者用CONTAINER ID 

比如:

#docker attach exciting_knuth
或者
#docker attach 61ccdef3cd5a

或者用:

docker exec -it ContainerName /bin/bash

进入容器后,按ctrl+P+Q可退出

 

重要:这里一共用到了3个端口:

微服务的application.yml中用到了6001

Dockerfile中用的是EXPOSE 6001

启动的时候又写了5001:6001

那么这三个端口分别是什么意思呢?

首先,application.yml中的6001端口必须和Dockerfile中EXPOSE的6001一致,表示docker容器对外暴露6001端口。

docker run的时候的5001:6001,表示宿主机的5001端口对应docker容器的6001端口

如果是多个docker容器就是5001:6001,5002:6001,5003:6001...

容器中的端口不必每个都修改,只要修改宿主机对应的端口即可。

 

三. 测试

在postman中调用:192.168.3.101:5001/service/hello?token=1

 

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值