• docker,docker-compose常用命令及部署


    一、docker

      1、常用命令

    docker inspect redismaster  查看docker容器ip
    
    docker exec -it dataseciruty-shuhan /bin/sh  容器启动前提下进入docker控制台
    
    docker build -t datasecurity-web-1.0.0 . 构建docker镜像
    
    docker rmi imageid 删除docker镜像
    
    docker ps -a 查看所有容器
    
    docker run -d --restart=always -p 8091:8091 --name xinyar_erp_web_test xinyar/erp-web 运行docker容器
    
    docker logs -f dataseciruty-shuhan 查看容器运行日志

      2、dockerfile

    FROM williamyeh/java8:latest 设置项目运行所需基础镜像
    EXPOSE 8081 设置端口
    ENV LANG="C.UTF-8" 设置容器编码格式,防止日志打印中文乱码 ADD datasecurity-web-1.0.0.jar shuhan-web.jar 挂载运行jar包到容器位置 ENTRYPOINT ["java","-jar","shuhan-web.jar", "--spring.config.location=/shuhan-config/bootstrap.yml", "--spring.config.location=/shuhan-config/application.yml"]
    jar包执行命令 后面的配置文件为项目执行的配置文件,需要在docker run 时将配置文件挂载到容器中,这样在修改配置文件后无需重新构建镜像,只需重启项目即可重新加载配置,这里使用nacos配置热加载,部分配置可以无需重启项目也可以更新配置

      3、docker构建运行脚本

    DOCKER_CONTAINER_NAME="dataseciruty-shuhan" # 容器名称
    
    # 镜像相关
    DOCKER_IMAGE_NAME="dataseciruty-shuhan"
    DOCKER_NEW_VERSION="1.0.0"
    # 版本是否符合
    DOCKER_IMAGE_IS_MATCH_TAR_FILE="false"
    
    function destory_docker_service()
    {
        # 停止容器
        for i in [ `docker ps ` ]; do
                if [[ "$i" == "$DOCKER_CONTAINER_NAME" ]]; then
                        echo "尝试停止$DOCKER_CONTAINER_NAME容器..."
                    docker stop $DOCKER_CONTAINER_NAME
                fi
        done
        # 删除容器
        for i in [ `docker ps -a` ]; do
                if [[ "$i" == "$DOCKER_CONTAINER_NAME" ]]; then
                        echo "尝试删除$DOCKER_CONTAINER_NAME容器..."
                docker rm $DOCKER_CONTAINER_NAME
                fi
        done
    }
    
    function docker_build_image()
    {
            # 清理容器(保留历史构建的镜僿
            destory_docker_service
    
            if [[ $? -eq 0 ]]; then
                    echo "应用服务容器和镜像已处理,配置文件已完成复制!"
            else
                    exit 1
            fi
    
            for i in [ `docker images --filter reference=$DOCKER_IMAGE_NAME` ]; do
                    #statements
                    if [[  "$i" == "$DOCKER_NEW_VERSION" ]]; then
                            echo "镜像版本重复"
                            exit 1
                    fi
            done
    
            echo "Docker镜像构建......cmd:(docker build -t $DOCKER_IMAGE_NAME:$DOCKER_NEW_VERSION .)"
            docker build -t $DOCKER_IMAGE_NAME:$DOCKER_NEW_VERSION .
    
            # 判断是否有镜僿存在时创建相应的容器实例
            for i in [ `docker images --filter reference=$DOCKER_IMAGE_NAME` ]; do
                    #statements
                    echo "现有的版本信恿 $i"
                    if [[  "$i" == "$DOCKER_NEW_VERSION" ]]; then
                            DOCKER_IMAGE_IS_MATCH_TAR_FILE="true"
                            echo "已经找到最新构建的镜像!"
                            run_docker_service_image
                            break
                    fi
            done
            if [[ $DOCKER_IMAGE_IS_MATCH_TAR_FILE == "false" ]]; then
                    echo "构建镜像未匹配到最新版本,已退出安裿"
                    exit 1
            fi
    
            echo "构建后的docker images镜像列表:"
            docker images
    
            echo "当前正在运行的Docker容器实例列表:"
            docker ps
    }
    
    function run_docker_service_image()
    {
            echo "正在启动docker 服务容器......"
            docker run -p 8082:8081 --name $DOCKER_CONTAINER_NAME --network mynet -d -v /root/shuhan-config/:/shuhan-config $DOCKER_IMAGE_NAME:$DOCKER_NEW_VERSION  ###-v 将配置文件挂载到容器中
            
            docker logs $DOCKER_CONTAINER_NAME
    }
    
    while getopts ":v:" opt
    do
        case $opt in
            v)
            echo "镜像版本为:$OPTARG"
            DOCKER_NEW_VERSION=$OPTARG
                    docker_build_image
            ;;
            ?)
            echo "缺少版本参数-v"
            exit 1;;
        esac
    done

      4、docker访问远程仓库操作

    vim /etc/docker/daemon.json  修改docker镜像代理地址

    {
      

           "registry-mirrors": [
           "https://jx0gsb4z.mirror.aliyuncs.com"
        ],

        "insecure-registries": [
    "127.0.0.1"
    ]
    }
    加入这个配置

    docker login 127.0.0.1  登录docker镜像远程仓库
     
    docker tag metabase:1.0.0 127.0.0.1/shuhan_project/metabase:1.0.0 标记仓库镜像
     
    docker pull 127.0.0.1/shuhan_project/metabase:1.0.0 拉取镜像
     
    docker commit -a "lzk" -m "assets analysis" 9b7519036f04 metabase:1.0.0 将容器状态打成镜像 # -a 作者 -m 说明 容器id 镜像名称:版本号
     
    docker save 镜像名称 -o tar包放置的路径/my.tar  将镜像打成tar包
     
    docker load -i metabase.tar 将外部tar包加载到本地docker镜像
     
    docker push 127.0.0.1/lzk_project/metabase:1.0.0 将本地镜像推送到远程docker镜像仓库

    二、docker-compose

      1、常用命令

    docker-compose up -d nginx                     构建建启动nignx容器
    
    docker-compose exec metabase-nginx bash            登录到nginx容器中
    
    docker-compose down                              删除所有nginx容器,镜像
    
    docker-compose ps                                   显示所有容器
    
    docker-compose restart nginx                   重新启动nginx容器
    
    docker-compose run --no-deps --rm php-fpm php -v  在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
    
    docker-compose build nginx                     构建镜像 。        
    
    docker-compose build --no-cache nginx   不带缓存的构建。
    
    docker-compose logs  nginx                     查看nginx的日志 
    
    docker-compose logs -f nginx                   查看nginx的实时日志
    
     
    
    docker-compose config  -q                        验证(docker-compose.yml)文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 
    
    docker-compose events --json nginx       以json的形式输出nginx的docker日志
    
    docker-compose pause nginx                 暂停nignx容器
    
    docker-compose unpause nginx             恢复ningx容器
    
    docker-compose rm nginx                       删除容器(删除前必须关闭容器)
    
    docker-compose stop nginx                    停止nignx容器
    
    docker-compose start nginx                    启动nignx容器

      2、docker-compose.yml

    version: '3'
    services:
      metabase-nginx:
        image: my-nginx:1.18-alpine  使用基础镜像
        container_name: metabase-nginx  容器名称
        networks:
          - mynet  将容器加入统一的network下是容器与容器之间通信
        ports:
          - "4001:4001"
        volumes:
        - /data/metabase-build/nginx.conf:/etc/nginx/nginx.conf:ro  nginx配置文件
      metabase-db:
        image: mysql:8.0
        container_name: metabase-db
        networks:
          - mynet
        command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci #设置utf8字符集
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456 #root管理员用户密码
        ports:
          - '33061:3306'  #host物理直接映射端口
      #报表分析平台
      metabase:
        build:   指定运行的dockerfile
          context: /data/metabase-build/bin/
          dockerfile: Dockerfile  
        image: metabase
        container_name: metabase
        restart: always
        ports:
          - "4000:4000"
        networks:
          - mynet
        volumes:
          - /data/metabase-build/bin/metabase.jar:/metabase.jar
        environment:  metabase配置
          TZ: Asia/shanghai
          MB_JETTY_PORT: 4000
          MB_DB_TYPE: mysql
          MB_DB_DBNAME: metabase
          MB_DB_PORT: 3306
          MB_DB_USER: root
          MB_DB_PASS: 123456
          MB_DB_HOST: 123.123.123.123
          MB_JETTY_HOST: 0.0.0.0
    networks:
      mynet:
        external: true

        

        

  • 相关阅读:
    python flask 环境安装
    pymongo的说明,挺详细的
    Mysql加锁过程详解
    MySQL Group Replication 介绍
    Linux 下方便的ssh非交互工具sshpass的安装与使用
    我要拿Offer之AQS条件队列及中断机制
    ThreadLocal解析
    AQS源码分析总结
    动手实现一个同步器(AQS)
    java线程池解析
  • 原文地址:https://www.cnblogs.com/liuzhengkun/p/14023327.html
Copyright © 2020-2023  润新知