使用docker快速部署Nginx、Redis、MySQL、Tomcat及制作镜像的方法

 更新时间:2024年11月19日 15:13:57   作者:墨鸦_Cormorant  
这篇文章介绍了如何使用Docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像的过程,它涵盖了从基础镜像的使用、Dockerfile的编写到应用的构建和部署的详细步骤,通过本文,可以掌握如何利用Docker简化应用的部署和管理,感兴趣的朋友跟随小编一起看看吧

应用快速部署

Nginx

docker run -d -p 80:80 nginx

使用浏览器访问虚拟机地址

Redis

docker pull redis
docker run --name redis -d -p 6379:6379 redis

可以使用 Redis 客户端工具连接

连接成功可以看到服务器信息

MySQL

企业中用得最多的是 MySQL 5.7 版本

docker pull centos/mysql-57-centos7
# MYSQL_ROOT_PASSWORD是设置默认登录用户名和密码都是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
# 创建tomcat目录
mkdir -p /opt/docker/tomcat/ROOT
cd /opt/docker/tomcat/ROOT
# 创建index.html文件
vim index.html
# 写入简单内容
<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

参数说明:

  • -p 8080:8080 :将容器的 8080 端口映射到主机的 8080 端口
  • -p XXX:YYY :前面的 XXX 指的是宿主机的端口,后面的 YYY 指的是容器中的端口
  • -v /opt/docker/tomcat:/usr/local/tomcat/webapps 将主机中 /opt/docker/tomcat 目录挂载到容器的 webapps

用浏览器打开 8080 端口

制作镜像

镜像原理

思考:

Docker 镜像本质是什么?

是一个分层文件系统

Docker 中一个 centos 镜像为什么只有200MB,而一个 centos 操作系统的 iso 文件要几个G ?

Centos 的 iso 镜像文件包含 bootfs 和 rootfs,而 docker 的 centos 镜像复用操作系统的 bootfs,只有 rootfs 和其他镜像层

Docker 中一个 tomcat 镜像为什么有 600MB,而一个 tomcat 安装包只有 10多MB?

由于 docker 中镜像是分层的,tomcat 虽然只有10多MB,但他需要依赖于父镜像和基础镜像,所有整个对外暴露的 tomcat 镜像大小 600多MB

镜像原理

基于已有容器创建

docker commit [OPTIONS] 容器名称或ID [镜像名称[:TAG]]
# 示例;使用MySQL容器创建镜像
docker commit 7c mysqltest:1.0
# 查看镜像
docker images
# 启动容器
docker run -d -p 3306:3306 mysqltest:1.0

OPTIONS 参数说明:

  • -a, --author string :作者信息
  • -c, --change list :使用 Dockerfile 创建
  • -m, --message string :提交信息
  • -p, --pause :提交时暂停容器运行

使用 Dockerfile 创建镜像

Dockerfile 是一个文件,内容由一行行命令语句组成,主要分为四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。

# 使用基础镜像
FROM ubuntu:latest
# 设置时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置镜像的作者信息
#LABEL maintainer="Your Name <your.email@example.com>"
# 暴露容器的端口。非必需
#EXPOSE 80
# 定义环境变量
#ENV ENV_VARIABLE_NAME=value
# 执行更新操作并安装基本软件包。非必需
#RUN apt-get update && \
#    apt-get install -y \
#    software-properties-common \
#    build-essential \
#    curl
# 设置工作目录
WORKDIR /app
# 复制本地文件到容器中
COPY . /app
# 执行容器启动时的命令
CMD ["command", "arg1", "arg2"]
# 或者,如果需要以可执行文件形式运行应用程序
# CMD ["./your_executable"]
# 或者,如果是需要通过ENTRYPOINT启动的服务
# ENTRYPOINT ["entrypoint_script.sh"]

指令说明

