阿里雲Ubuntu利用Docker配置javaweb環境(jdk+tomcat+mysql)

本人軟件專業渣渣程序猿一名,第一次寫博客,十分緊張,寫的不好還請大佬見諒。前段時間有幸接觸到docker,這兩天使用docker時遇到了一些坑現在看來覺得十分無語,因此想寫篇博客記錄一下。

一、什麼是Docker?爲啥使用Docker?

首先,Docker是一個開源的項目,可以讓開發者打包應用以及依賴包到一個可移植的容器中,說白了,Docker可以很方便的幫你配置各種環境並且進行移植,實現了虛擬化。具體實現想要深入瞭解的自行查詢,我怕誤導大家。

那麼,爲啥我們要使用Docker呢,就我個人而言,主要是不想配環境。。。

二、Docker安裝mysql

1.首先我們需要先安裝docker,和簡單運行如下命令即可

apt install docker.io

如果不行的話,可以先運行apt update更新一下源的索引。

2.鏡像加速

鑑於國內網絡問題,後續拉取 Docker 鏡像十分緩慢,我們可以需要配置加速器來解決,我採用的是阿里雲鏡像加速器,命令如下

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://9amr1j7k.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker 

可參考阿里雲官方提供的容器鏡像服務點擊打開鏈接

3.docker安裝mysql

命令十分簡單,如下

docker search mysql(查找Docker Hub上的mysql鏡像,會列出各種鏡像,選擇自己想要的)
docker pull mysql:5.6(拉取mysql 5.6版本的鏡像)

這裏強調一下有個坑,爲什麼我要拉取5.6版本的呢?不指定版本行不行?比如運行 docker pull mysql,行是行,但是如果不顯示指定版本,docker會默認pull最新的版本,我第一次是就是下載最新的版本,然後後面就遇到了很噁心的問題。

第一,目前mysql最新版本是8.0,這個時候,如果你用默認的mysql客戶端或者navicat之類的,你在進行遠程連接的時候,很可能會遇到以下這個報錯

ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/local/mysql/lib/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

第一次遇到這個問題是一臉懵逼,以爲是端口問題,然後搞了很久沒有解決,後來看了一篇博客後發現是mysql的認證加密方式的問題,在mysql5.7環境裏,雖然可以設置default_authentication_plugin來改變認證加密方式,但是一般人不會去設置。在mysql8.0下,默認變成了default_authentication_plugin=caching_sha2_password,包括你剛初始化的root用戶也是這個認證加密方式,這樣的結果是讓你除非用新的協議驅動,例如必須用8.0自帶的mysql客戶端才行,不然就連接不上數據庫。這樣就必然造成不兼容的情況,幸好,是可以改回舊的方式的。具體解決方法參考這篇博客點擊打開鏈接

第二,mysql 8.0版本的jdbc連接方式貌似發生了變化,我在網上搜索了很久,沒找到什麼有效的方式,最後不得不把mysql版本改回了5.6。

綜上,血淋淋的教訓讓我意思到以後不管用什麼軟件或者框架,絕對不用最新的了,個人以爲,舊版本軟件裏面包含的功能已經足夠剛剛入門的我使用了。。所以,建議想省事的同學們使用老版本

4.docker 運行mysql

廢話不說,直接上命令

docker run -p 3306:3306 --name mymysql -v $PWD/conf:/etc/mysql/conf.d -v $PWD/logs:/logs -v $PWD/data:/mysql_data -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6

命令有點長,建議複製黏貼,各個參數的含義如下

-p 3306:3306:將容器的3306端口映射到主機的3306端口

-v -v $PWD/conf:/etc/mysql/conf.d:將主機當前目錄下的conf/my.cnf掛載到容器的/etc/mysql/my.cnf

-v $PWD/logs:/logs:將主機當前目錄下的logs目錄掛載到容器的/logs

-v $PWD/data:/mysql_data:將主機當前目錄下的data目錄掛載到容器的/mysql_data

-e MYSQL_ROOT_PASSWORD=123456:初始化root用戶的密碼

可以在服務器上用docker ps -a查看容器啓動狀況,以及利用netstat -tunpl命令查看服務器監聽的端口情況

三、Docker安裝Tomcat

1.安裝tomcat

與安裝mysql類似,運行如下命令

docker pull tomcat

2.運行tomcat

docker run --name tomcat -p 8080:8080 -v $PWD/tomcat:/usr/local/tomcat/webapps -d tomcat  

參數說明:

-p 8080:8080:將容器的8080端口映射到主機的8080端口

-v $PWD/tomcat:/usr/local/tomcat/webapps:將主機中當前目錄下的tomcat掛載到容器的/webapps

另外,這邊解釋一下,該tomcat的官方鏡像中自帶了jdk的環境,所以就不用特地去配置jdk的環境了。

四、部署web項目

1.使用阿里雲服務器最重要的一環,到阿里雲控制檯配置實例的安全組規則,否則無法從遠端訪問服務器,包拓3306端口以及8080端口。

首先進入 阿里雲控制檯 ,先找到我們購買的實例,然後在左側欄找到“網絡和安全”---“安全組”,點擊“配置規則”。以配置8888端口爲例:


如上圖所示:

端口範圍填:8888/8888
授權對象填:0.0.0.0/0
就是將8888號端口開放給所有的用戶。

模仿該例子配置3306端口以及8080端口。

2.本地運行web項目,若運行無問題,打成war包。

3.利用各種方式(比如通過lrzsz的rz命令,可自行百度)將war包上傳到如服務器的tomcat目錄(docker運行tomcat是映射到webapps的目錄)下

4.利用以下命令重啓tomcat

docker restart tomcat

5.遠程通過   ip地址:端口號/項目名稱  可訪問該項目,比如 47.98.205.218:8080/Moonlight

至此,若沒有意外,javaweb的環境搭建好了,項目可以部署了。

五、常用Docker命令

爲了應對各種異常情況,需要掌握一些常用的docker命令,如下

 docker ps 查看當前正在運行的容器

 docker ps -a 查看所有容器的狀態

 docker start/stop id/name 啓動/停止某個容器

 docker attach id 進入某個容器(使用exit退出後容器也跟着停止運行)

 docker exec -it 容器id(或者name) /bin/bash  啓動一個僞終端以交互式的方式進入某個容器(使用exit退出後容器不停止運行)

 docker images 查看本地鏡像
 docker rm id/name 刪除某個容器
 docker rmi id/name 刪除某個鏡像

docker的全部命令可去官網查詢,一般以上命令已足夠了。

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