本文參考: 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,此時會重新創建該鏡像。