统一前端打包环境之Docker脚本

220 阅读2分钟

install安装脚本:

#!/bin/bash
echo "初始化进行中,请稍后..."
BASE_PATH=$(cd `dirname $0`;pwd)
#echo "base_path is $BASE_PATH"
func(){
  cp -f $BASE_PATH/.bash_profile ~/.bash_profile
  docker load<$BASE_PATH/front100.tar
}
func
source  ~/.bash_profile

echo "初始化结束"

.bash_profile

#!/bin/bash
#note:this $PWD executed when teminal opened
alias exp="docker run -it --rm --name front100 -v $PWD:/workspace -p 3000:3000 -p 8080:8080 -p 9090:9090 front:100 /bin/bash"

#yam * == npm run *
#--net=host
alias yam='func() {
  echo $PWD
  if [[ $1 == "dev" || $1 =~ build.* ]]
  then
    if [[ $PWD =~ member-system.* ]]
    then
      docker run -it --rm -v $PWD:/workspace -p 3000:3000 front:100 npm run $@
    elif [[ $PWD =~ gopher.* ]]
    then
      docker run -it --rm -v $PWD:/workspace -p 9908:9908 front:100 npm run $@
    else
      docker run -it --rm -v $PWD:/workspace -p 8080:8080 front:100 npm run $@
    fi
  elif [[ $1 == "redis-server" ]]
  then
    docker run -it --rm --name front100 -p 6379:6379 front:100 redis-server
  elif [[ $1 == "mongod" ]]
  then
    docker run -it --rm --name front100 -v $PWD:/workspace -p 27017:27017 front:100 mongod && /bin/bash
  elif [[ $1 == "exec" ]]
  then
    docker exec -it front100 /bin/bash
  else
    echo "请输入容器启动参数,例如: yam dev, yam build ."
  fi
};func'


#alias dbuild="docker build -t "
# $@传入镜像的名称和版本号 如front:002
#交互传参构建镜像
alias dbuild='dbuild() {
  echo "------开始构建镜像------"
  echo "请输入镜像仓库名和标签名称: "
  read repoAndTag
  docker build -t $repoAndTag $PWD
  echo "------构建镜像结束------"
};dbuild'
#镜像查看 构建 删除 打标签 搜索 下载 更新 运行
alias dimages="docker images"
alias dbuild="docker build -t $1 ."
alias drmi="docker rmi -f $1"
alias dtag="docker tag $1 wq/centos:dev"
alias dsearch="docker search $1"
alias dpull="docker pull $1"
alias dcommit="docker commit $1 wq/centos:v2"
alias drun="docker run -it front:002"
#镜像保存 导入
alias dsave="docker save -o front100.tar front:100"
alias dload="docker load<front100.tar"
#查看容器 停止容器 启动容器 重启容器 全部停止
alias dpsa="docker ps -a" # watch all containers
alias dstop="docker stop $1"
alias dstart="docker start $1"
alias drestart="docker restart $1"
alias dclean="docker stop $(docker ps -a -q) && docker system prune --all --force"

#Docker容器连接
#端口映射并不是唯一把 docker 连接到另一个容器的方法。
#docker 有一个连接系统允许将多个容器连接在一起,共享连接信息。
#docker 连接会创建一个父子关系,其中父容器可以看到子容器的信息。

startup

#!/bin/bash#npm commandsif [[ $1 == "dev" || $1 =~ build.* ]]then  #echo "npm run $@"  npm run $@fi#test commandsif [[ $1 == "java" && $2 == "main" ]]then  javac main.javafi

front100 Dockerfile:

#base image (ubuntu minimum mirror)FROM ubuntu:16.04MAINTAINER "JOHNSON"#sed sourceRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.listRUN apt-get updateRUN apt-get upgrade -y#install basic components (vim gcc make curl...)RUN apt-get install -y vim bash-completionRUN apt-get updateRUN apt-get install -y gcc automake autoconf libtool makeRUN apt-get -y install curl=7.47.0-1ubuntu2.13#RUN apt-get install wget#zip tools (apt-cache show package_name)RUN apt-get install zip -yRUN apt-get install unzip -y##node (every docker command's context is WORKDIR)ADD node-v10.15.3-linux-x64.tar.gz /app/softwareRUN ln -s /app/software/node-v10.15.3-linux-x64/bin/npm /usr/local/bin/RUN ln -s /app/software/node-v10.15.3-linux-x64/bin/node /usr/local/bin/RUN ln -s /app/software/node-v10.15.3-linux-x64/bin/npx /usr/local/bin/##npm registryRUN npm config set registry http://registry.npm.taobao.org#python3 (versions already validated in source)RUN apt-get install python3 -yRUN apt-get install python3-pip -y#RUN apt-get -y -q install nginx##redis (this installer auto append $PATH)ADD redis-4.0.2.tar.gz /app/softwareRUN cd /app/software/redis-4.0.2 && make MALLOC=libc && make install && cp redis.conf /etc/redis.conf##mongo (mongodb default data dump dir,  --dbpath option set data dump dir)ADD mongodb-linux-x86_64-4.0.9.tgz /app/softwareRUN mv /app/software/mongodb-linux-x86_64-4.0.9 /usr/local/mongodbRUN ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongodRUN ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo#RUN export PATH=/usr/local/mongodb/bin:$PATH # not workENV PATH=$PATH:/usr/local/mongodb/binRUN mkdir -p /data/db#alias setting#COPY .bash_profile ~/.bash_profile#RUN source ~/.bash_profile#specify workdirWORKDIR /workspace#expose port for mapEXPOSE 8080 9090EXPOSE 3000#startupADD startup /usr/bin/startupRUN chmod +x /usr/bin/startup#bootstrap#ENTRYPOINT ["/usr/bin/startup"]#CMD ["dev"]CMD ["/bin/bash"]

