使用Docker容器部署Java Spring伺服器


在這份指南中,我將展示如何使用Docker部署Java Spring伺服器。請按照以下步驟操作:

1.啟動一個Ubuntu Server

對於這份演示,我們假設你已經啟動了一個運行Ubuntu 14.04的伺服器。使用APT資源庫安裝Docker:

$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D

使用你最喜歡的文字編輯器打開/etc/apt/sources.list.d/docker.list,並添加以下行:

deb [https://apt.dockerproject.org/repo](https://apt.dockerproject.org/repo) ubuntu-trusty main

繼續在伺服器上安裝Docker:

$ sudo apt-get update
$ sudo apt-get install docker-engine
$ sudo service docker start

2.構建Docker映像

登入Docker Hub (https://hub.docker.com/),並創建新的儲存庫。然後,在你的終端機運行:

$ docker login

被提示時輸入您的用戶名和密碼。

在你的本地開發Java Spring資料夾,創建一個Dockerfile,內容如下:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD target/fleet-beacon*.jar app.jar
EXPOSE 8080
RUN sh -c 'touch /app.jar'
ENTRYPOINT ["java", "-jar", "/app.jar"]

要構建映像,執行:

$ docker build -t username/repo-name .

這裡,-t代表”tag”。將usernamerepo-name替換成你的Docker Hub用戶名和儲存庫名稱。也不要忘記最後的句點。

將構建的映像推送到您的遠程儲存庫:

$ docker push username/repo-name

3.拉取Docker映像

在您的遠程Ubuntu伺服器上,登入Docker並拉取映像:

$ docker pull username/repo-name

在後臺運行容器:

$ docker run -d -p 8080:8080 username/repo-name

這裡,-d表示”detached”, -p指定所有暴露的端口(例如,8080)都應該發布到主機接口。

4.設置Nginx

使用Vim編輯器,打開/etc/nginx/sites-available/default並將其修改如下:

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;

  root /usr/share/nginx/html;
  index index.html index.htm;
  server_name localhost;

  location / {
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_pass [http://localhost:8080/](http://localhost:8080/);
  }
}

退出並使用:wq!保存。

就這樣!打開瀏覽器,導航到你的遠程伺服器的IP地址;你應該能看到Java Spring頁面運行正常。

5.問題排查

如果你遇到Docker守護進程連接的問題,出現:

Cannot connect to the Docker daemon. Is the Docker daemon running on this host?

運行以下命令:

$ eval $(docker-machine env default)

如果你正在本地測試且找不到你的IP地址,用這個命令找到它:

$ docker-machine ls

如果你遇到任何其他問題,請隨時在下方留言。