docker-compose的使用

上一篇文章我们已经提到了如何使用docker快速将java应用发布到阿里云的仓库,这一篇我们讲一下docker-compose的应用;

上一篇链接  https://blog.csdn.net/u012357455/article/details/93629601

 

准备工作:安装docker-compose

官方地址 https://docs.docker.com/compose/install/,安装方法

 

也可以使用该方法 

 sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

安装完成后输入  

docker-compose --version

 

查看版本,我这里是1.21.2的版本;

理论上这样我们就ok了。

卸载命令

  rm /usr/local/bin/docker-compose

 

下面讲解具体的dockercompose文件编写;

下面提供我的一份案例

version: '3' # 表示该 Docker-Compose 文件使用的是 Version 2 file
services:
  eam-server:  # 指定服务名称
    image: #自己镜像的地址
    restart: always
    hostname: eam-server
    container_name: eam-server
    networks:
      - cloud
    ports:    # 指定端口映射
      - "8761:8761"
  eam-config-server:
    image: #自己镜像的地址
    restart: always
    hostname: eam-config-server
    container_name: eam-config-server
    volumes:
      - "./entrypoint.sh:/entrypoint.sh"
    environment:
      SLEEP_SECOND: 5
    tty: true
    entrypoint: /entrypoint.sh -d eam-server:8761 -c 'java -jar -Djava.security.egd=file:/dev/./urandom /app.jar'
    ports:    # 指定端口映射
      - "6671:6671"
    networks:
      - cloud
    depends_on:
        - eam-server
#指定网络
networks:
  cloud:
    driver: bridge

选择性讲一下参数的意思

其中的volumes environment 及eam-config中的 entrypoint意思是使用 entrypoint.sh脚本代替原有的dockerfile的配置 

接下来贴一下entrypoint的代码

#!/bin/bash
#set -x
#******************************************************************************
# @file    : entrypoint.sh
#
# @brief   : entry point for manage service start order
# history  : init
#******************************************************************************

: ${SLEEP_SECOND:=2}

wait_for() {
    echo Waiting for $1 to listen on $2...
    while ! nc -z $1 $2; do echo waiting sleep $SLEEP_SECOND s; sleep $SLEEP_SECOND; done
}

declare DEPENDS
declare CMD

while getopts "d:c:" arg
do
    case $arg in
        d)
            DEPENDS=$OPTARG
            ;;
        c)
            CMD=$OPTARG
            ;;
        ?)
            echo "unkonw argument"
            exit 1
            ;;
    esac
done

for var in ${DEPENDS//,/}
do
    host=${var%:*}
    port=${var#*:}
    wait_for $host $port
done

eval $CMD
#避免执行完命令之后退出容器
tail -f /dev/null

然后将这两份文件放在同一个目录,再给entrypoint.sh 执行权限就好了,简单点就chmod 666 entrypoint.sh;

最后执行下 docker-compose up就可以了,实测可行;

 

遇到的问题

standard_init_linux.go:195: exec user process caused "no such file or directory

在网上找了很久,最后找到了这篇

https://www.jianshu.com/p/ffe2b5a08897

对于我们来说,依次执行命令即可

cat -v entrypoint.sh  确认是不是这个问题

 yum install dos2unix

dos2unix entrypoint.sh

再来执行一遍docker-compose up 问题解决

 

最后附上docker-compose的常用命令

https://www.cnblogs.com/moxiaoan/p/9299404.html

https://blog.csdn.net/skh2015java/article/details/80410306

 

 

显示容器ip

docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值