Dockerfile-2:

#base image (ubuntu minimum mirror)FROM ubuntu:16.04MAINTAINER "JOHNSON"#sed sourceRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.listRUN apt-get updateRUN apt-get upgrade -y#install basic components (vim gcc make...)RUN apt-get install -y vim bash-completionRUN apt-get updateRUN apt-get install -y gcc automake autoconf libtool make#RUN apt-get install wget##node (every docker command's context is WORKDIR)ADD node-v8.9.4-linux-x64.tar.gz /app/softwareRUN ln -s /app/software/node-v8.9.4-linux-x64/bin/npm /usr/local/bin/RUN ln -s /app/software/node-v8.9.4-linux-x64/bin/node /usr/local/bin/RUN ln -s /app/software/node-v8.9.4-linux-x64/bin/npx /usr/local/bin/##npm registryRUN npm config set registry http://registry.npm.taobao.org##redis (this installer auto append $PATH)ADD redis-4.0.2.tar.gz /app/softwareRUN cd /app/software/redis-4.0.2 && make MALLOC=libc && make install && cp redis.conf /etc/redis.conf##mongo (mongodb default data dump dir,  --dbpath option set data dump dir)ADD mongodb-linux-x86_64-4.0.9.tgz /app/softwareRUN mv /app/software/mongodb-linux-x86_64-4.0.9 /usr/local/mongodbRUN ln -s /usr/local/mongodb/bin/mongod /usr/bin/mongodRUN ln -s /usr/local/mongodb/bin/mongo /usr/bin/mongo#RUN export PATH=/usr/local/mongodb/bin:$PATH # not workRUN mkdir -p /data/db##zlib (decompress lib)#ADD zlib-1.2.11.tar.gz /app/software#RUN mkdir -p /usr/local/zlib#RUN cd /app/software/zlib-1.2.11 && ./configure --prefix=/usr/local/zlib && make && make install##python3 (安装较新版本,由于zlib组件安装不成功导致安装失败)#ADD Python-3.7.4.tgz /app/software#RUN mkdir -p /usr/local/python3#RUN cd /app/software/Python-3.7.4 && ./configure --prefix=/usr/local/python3 && make && make install#RUN ln -s /usr/local/python3/bin/python3 /usr/bin/python3#RUN export PATH=$PATH:/usr/local/python3/bin#python3 (安装较新版本会出现各种各样的问题,各个环境的支持情况都不明确,安装已经在源中验证过的版本,够用就行)RUN apt-get install python3RUN apt-get install python3-pip#specify workdirWORKDIR /workspace#expose port for map EXPOSE命令只是声明了容器应该打开的端口并没有实际上将它打开!也就是说,如果你不用-p或者-P中指定要映射的端口,你的容器是不会映射端口出去的EXPOSE 8080 9090EXPOSE 3000#default bootstrap cmd#CMD ["npm run dev"]

Docker-compose:

client Dockerfile:

FROM ubuntu:16.04MAINTAINER "JOHNSON"#sed sourceRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.listRUN apt-get updateRUN apt-get upgrade -yRUN apt-get update#python3 (versions already validated in source)RUN apt-get install python3 -yRUN apt-get install python3-pip -yADD client2.py /client.pyCMD ["python3", "/client.py"]

server Dockerfile:

FROM ubuntu:16.04MAINTAINER "JOHNSON"#sed sourceRUN sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.listRUN apt-get updateRUN apt-get upgrade -yRUN apt-get update && apt-get install -y nmapCMD ncat -l 2000 -k --exec /bin/cat

docker-compose.yml:

  echo-server:    image: server    expose:      - "2000"  client:    image: client    links:      - echo-server:talkto