使用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

 

發佈了127 篇原創文章 · 獲贊 109 · 訪問量 61萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章