本示例基於Centos 7,假設目前使用的賬號為release,擁有sudo權限。
由於Docker官方鏡像下載較慢,可以開啟阿里雲的Docker鏡像下載加速器,可參考此文進行配置。
主機上服務安裝步驟如下:
1. 安裝docker服務:
sudo yum install -y docker
2. 啟動docker服務:
sudo service docker start
3. 查找centos鏡像:
sudo docker search centos
4. 下載官方centos鏡像:
sudo docker pull docker.io/centos
5. 下載完后可檢查鏡像:
sudo docker images
6. 在主機上創建具備java和unzip功能的centos鏡像:
mkdir ~/centos-java cd ~/centos-java touch Dockerfile vi Dockerfile #內容如下: from docker.io/centos:latest run yum install -y java run yum install -y unzip
創建好Dockerfile后,我們build這個鏡像:
cd ~/centos-java sudo docker build -t centos/java:latest .
build成功后,可通過如下命令查看最新的鏡像列表:
sudo docker images
7. 我們各個java應用(假定都為.zip格式的打包文件,不依賴於web服務器),都將基於該鏡像上,創建新的應用鏡像。
mkdir ~/myapp cd ~/myapp touch Dockerfile vi Dockerfile #內容如下: from centos/java:latest run mkdir -p /opt/myapp copy myapp.zip /opt/myapp run unzip /opt/myapp/myapp.zip -d /opt/myapp run chmod +x /opt/myapp/startup.sh expose 8080 cmd ["/opt/driver2/startup.sh"]
內容說明:
- myapp.zip 是我們的java應用,需要你准備好放在~/myapp目錄下,該文件會被拷入新鏡像中的/opt/myapp目錄下
- startup.sh腳本參考內容為:
#!/bin/sh cd /opt/myapp java -server -Xmx2g -Xms2g -cp .:myapp-1.0.jar:./lib/* com.yourcompany.Application
- 需要注意的是java以前台方式運行,不要以后台方式(nohup)運行,否則docker容器啟動后很快就會停止
- 另外假定你的應用的輸出日志為 /var/log/myapp下
創建好Dockerfile后,build新鏡像:
cd ~/myapp sudo docker build -t myapp:latest .
build成功后,就可以得到一個名稱為myapp的新鏡像
8. 運行新鏡像:
sudo mkdir -p /var/log/myapp sudo docker run -p 8080:8080 -v /var/log/myapp/:/var/log/myapp -v /etc/localtime:/etc/localtime:ro --name myapp -d myapp
命令說明:
-v /etc/localtime:/etc/localtime:ro的目的是為了使容器時間與主機時間同步一致
9. 檢查容器啟動情況:
容器的狀態應該為Up,可執行如下觀察:
sudo docker ps
若未能起來,我們可以觀察日志,了解出錯原因:
sudo docker logs 容器id
當然,成功起來后,可以在主機的目錄下查看日志以方便跟蹤:
tail -f -n 500 /var/log/myapp/app.log