ubuntu中docker使用2
部署單體專案:
1.先把專案打包成war包並上傳到伺服器
2.建立Dockerfile檔案
cd /usr/local/docker
mkdir tomcat
cd /usr/local/docker/tomcat
mkdir wang
cd /usr/local/docker/tomcat/wang
cd 到專案war包所在位置
mv 專案war名字 /usr/local/docker/tomcat/wang/test.war
cd /usr/local/docker/tomcat/wang
vi Dockerfile
3.編輯Dockerfile檔案
FROM tomcat # 此專案基於tomcat MAINTAINET wang # 編輯者 ADD test.war /usr/local/tomcat/webapps/test.war # 在當前目錄找test.war 新增到/usr/local/tomcat/webapps/下,並命名為test.war
4.構建映象
docker build -t wang/tomcat .
5.啟動容器
docker run --name tomcat -p 8080:8080 wang/tomcat
6.開啟瀏覽器訪問測試
ip:8080/test
資料卷簡介:
資料卷是一個可以供一個或多個容器使用的特殊目錄。 可以達到以下目的: 1. 繞過“拷貝寫”系統,以達到本地磁碟IO的效能,(比如執行一個容器,在容器中對資料卷修改內容,會直接改變宿主機上的資料卷中的內容,所以是本地磁碟IO的效能,而不是先在容器中寫一份,最後還要將容器中的修改的內容拷貝出來進行同步。) 2. 繞過“拷貝寫”系統,有些檔案不需要在docker commit打包進映象檔案。 3. 在多個容器間共享目錄 4. 在宿主和容器間共享目錄 5. 在宿主和容器間共享一個檔案。
建立資料卷:
方法一:dockerfile中指定VOLUME後的目錄,如 VOLUME /var/lib/test
方法二:docker run命令中加-v選項。如 :
docker run -d -P -v /webapp training/webapp python app.py
注意:這裡定義的 /webapp 資料卷,但是不知道宿主機上與之對應的在哪裡。我們需要仔細的觀察docker inspect docker ps -q的結果,是非常長的一段東西。在這裡我只摘出我們需要的部分
例子:
建立目錄 mkdir -p /usr/local/docker/tomcat/share/webapps/ROOT cd /usr/local/docker/tomcat/share/webapps/ROOT vi index.html hello share tomcat cd /usr/local/docker/tomcat/share/webapps/ 進入到該目錄執行tomcat docker run --name tomcat -d -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps/ tomcat $PWD 意思是基於當前目錄 $PWD:/usr/local/tomcat/webapps/ 把容器的目錄對映到/usr/local/docker/tomcat/share/webapps/下 訪問 ip:8080 即可看到效果 "hello share tomcat" 在啟動一個tomcat docker run --name tomcat2 -d -p 8081:8080 -v $PWD:/usr/local/tomcat/webapps/ tomcat 再次訪問 ip:8081 可看到兩次訪問結果一樣 這樣就可以直接操作宿主機器的檔案而不需要操作容器檔案了,且達到了檔案共享的目的 並且不管是刪除容器還是停止容器,/usr/local/docker/tomcat/share/webapps/ROOT/index.html 檔案都不會被刪除,保證了資料的持久化
備份資料卷:
啟動mysql測試
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
因為啟動的時候是用的
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \ 即資料卷的形式,所以宿主機和容器共享了資料所以/usr/local/docker/mysql 這個目錄就是mysql資料庫的資料,備份資料卷只需要把這個目錄下的東西給打包就可
如:
tar -zxvf backup_2018106.tar.gz .
即可做到備份的作用
還原資料卷:
重新克隆一臺伺服器,並把之前備份的資料放到一臺安全的機器上,進入到新的伺服器
建立mysql資料夾 mkdir -p /usr/local/docker/mysql
下拉mysql映象 docker pull mysql
並把之前的資料壓縮包移動到 /usr/local/docker/mysql目錄下
如:
mv /home/backup_2018106.tar.gz /usr/local/docker/mysql/backup_2018106.tar.gz
然後解壓縮 tar -zxvf backup_2018106.tar.gz
刪除備份 rm -rf backup_2018106.tar.gz
重新啟動mysql
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
啟動完畢,可以用遠端工具連線測試
下載安裝docker-compose
簡介:
允許使用者通過一個單獨docker-comose.yml模版檔案來定義一組相關聯的應用容器為一個專案compose重要概念:服務:一個應用容器,實際可包括若干執行相同映象的容器例項。專案:由一組關聯的應用容器組成的一個完整業務單元,在docker-compose.yml檔案中定義一個專案可以由多個服務(容器)關聯而成,compose面向專案進行管理執行compose專案:docker-compose up
意思就是可以通過 docker-compose來啟動docker映象並減少每次啟動所需要輸入的大量引數
可以直接下載:
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
也可以進入https://github.com/docker/compose/releases/ 下載 選擇是Latest release的不要用Pre-release
選擇自己的作業系統進行選擇,我這裡用的是 docker-compose-Linux-x86_64 版本是1.22.0
把檔案上傳到伺服器,如果用xftp上傳沒有許可權可以建立一個目錄並分配許可權
chmod 777 檔名 即可上傳成功
上傳完畢後 mv docker-compose-Linux-86_64 docker-compose
並把此檔案放到環境變數下,通過 cat /etc/environment 檢視
[email protected]:/home/downloads# cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
[email protected]:/home/downloads# mv docker-compose /usr/bin
檢視是否移動成功
[email protected]:/home/downloads# ls /usr/bin |grep docker-compose
docker-compose
此時的docker-compose沒有可執行的許可權所以我們需要修改他的使用者組包括許可權
[email protected]:/usr/bin# chown -R root:root docker-compose
[email protected]:/usr/bin# chmod +x docker-compose
檢視所屬使用者組合許可權
[email protected]:/usr/bin# ll |grep docker-compose
-rwxrwxr-x 1 root root 11750136 Oct 6 11:28 docker-compose*
輸入檢視版本測試是否成功
[email protected]:/usr/bin# docker-compose version
docker-compose version 1.22.0, build f46880fe
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f 25 May 2017
測試第一個docker-compose檔案
cd /usr/local/docker/tomcat
rm -rf /usr/local/docker/tomcat/
vi docker-compose.yml
建立一個docker-compose.yml配置檔案(每一級用兩個空格,不能直接用tab鍵)
version: '3' # 對應版本
services: # 設定服務
tomcat: # 服務名字可以任意起
restart: always # 總是開機自啟
image: tomcat # 使用的映象
container_name: tomcat # 容器名稱
ports: # 埠
- 8080:8080
啟動 docker-compose up 這種啟動是佔用主執行緒的啟動。停止使用ctrl+c停止
並使用 docker-compose down刪除使用過的映象記錄
開啟瀏覽器訪問測試 ip:8080
docker compose常用命令:
前臺執行 : docker-compose up
後臺執行 : docker-compose up -d
啟動 : docker-compose start
停止 : docker-compose stop
停止並移除容器列表 : docker-compose down
tomcat的使用:
建立一個docker-compose.yml配置檔案
version: '3' # 對應版本
services: # 設定服務
tomcat: # 服務名字可以任意起
restart: always # 總是開機自啟
image: tomcat # 使用的映象
container_name: tomcat # 容器名稱
ports: # 埠
- 8080:8080
volumes: # 資料卷
- /usr/local/docker/tomcat/webapps/:/usr/local/tomcat/webapps/
environment: # 環境變數
TZ: Asia/Shanghai
mkdir -p /usr/local/docker/tomcat/webapps/ROOT
vi /usr/local/docker/tomcat/webapps/ROOT/index.html hello docker compose
啟動測試 docker-compose up -d 開啟瀏覽器訪問: ip:8080檢視效果
測試mysql:
version: '3'
services:
mysql:
restart: always
image: mysql
container_name: mysql
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123123
command: # 命令配置編碼
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1 # 忽略資料庫表大小寫
--max_allowed_packet=128M
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- mysql-date:/var/lib/mysql
volumes:
mysql-date: