使用docker快速部署Nginx、Redis、MySQL、Tomcat及制作鏡像的方法
應用快速部署
Nginx
docker run -d -p 80:80 nginx
使用瀏覽器訪問虛擬機地址
Redis
docker pull redis docker run --name redis -d -p 6379:6379 redis
可以使用 Redis 客戶端工具連接
連接成功可以看到服務(wù)器信息
MySQL
企業(yè)中用得最多的是 MySQL 5.7 版本
docker pull centos/mysql-57-centos7 # MYSQL_ROOT_PASSWORD是設(shè)置默認登錄用戶名和密碼都是root docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7
通過客戶端例如 navicat、dbeaver 連接
Tomcat
可以先在 Docker Hub 中搜索 tomcat,找到對應的 tomcat 版本和 JDK 版本
# 下載鏡像 docker pull tomcat # 創(chuàng)建tomcat目錄 mkdir -p /opt/docker/tomcat/ROOT cd /opt/docker/tomcat/ROOT # 創(chuàng)建index.html文件 vim index.html # 寫入簡單內(nèi)容 <html> <h1>Hello Tomcat in Docker!</h1> </html> # 啟動容器 docker run -d -p 8080:8080 --name tomcat -v /opt/docker/tomcat:/usr/local/tomcat/webapps tomcat
參數(shù)說明:
- -p 8080:8080 :將容器的 8080 端口映射到主機的 8080 端口
-p XXX:YYY
:前面的 XXX 指的是宿主機的端口,后面的 YYY 指的是容器中的端口- -v /opt/docker/tomcat:/usr/local/tomcat/webapps 將主機中 /opt/docker/tomcat 目錄掛載到容器的 webapps
用瀏覽器打開 8080 端口
制作鏡像
鏡像原理
思考:
Docker 鏡像本質(zhì)是什么?
是一個分層文件系統(tǒng)
Docker 中一個 centos 鏡像為什么只有200MB,而一個 centos 操作系統(tǒng)的 iso 文件要幾個G ?
Centos 的 iso 鏡像文件包含 bootfs 和 rootfs,而 docker 的 centos 鏡像復用操作系統(tǒng)的 bootfs,只有 rootfs 和其他鏡像層
Docker 中一個 tomcat 鏡像為什么有 600MB,而一個 tomcat 安裝包只有 10多MB?
由于 docker 中鏡像是分層的,tomcat 雖然只有10多MB,但他需要依賴于父鏡像和基礎(chǔ)鏡像,所有整個對外暴露的 tomcat 鏡像大小 600多MB
鏡像原理
基于已有容器創(chuàng)建
docker commit [OPTIONS] 容器名稱或ID [鏡像名稱[:TAG]] # 示例;使用MySQL容器創(chuàng)建鏡像 docker commit 7c mysqltest:1.0 # 查看鏡像 docker images # 啟動容器 docker run -d -p 3306:3306 mysqltest:1.0
OPTIONS 參數(shù)說明:
- -a, --author string :作者信息
- -c, --change list :使用 Dockerfile 創(chuàng)建
- -m, --message string :提交信息
- -p, --pause :提交時暫停容器運行
使用 Dockerfile 創(chuàng)建鏡像
Dockerfile 是一個文件,內(nèi)容由一行行命令語句組成,主要分為四個部分:基礎(chǔ)鏡像信息、維護者信息、鏡像操作指令和容器啟動時執(zhí)行指令。
# 使用基礎(chǔ)鏡像 FROM ubuntu:latest # 設(shè)置時區(qū) ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 設(shè)置鏡像的作者信息 #LABEL maintainer="Your Name <your.email@example.com>" # 暴露容器的端口。非必需 #EXPOSE 80 # 定義環(huán)境變量 #ENV ENV_VARIABLE_NAME=value # 執(zhí)行更新操作并安裝基本軟件包。非必需 #RUN apt-get update && \ # apt-get install -y \ # software-properties-common \ # build-essential \ # curl # 設(shè)置工作目錄 WORKDIR /app # 復制本地文件到容器中 COPY . /app # 執(zhí)行容器啟動時的命令 CMD ["command", "arg1", "arg2"] # 或者,如果需要以可執(zhí)行文件形式運行應用程序 # CMD ["./your_executable"] # 或者,如果是需要通過ENTRYPOINT啟動的服務(wù) # ENTRYPOINT ["entrypoint_script.sh"]
指令說明
指令 | 說明 |
---|---|
FROM | 指定所創(chuàng)建鏡像的基礎(chǔ)鏡像 |
MAINTAINER | 維護者信息 |
RUN | 運行命令 |
CMD | 啟動容器時默認執(zhí)行命令 |
LABEL | 標簽信息 |
EXPOSE | 聲明鏡像內(nèi)服務(wù)所監(jiān)聽的端口 |
ENV | 環(huán)境變量 |
ADD | 復制指定路徑下的內(nèi)容到容器中的路徑下,可以為URL,也可以是文件路徑,如果為tar文件,會自動解壓 |
COPY | 復制宿主機的定路徑下的內(nèi)容到容器中的路徑下 |
USER | 運行容器時的用戶名 |
WORKDIR | 配置工作目錄 |
ARG | 指定鏡像內(nèi)使用的參數(shù) |
構(gòu)建應用
需求:構(gòu)建一個 Web 應用,通過 docker 來運行
步驟:
使用 SpringBoot 搭建應用,并提供一個 REST 接口
@RestController public class HelloController { @GetMapping("/hello") public String hello(){ return "Hello Docker!"; } }
- 將應用打包成 jar 包
- 將 jar 包上傳到 Linux 服務(wù)器
- 構(gòu)建 dockerfile 文件
創(chuàng)建 Dockerfile 文件
vi Dockerfile
編輯內(nèi)容如下:
# Spring Boot 運行需要依賴java FROM java:8 # 復制jar包到容器中 COPY docker-demo-0.0.1-SNAPSHOT.jar docker-demo-0.0.1-SNAPSHOT.jar # 運行命令 CMD java -jar docker-demo-0.0.1-SNAPSHOT.jar
創(chuàng)建鏡像
編寫完成Dockerfile后,可以通過以下命令來創(chuàng)建鏡像:
docker build [OPTIONS]
主要參數(shù)如下:
- -f :指定 Dockerfile 路徑,默認為當前目錄
- -t :指定生成鏡像的標簽信息
示例:
# 最后的.表示當前目錄 docker build -t mywebapp:1.0 .
構(gòu)建過程:
# 查看鏡像 docker images # 啟動鏡像 docker run -d -p 8080:8080 mywebapp:1.0
打開瀏覽器訪問
到此這篇關(guān)于使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作鏡像的文章就介紹到這了,更多相關(guān)docker部署Nginx、Redis、MySQL、Tomcat內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker+jenkins+gitee配置持續(xù)集成部署方式
這篇文章主要介紹了docker+jenkins+gitee配置持續(xù)集成部署方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Docker快速部署gitlab+gitlab-runner實例
這篇文章主要介紹了Docker快速部署gitlab+gitlab-runner實例,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力
這篇文章主要介紹了Docker遇到Intellij IDEA,Java開發(fā)提升了十倍生產(chǎn)力,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10