docker学习之compose配合DockerFile

我爱海鲸 2021-09-08 22:45:55 暂无标签

简介使用docker-compose.yml文件以及Dockerfile文件在生成自定义镜像的同时启动当前镜像,并且由docker-compose去管理容器

1、编写docker-compose.yml文件

version: "3.1"

services:

  ssm:

    restart: always

    build:                     #构建自定义镜像

        context:  ../        #指定dockerfile文件的所在路径

        dockerfile:  Dockerfile   #指定Dockerfile文件名称

    image:  ssm:1.0.1

    container_name: ssm        

    ports:

      - 8081:8080

    environment:

        TZ:  Asia/Shanghai


2、编写Dockerfile

from daocloud.io/library/tomcat:8.5.15-jre8

copy ssm.war /usr/local/tomcat/webapps

3、在服务器上传配置文件以及war。(注意文件目录的位置)

执行命令,相关命令如下:

#可以直接启动基于docker-compose.yml以及Dockerfile文件构建的自定义镜像

docker-compose up -d

#如果自定义镜像不存在,会帮助我们构建出自定义镜像,如果自定义镜像已经存在,会直接运行这个自定义镜像

#重新构建的话。

#重新构建自定义镜像

docker-compose build

#运行当前内容,并重新构建

docker-compose up -d --build


4、执行完启动以后,我们访问:http://192.168.150.135:8081/ssm/  即可,如图:

undefined

5、我们发现访问需要加项目名,为了更好的访问,我们修改ssm为ROOT,然后将其上传到阿里云镜像仓库上

修改配置文件,如图:

undefinedundefined

6、首先我们执行如下命令:

docker-compose down  关闭并删除容器

然后你会发现如下错误:

undefined

这是因为你将docker-compose.yml文件修改了,没办法只能通过docker stop、docker rm等命令删除

然后再docker-compose目录下执行docker-compose up -d命令(注意重新将ROOT.war包上传到对应目录下)

然后又会发现一个新的问题,镜像名不能为大写,如图:

undefined

重新修改镜像名,如图:

undefined

重新启动以后又发现它不会直接替换ROOT包,就是ROOT.war不会自己解压需要将tomcat 原本的ROOT删除后才会解压,

于是,我们再Dockerfile中重新添加一条命令,RUN rm -frv /usr/local/tomcat/webapps/ROOT

如图:

undefined

这样它就会将tomcat原本的ROOT目录删除掉,然后就会解压我们的ROOT.war包,记得将8081改为80,这样就能后直接访问项目了,而不需要在加端口了,如图:

undefined

然后将docker镜像发布到阿里云仓库,可参考 

docker学习之将镜像推送到阿里云  篇文章

docker pull registry.cn-hangzhou.aliyuncs.com/haijin_space/jianli:1.0.1  直接拉取个人的简历信息

docker run -d -p 80:8080 【镜像id】 拉取完以后执行该镜像。



你好:我的2025