指令说明
FROM指定所创建镜像的基础镜像
MAINTAINER维护者信息
RUN运行命令
CMD启动容器时默认执行命令
LABEL标签信息
EXPOSE声明镜像内服务所监听的端口
ENV环境变量
ADD复制指定路径下的内容到容器中的路径下,可以为URL,也可以是文件路径,如果为tar文件,会自动解压
COPY复制宿主机的定路径下的内容到容器中的路径下
USER运行容器时的用户名
WORKDIR配置工作目录
ARG指定镜像内使用的参数

构建应用

需求:构建一个 Web 应用,通过 docker 来运行

步骤:

使用 SpringBoot 搭建应用,并提供一个 REST 接口

@RestController
public class HelloController {
    @GetMapping("/hello")
    public String hello(){
        return "Hello Docker!";
    }
}
  • 将应用打包成 jar 包
  • 将 jar 包上传到 Linux 服务器
  • 构建 dockerfile 文件

创建 Dockerfile 文件

vi Dockerfile

编辑内容如下:

# 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

创建镜像

编写完成Dockerfile后,可以通过以下命令来创建镜像:

docker build [OPTIONS]

主要参数如下:

  • -f :指定 Dockerfile 路径,默认为当前目录
  • -t :指定生成镜像的标签信息

示例:

# 最后的.表示当前目录
docker build -t mywebapp:1.0 .

构建过程:

# 查看镜像
docker images
# 启动镜像
docker run -d -p 8080:8080 mywebapp:1.0

打开浏览器访问

到此这篇关于使用docker快速部署Nginx、Redis、MySQL、Tomcat以及制作镜像的文章就介绍到这了,更多相关docker部署Nginx、Redis、MySQL、Tomcat内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • docker-compose部署mysql数据库完整步骤

    docker-compose部署mysql数据库完整步骤

    Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排,这篇文章主要给大家介绍了关于docker-compose部署mysql数据库的完整步骤,需要的朋友可以参考下
    2024-05-05
  • 如何调整Docker中nginx的日志级别详解

    如何调整Docker中nginx的日志级别详解

    这篇文章主要给大家介绍了关于如何调整Docker中nginx的日志级别的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • docker 如何删除none镜像

    docker 如何删除none镜像

    本篇文章主要介绍了docker 如何删除none镜像,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-06-06
  • docker基本使用方法入门示例

    docker基本使用方法入门示例

    这篇文章主要介绍了docker基本使用方法入门示例,包含docker命令查询方法,查询镜像和下拉镜像,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • Docker部署MongoDb的详细过程记录

    Docker部署MongoDb的详细过程记录

    这篇文章主要介绍了如何使用Docker Compose启动MongoDB副本集,包括配置文件编写、容器启动命令、副本集初始化、角色和用户创建等步骤,需要的朋友可以参考下
    2024-12-12
  • Docker Push Skipped foreign layer 的错误问题及解决方案

    Docker Push Skipped foreign layer 的错误问题及解决方案

    当Docker推送基于Windows镜像到私有仓库的时候会遇到Skipped foreign layer的问题,这篇文章主要介绍了Docker Push Skipped foreign layer 的错误问题及解决方案,需要的朋友可以参考下
    2022-05-05
  • dockerfile结合go应用程序的简单应用代码示例

    dockerfile结合go应用程序的简单应用代码示例

    Dockerfile文件是一个包含了指令和参数的文本文件,用于自动化构建Docker镜像,这篇文章主要给大家介绍了关于dockerfile结合go应用程序的简单应用,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • 在docker环境中实现配置hosts

    在docker环境中实现配置hosts

    这篇文章主要介绍了在docker环境中实现配置hosts,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • Docker使用编写dockerfile启动node.js应用

    Docker使用编写dockerfile启动node.js应用

    这篇文章主要介绍了Docker使用编写dockerfile启动node.js应用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • 关于docker cgroups资源限制的问题

    关于docker cgroups资源限制的问题

    cgroups是一个非常强大的linux内核工具,他不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重、计算使用量,这篇文章主要介绍了docker cgroups资源限制,需要的朋友可以参考下
    2022-09-09

最新评论