Docker-Compose安裝Java Web實例 原

本文參考: docker學習筆記之五:進階實戰--mysql+tomcat

Docker-Compose的介紹可參考:Docker學習——Docker 三劍客(七)

一、mysql - Docker Hub

參考資料:https://hub.docker.com/_/mysql/

參考資料:https://store.docker.com/images/mysql

1.下載mysql鏡像

docker pull mysql:5.7

2.啓動mysql容器

docker run -d -p 3306:3306 --name dbmysql -e MYSQL_ROOT_PASSWORD=password -v /mysql/datadir:/var/lib/mysql -v /mysql/conf:/etc/mysql/conf.d  docker.io/mysql:5.7


#-e MYSQL_ROOT_PASSWORD=password :指定root密碼  
#-v /mysql/datadir:/var/lib/mysql :指定數據庫本地存儲路徑,如果系統沒有關閉SELinux,會啓動失敗,原因是本地目錄不允許掛載到容器,需要先執行chcon -Rt svirt_sandbox_file_t /mysql/datadir  
#-v /mysql/conf:/etc/mysql/conf.d :指定使用自定義的mysql配置文件啓動數據庫,比如在該路徑下創建一個my-config.cnf  

#提示:killall -9 mysqld 立即殺死進程 (多執行幾次)
  

#vi my-config.cnf  

#[mysqld]  
#port=3306  
#character-set-server=utf8  
#wait_timeout=288000  # 鏈接超時,默認爲8小時,單位爲秒
#lower_case_table_names=1 # 不去分大小寫

3.Docker-Compose方式

dbmysql:  
  image: docker.io/mysql:5.7
  ports:  
    - 3306:3306  
  environment:  
    MYSQL_ROOT_PASSWORD: password  
  volumes:  
    - /mysql/datadir:/var/lib/mysql  
    - /mysql/conf:/etc/mysql/conf.d:ro
[root@centos-linux-agent mysql]# docker-compose up -d  
Creating mysql_dbmysql_1  
……
[root@centos-linux-agent mysql]# docker ps -a  
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS              PORTS                    NAMES  
087f4e32cd29        docker.io/mysql:latest   "docker-entrypoint.sh"   4 seconds ago       Up 3 seconds        0.0.0.0:3306->3306/tcp   mysql_dbmysql_1

二、tomcat - Docker Hub

參考資料:https://hub.docker.com/_/tomcat/

參考資料:https://store.docker.com/images/tomcat

1.下載tomact鏡像

docker pull tomcat

2.啓動tomact容器

docker run -d -p 8080:8080 -v /tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5.35-jre8

這樣,只需要將war包拷貝到宿主機的/tomcat/webapps下即可

3.Docker-Compose方式

version: '2'  
services:  
   db:  
     image: docker.io/mysql:latest  
     volumes:  
       - /mysql/datadir_tomcat:/var/lib/mysql  
       - /mysql/conf:/etc/mysql/conf.d:ro  
     restart: always  
     environment:  
       MYSQL_ROOT_PASSWORD: password  

   tomcat01:  
     depends_on:  
       - db  
     image: docker.io/tomcat:latest  
     volumes:  
       - /tomcat01/webapps:/usr/local/tomcat/webapps  
     links:  
       - db:db  
     ports:  
       - "8081:8080"  
     restart: always  

   tomcat02:  
     depends_on:  
       - db  
     image: docker.io/tomcat:latest  
     volumes:  
       - /tomcat02/webapps:/usr/local/tomcat/webapps  
     links:  
       - db:db  
       - tomcat01:tomcat01  
     ports:  
       - "8082:8080"  
     restart: always

上面這種方式,隨便進入任何一個容器,執行ping命令,都可以互相ping通

ping tomcat01

ping db

但是查看各自的/etc/hosts,卻看不到相應的配置,就是這麼神奇。

所以war裏使用上面的鏈接別名配置好互相要訪問的地址,然後拷貝到對應的部署路徑下,並重啓。

[root@izwz9eftauv7x69f5jvi96z tomcat]# docker-compose restart
Restarting tomcat_tomcat02_1 ... done
Restarting tomcat_tomcat01_1 ... done
Restarting tomcat_db_1       ... done

三、實戰中

也可以使用Dockerfile,將war包等直接封裝爲一個新的鏡像。

sudo mkdir /dockerfile

sudo vi Dockerfile

FROM tomcat:8.5.35-jre8
MAINTAINER "wwx <[email protected]>"  
ADD web.war /usr/local/tomcat/webapps/

將web.war拷貝到當前路徑下

# 生成鏡像
docker build -t wuweixiang/tomcat8.5.35-jre8 .     # 注意最後面那個點,代表當前路徑

# 啓動
docker run -p 8080:8080 -d wuweixiang/tomcat8.5.35-jre8

docker-compose

tomcat01:  
     depends_on:  
       - db  
     build: /dockerfile  
     links:  
       - db:db  
     ports:  
       - "8081:8080"  
     restart: always

docker-compose up -d :第一次執行會自動創建一個鏡像,並啓動容器

如果該鏡像已經被創建了,再次執行時要加上--build:docker-compose up --build -d,此時會重新創建該鏡像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章