脚本 mall-docker-start.sh
docker stop mysql
echo '----stop mysql container----'
docker rm mysql
echo '----rm mysql container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root  \
-d mysql:5.7
echo '----start mysql container----'

docker stop redis
echo '----stop redis container----'
docker rm redis
echo '----rm redis container----'
docker run -p 6379:6379 --name redis \
-v /mydata/redis/data:/data \
-d redis:6  redis-server --appendonly yes
echo '----start redis container----'

docker stop rabbitmq
echo '----stop rabbitmq container----'
docker rm rabbitmq
echo '----rm rabbitmq container----'
docker run -p 5672:5672 -p 15672:15672 --name rabbitmq \
-d rabbitmq:3.7.15
echo '----start rabbitmq container----'

docker stop elasticsearch
echo '----stop elasticsearch container----'
docker rm elasticsearch
echo '----rm elasticsearch container----'
docker run -p 9200:9200 -p 9300:9300 --name elasticsearch \
-e "discovery.type=single-node" \
-e "cluster.name=elasticsearch" \
-v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \
-d elasticsearch:7.6.2
echo '----start elasticsearch container----'

docker stop logstash
echo '----stop logstash container----'
docker rm logstash
echo '----rm logstash container----'
docker run --name logstash -p 4560:4560 -p 4561:4561 -p 4562:4562 -p 4563:4563 \
--link elasticsearch:es \
-v /mydata/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf \
-d logstash:7.6.2
echo '----start logstash container----'

docker stop kibana
echo '----stop kibana container----'
docker rm kibana
echo '----rm kibana container----'
docker run --name kibana -p 5601:5601 \
--link elasticsearch:es \
-e "elasticsearch.hosts=http://es:9200" \
-d kibana:7.6.2
echo '----start kibana container----'

docker stop mongo
echo '----stop mongo container----'
docker rm mongo
echo '----rm mongo container----'
docker run -p 27017:27017 --name mongo \
-v /mydata/mongo/db:/data/db \
-d mongo:4.2.5
echo '----start mongo container----'

脚本修改
## windows下的.sh脚本上传到linux上使用,需要修改文件格式,否则会因为有特殊格式存在而无法执行:
#使用vim编辑器来修改
vi mall-docker-start.sh
# 查看文件格式,windows上传上来的默认为dos
:set ff
#修改文件格式为unix
:set ff=unix
#保存并退出
:wq
mall-admin 打包

方式一:构建mall项目中的依赖模块,否则当构建可运行的服务模块时会因为无法找到这些模块而构建失败

## 只install mall-common,mall-mbg,mall-security三个模块
clean install -pl mall-common,mall-mbg,mall-security -am
  • -pl 打包指定模块
  • -am 同时打包所指定模块的依赖模块
  • -amd 同时打包依赖于所指定模块的模块

方式二: mall-admin 打包
在这里插入图片描述

在这里插入图片描述
配置

## maven
clean install -pl mall-admin -am
${WORKSPACE}/pom.xml

## shell
#!/usr/bin/env bash
app_name='mall-admin'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8080:8080 --name ${app_name} \
--link mysql:db \
--link redis:redis \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'

打包 mall-admin 模块,并自动打包依赖的模块
clean install -pl mall-admin -am

mall-portal 打包
## maven
clean install -pl mall-portal  -am
${WORKSPACE}/pom.xml

## shell
#!/usr/bin/env bash
app_name='mall-portal'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8085:8085 --name ${app_name} \
--link mysql:db \
--link redis:redis \
--link mongo:mongo \
--link rabbitmq:rabbit \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'
mall-search 打包
## maven
clean install -pl mall-search  -am
${WORKSPACE}/pom.xml

## shell
#!/usr/bin/env bash
app_name='mall-search'
docker stop ${app_name}
echo '----stop container----'
docker rm ${app_name}
echo '----rm container----'
docker rmi `docker images | grep none | awk '{print $3}'`
echo '----rm none images----'
docker run -p 8081:8081 --name ${app_name} \
--link mysql:db \
--link elasticsearch:es \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime \
-v /mydata/app/${app_name}/logs:/var/logs \
-d mall/${app_name}:1.0-SNAPSHOT
echo '----start container----'
DockerFile
  • 环境变量被以下列表的Dockerfile指令支持:
    ADD
    COPY
    ENV
    EXPOSE
    FROM
    LABEL
    STOPSIGNAL
    USER
    VOLUME
    WORKDIR
    还包括:
    ONBUILD (当跟上面支持的指令中一个组合时)

    Dockerfile文件万字全面解析

  • CMD和ENTRYPOINT如何相互作用
    CMD 和 ENTRYPOINT 指令都定义了在运行容器时执行的命令。 很少有规则描述他们的合作。

    1. Dockerfile 应至少指定一个 CMD 或 ENTRYPOINT 命令。
    2. 使用容器作为可执行文件时,应定义 ENTRYPOINT。
    3. CMD 应该用作为 ENTRYPOINT 命令定义默认参数或在容器中执行 ad-hoc 命令的方法。
    4. 使用备用参数运行容器时,将覆盖 CMD。

    下表显示了针对不同 ENTRYPOINT/CMD 组合执行的命令:
    在这里插入图片描述

  • CMD
    功能为容器启动时要运行的命令
    语法有三种写法

  1. CMD [“executable”,“param1”,“param2”] (exec模式)推荐
  2. CMD [“param1”,“param2”] 提供给ENTRYPOINT的默认参数
  3. CMD command param1 param2 (shell模式,shell模式会自动在你提供的命令前面添加一个/bin/bash -c命令)

    注意: 比如我们自定义了ENV name=lisa
    使用shell模式的话,可以输出$namelisa
    但是exec 模式的话是不能正常输出$namd
    如果想用exec 模式获取ENV变量的话,可以用折中方法,就是编写脚本,然后使用脚本去获取变量输出,CMD指令执行脚本,脚本一定加可执行权限比如 CMD["/root/test.sh"]
    test.sh内容为
    #!/bin/bash
    echo $name

  • ENTRYPOINT 指令
    ENTRYPOINT 指令:类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程
    但是, 如果运行 docker run 时使用了 --entrypoint 选项,此选项的参数可当作要运行的程序覆盖 ENTRYPOINT 指令指定的程序

  • NTRYPOINT 与 CMD 区别
    如:

FROM ubuntu:14.10  
ENTRYPOINT ["top", "-b"]   
CMD ["-c"]  

把可能需要变动的参数写到 CMD 里面。然后你可以在 docker run 里指定参数
这样 CMD 里的参数(这里是-c) 就会被覆盖掉而 ENTRYPOINT 里的不被覆盖。
注意:
ENTRYPOINT有两种写法,第二种(shell form)会屏蔽掉 docker run 时后面加的命令和 CMD 里的参数。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