Docker?DockerFile部署java?jar項(xiàng)目包及Mysql和Redis的詳細(xì)過程
Docker運(yùn)行環(huán)境要求系統(tǒng)為64位、Linux系統(tǒng)內(nèi)核版本為 3.8以上
1. Docker安裝
1.1 搭建gcc環(huán)境 (gcc是編程語言譯器)
yum -y install gcc yum -y install gcc-c++
1.2 安裝需要的軟件包
yum install -y yum-utils
1.3 裝鏡像倉庫
因?yàn)閐ocker的服務(wù)器是在國外,
所以有時(shí)候從倉庫中下載鏡像的時(shí)候會連接被拒絕或者連接超時(shí)的情況!
因此可以使用阿里云鏡像倉庫
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1.4 新yum軟件包索引
yum makecache fast
1.5 安裝docker引擎
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
1.6 啟動docker
systemctl start docker
1.7 查看docker版本
docker version
1.8 配置阿里云鏡像加速
在CentOS下配置鏡像加速器
mkdir -p /etc/docker tee /etc/docker/daemon.json <<-'EOF' {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> "registry-mirrors": ["你個人的阿里云鏡像加速器地址"] } EOF systemctl daemon-reload systemctl restart docker
docker已經(jīng)安裝完畢
2. docker安裝Mysql
2.1 拉取mysql鏡像
docker pull mysql:8.0.19
2.2 啟動mysql
# docker run 創(chuàng)建一個新的容器 docker run -d -p 23306:3306 --name mysql \ -v /usr/dcoker-mysql/log:/var/log/mysql \ -v /usr/docker-mysql/data:/var/lib/mysql \ -v /usr/docker-mysql/conf:/etc/mysql/conf.d \ -e MYSQL_ROOT_PASSWORD=123456 mysql:8.0.19
命令參數(shù)說明:
參數(shù)說明:
- -d 后臺運(yùn)行
- -p 33060:3306 端口映射,宿主機(jī)的33060端口映射到容器3306端口
- --name mysql 容器名稱,可以自定義
- -v /usr/dcoker-mysql/log:/var/log/mysql 宿主機(jī)/usr/dcoker-mysql/log目錄與容器的/var/log/mysql目錄掛載,該目錄保存了mysql的日志
- -v /usr/docker-mysql/data:/var/lib/mysql 也是掛載,該目錄是mysql數(shù)據(jù)儲存的位置
- -v /usr/docker-mysql/conf:/etc/mysql/conf.d 也是掛載,該目錄放置配置文件的
- -e MYSQL_ROOT_PASSWORD=123456 設(shè)置環(huán)境變量,該變量是設(shè)置root用戶的密碼,可自行修改
- mysql:8.0.19 鏡像名稱以及tag
如果不掛載數(shù)據(jù)卷,容器被刪掉之后,mysql數(shù)據(jù)庫里面的數(shù)據(jù)都會消失
如果啟動失敗,可以執(zhí)行docker logs -f -t --tail 1000 [容器id] ,查看日志,找失敗的原因
2.3 查看容器
docker ps
進(jìn)入容器執(zhí)行
# docker exec 在運(yùn)行的容器中執(zhí)行命令 docker exec -it mysql mysql -uroot -p123456
參數(shù)說明: -i 以交互模式運(yùn)行容器 -t 為容器重新分配一個偽輸入終端 mysql -uroot -p123456 容器執(zhí)行的命令,直接進(jìn)入容器中的mysql
*注意:安裝的mysql是8.x版本的,默認(rèn)的身份驗(yàn)證插件為caching_sha2_password,該插件不能使用舊版本的客戶端來連接;如果所使用的Navicat版本較舊,需要修改身份驗(yàn)證插件才能登錄。修改插件執(zhí)行:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
使用navicat連接后創(chuàng)建數(shù)表并插入數(shù)據(jù), 如果出現(xiàn)亂碼, 修改配置文件
執(zhí)行exit退出容器, 在宿主機(jī)中掛載的配置文件編寫
執(zhí)行 vim /usr/docker-mysql/conf/my.cnf, 這個目錄就是上面創(chuàng)建容器時(shí)掛載的數(shù)據(jù)卷
[client] default_character_set=utf8 [mysqld] collation_server=utf8_general_ci character_set_server=utf8
保存之后執(zhí)行docker restart mysql
重啟容器
3. docker部署redis
3.1 拉取redis鏡像
docker pull redis:6.0.8
3.2 創(chuàng)建配置文件
在宿主機(jī)上創(chuàng)建一個文件redis.conf, 路徑可以自定義, 這里提供一個配置文檔, 配置可根據(jù)自己的需求修改, 本文配置文件路徑: /usr/docker-redis/conf/reids.conf
# bind 127.0.0.1 protected-mode no port 6379 tcp-backlog 511 #設(shè)置密碼為123456,可注釋掉 requirepass 123456 timeout 0 tcp-keepalive 300 daemonize no supervised no pidfile /var/run/redis_6379.pid loglevel notice logfile "" databases 30 always-show-logo yes save 900 1 save 300 10 save 60 10000 stop-writes-on-bgsave-error yes rdbcompression yes rdbchecksum yes dbfilename dump.rdb dir ./ replica-serve-stale-data yes replica-read-only yes repl-diskless-sync no repl-disable-tcp-nodelay no replica-priority 100 lazyfree-lazy-eviction no lazyfree-lazy-expire no lazyfree-lazy-server-del no replica-lazy-flush no appendonly yes appendfilename "appendonly.aof" no-appendfsync-on-rewrite no auto-aof-rewrite-percentage 100 auto-aof-rewrite-min-size 64mb aof-load-truncated yes aof-use-rdb-preamble yes lua-time-limit 5000 slowlog-max-len 128 notify-keyspace-events "" hash-max-ziplist-entries 512 hash-max-ziplist-value 64 list-max-ziplist-size -2 list-compress-depth 0 set-max-intset-entries 512 zset-max-ziplist-entries 128 zset-max-ziplist-value 64 hll-sparse-max-bytes 3000 stream-node-max-bytes 4096 stream-node-max-entries 100 activerehashing yes hz 10 dynamic-hz yes aof-rewrite-incremental-fsync yes rdb-save-incremental-fsync yes
* 注意:daemonize no是關(guān)閉守護(hù)線程,如果開啟的話容器會啟動不起來
根據(jù)個人需求進(jìn)行配置
3.3 執(zhí)行以下命令啟動容器
docker run -d -p 6379:6379 --name redis \ -v /usr/docker-redis/conf/redis.conf:/etc/redis/redis.conf \ -v /usr/docker-redis/data:/data \ redis redis-server /etc/redis/redis.conf
參數(shù)說明:
- -d 后臺運(yùn)行
- -p 6379:6379 端口映射,<宿主機(jī)端口>:<容器端口>
- --name redis 容器名稱,可以自定義
- -v /usr/docker-redis/conf/redis.conf:/etc/redis/redis.conf 宿主機(jī)/usr/docker-redis/conf/redis.conf文件與容器的/etc/redis/redis.conf文件掛載
- -v /usr/docker-redis/data:/data 也是掛載,該目錄是redis數(shù)據(jù)持久化文件儲存的位置
- redis 鏡像名稱
- redis-server /etc/redis/redis.conf 以上面redis.conf文件寫的配置啟動redis
啟動redis容器之后,執(zhí)行docker ps查看是否啟動成功
如果沒有啟動成功可以執(zhí)行命令docker logs <容器名稱或id>查看日志;如果日志沒有內(nèi)容可能是配置中開啟了守護(hù)線程的原因,關(guān)閉即可
啟動成功后,執(zhí)行docker exec -it redis redis-cli命令進(jìn)入容器
如果設(shè)置了密碼,執(zhí)行auth 123456(123456配置中的密碼,沒有配置密碼的直接跳過這步)
到這里redis就安裝完成了
4. docker部署java jar
4.1 將jar上傳到需要構(gòu)建鏡像的目錄
4.2 在當(dāng)前目錄下創(chuàng)建Dockerfile編寫Dockerfile (最好命名Dockerfile,否則構(gòu)建需要指定文件名)
#基礎(chǔ)鏡像使用jdk1.8 FROM openjdk:8-jdk-alpine #作者 MAINTAINER pan # VOLUME 指定臨時(shí)文件目錄為/tmp,在主機(jī)/var/lib/docker目錄下創(chuàng)建了一個臨時(shí)文件并鏈接到容器的/tmp VOLUME /tmp # 將jar包添加到容器中并更名 ADD ruoyi-admin.jar app.jar # 運(yùn)行jar包 RUN bash -c 'touch /app.jar' # 為了縮短 Tomcat 啟動時(shí)間,添加一個系統(tǒng)屬性指向 “/dev/./urandom” 作為 Entropy Source ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] #ENTRYPOINT ["nohup","java","-jar","/data/app/ruoyi-admin.jar","&"] #暴露8080端口 EXPOSE 8080
4.3 構(gòu)建鏡像 (需要在Dockerfile同級目錄下構(gòu)建,執(zhí)行次命令)
docker build -t app:1.0 . # 注意末尾的點(diǎn)不能去掉
4.4 構(gòu)建成功后查看當(dāng)前的鏡像, 構(gòu)建過程中如果沒有拉取過openjdk:8-jdk-alpine,需要等待下載
docker images
4.5 啟動后端項(xiàng)目鏡像
docker run -d --name app-container -p 8080:8080 app:1.0
4.6 查看容器是否啟動成功
docker ps , 如果成功過則代表后端部署完成
可以訪問進(jìn)一步驗(yàn)證
后端部署完成
4.7 如果容器沒有啟動成功, 請看這一步
查看容器的日志
docker logs -f -t --tail 1000 [容器ID]
通過日志確定問題,將報(bào)錯進(jìn)行復(fù)制,進(jìn)行百度搜索,自行解決
總結(jié)
到此這篇關(guān)于Docker DockerFile部署java jar項(xiàng)目包及Mysql和Redis的文章就介紹到這了,更多相關(guān)Docker DockerFile部署jar項(xiàng)目包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot Security 結(jié)合 JWT 實(shí)現(xiàn)無狀態(tài)的分布式API接口
JSON Web Token(縮寫 JWT)是目前最流行的跨域認(rèn)證解決方案。這篇文章主要介紹了Spring Boot Security 結(jié)合 JWT 實(shí)現(xiàn)無狀態(tài)的分布式API接口 ,需要的朋友可以參考下2019-04-04SpringBoot密碼加密的實(shí)現(xiàn)示例
本文主要介紹了SpringBoot密碼加密的實(shí)現(xiàn)示例,包括引入依賴、配置加密工具、生成加密密鑰、加密密碼、配置解密,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08RocketMQ?ConsumeQueue與IndexFile實(shí)時(shí)更新機(jī)制源碼解析
這篇文章主要為大家介紹了RocketMQ?ConsumeQueue與IndexFile實(shí)時(shí)更新機(jī)制源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05SpringBoot關(guān)于自動注入mapper為空的坑及解決
這篇文章主要介紹了SpringBoot關(guān)于自動注入mapper為空的坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07SpringAop實(shí)現(xiàn)原理及代理模式詳解
Spring的AOP就是通過動態(tài)代理實(shí)現(xiàn)的,使用了兩個動態(tài)代理,分別是JDK的動態(tài)代理和CGLIB動態(tài)代理,本文重點(diǎn)給大家介紹下SpringAop實(shí)現(xiàn)原理及代理模式,感興趣的朋友一起看看吧2022-04-04JPA如何使用nativequery多表關(guān)聯(lián)查詢返回自定義實(shí)體類
這篇文章主要介紹了JPA如何使用nativequery多表關(guān)聯(lián)查詢返回自定義實(shí)體類,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11maven多個plugin相同phase的執(zhí)行順序
這篇文章主要介紹了maven多個plugin相同phase的執(zhí)行順序,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12