zoukankan      html  css  js  c++  java
  • 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

        

        

  • 相关阅读:
    使用tcmalloc编译启动时宕机
    使用tcmalloc编译出现undefined reference to `sem_init'
    使用AddressSanitizer做内存分析(一)——入门篇
    VIM-美化你的标签栏
    Entity Framework Code First (六)存储过程
    Entity Framework Code First (五)Fluent API
    Entity Framework Code First (四)Fluent API
    Entity Framework Code First (三)Data Annotations
    Entity Framework Code First (二)Custom Conventions
    Entity Framework Code First (一)Conventions
  • 原文地址:https://www.cnblogs.com/liuzhengkun/p/14023327.html
Copyright © 2011-2022 走看看