应用快速部署
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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论