• Docker相关操作


    Docker安装

    1. 环境准备

    1.1 安装必要的系统工具

    yum install -y yum-utils device-mapper-persistent-data lvm2
    
    • 1

    1.2 添加软件源信息

    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
    • 1

    1.3 更新缓存

    yum makecache fast
    
    • 1

    1.4 安装 docker-ce

    yum -y install docker-ce
    
    • 1

    1.5 启动docker

    1.5.1 后台启动 docker
    systemctl start docker
    
    • 1
    1.5.2 开机启动
    systemctl enable docker
    
    • 1

    1.6 docker镜像加速

    vim /etc/docker/daemon.json
    
    • 1

    添加

    {
      "registry-mirrors": ["http://hub-mirror.c.163.com"]
    }
    
    • 1
    • 2
    • 3

    2. 操作镜像

    2.1 搜索镜像

    docker search [镜像名称]
    
    • 1

    2.2 拉取镜像

    docker pull [镜像名称] [版本号]
    
    • 1

    2.3 通过 Dockerfile 创建镜像

    docker build -t [镜像名称] [Dockerfile文件路径]
    
    • 1

    3. 运行容器

    3.1 运行容器

    • 运行 centos 容器

      docker run centos /bin/echo "Hello World"
      
      • 1
    • 运行容器,并进入容器内部

      docker run -i -t centos /bin/bash
      
      • 1

      退出

      Ctrl + D
      
      • 1
    • 运行容器,并执行容器内的脚本

      docker run -d oracle/jdk:1.8 sh -c "sh start.sh"
      
      • 1
    • 运行 spring-boot容器

      docker run -d -p 7001:8080 -v $PWD/logs:/logs spring-boot/spring-docker:1.0 sh -c "sh start.sh 8080"
      
      • 1
      • -d:后台运行
      • 7001:容器端口
      • 8080:容器内部服务端口
      • -v $PWD/logs:/logs:将当前目录下的 logs目录挂载到容器内部的 logs 目录

    3.2 查看容器

    • 查看运行中的容器

      docker ps
      
      • 1
      CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                    NAMES
      c7cd5b02e49b        spring-boot/spring-docker:1.0   "sh -c 'sh start.sh …"   7 minutes ago       Up 7 minutes        0.0.0.0:7001->8080/tcp   reverent_hugle
      
      • 1
      • 2
    • 查看所有的容器

      docker ps -a
      
      • 1
    • 查看 docker 状态

      docker stats
      
      • 1
    • 查看容器IP

      docker inspect [容器名称]
      
      • 1

    3.3 进入容器内部

    docker exec -it c7cd5b02e49b  /bin/bash
    
    • 1
    • c7cd5b02e49b:容器ID

    3.4 查看容器运行日志

    docker logs -f -t --since="2020-08-27" --tail=10 c7cd5b02e49b
    
    • 1
    2020-08-27T02:43:51.470446811Z 2020-08-27 02:43:51.469 INFO embedded.tomcat.TomcatWebServer.initialize(TomcatWebServer.java:90) Tomcat initialized with port(s): 8080 (http)
    2020-08-27T02:43:51.546234820Z 2020-08-27 02:43:51.545 INFO juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) Initializing ProtocolHandler ["http-nio-8080"]
    2020-08-27T02:43:51.603181935Z 2020-08-27 02:43:51.602 INFO juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) Starting service [Tomcat]
    2020-08-27T02:43:51.603988697Z 2020-08-27 02:43:51.603 INFO juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) Starting Servlet engine: [Apache Tomcat/9.0.21]
    2020-08-27T02:43:51.846445791Z 2020-08-27 02:43:51.846 INFO juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) Initializing Spring embedded WebApplicationContext
    2020-08-27T02:43:51.846863670Z 2020-08-27 02:43:51.846 INFO servlet.context.ServletWebServerApplicationContext.prepareWebApplicationContext(ServletWebServerApplicationContext.java:283) Root WebApplicationContext: initialization completed in 5125 ms
    2020-08-27T02:43:52.483209108Z 2020-08-27 02:43:52.482 INFO scheduling.concurrent.ExecutorConfigurationSupport.initialize(ExecutorConfigurationSupport.java:171) Initializing ExecutorService 'applicationTaskExecutor'
    2020-08-27T02:43:52.891167280Z 2020-08-27 02:43:52.890 INFO juli.logging.DirectJDKLog.log(DirectJDKLog.java:173) Starting ProtocolHandler ["http-nio-8080"]
    2020-08-27T02:43:52.970278450Z 2020-08-27 02:43:52.969 INFO embedded.tomcat.TomcatWebServer.start(TomcatWebServer.java:202) Tomcat started on port(s): 8080 (http) with context path ''
    2020-08-27T02:43:52.977634872Z 2020-08-27 02:43:52.977 INFO springframework.boot.StartupInfoLogger.logStarted(StartupInfoLogger.java:59) Started SpringDockerApplication in 7.623 seconds (JVM running for 10.239)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • --since:此参数指定了输出日志开始日期,即只输出指定日期之后的日志。
    • -f:查看实时日志
    • -t:查看日志产生的日期
    • -tail=10:查看最后的10条日志
    • c7cd5b02e49b容器ID

    3.5 停止容器

    • 停止容器

      docker stop [容器ID]
      
      • 1
    • 停止所有容器

      docker stop $(docker ps -a -q)
      
      • 1

    3.6 复制本地文件到容器内

    docker cp elasticsearch-sql-6.2.4.0.zip 905e762c9d0e:/root/
    
    • 1

    3.7 删除容器

    • 删除容器

      docker rm [容器ID]
      
      • 1
    • 删除所有容器

      docker rm $(sudo docker ps -a -q)
      
      • 1

      由于运行中的容器无法删除,这个命令也用于删除停止运行的容器

    4. 构建 JDK 镜像

    FROM centos
    ADD jdk-8u152-linux-x64.tar.gz /java/
    WORKDIR java
    RUN mv jdk1.8.0_152 jdk
    ENV JAVA_HOME=/java/jdk
    ENV PATH=$PATH:$JAVA_HOME/bin
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • FROM:集成docker镜像
    • ADD:添加本地文件到Docker镜像的java目录
    • WORKDIR:切换docker目录
    • RUN:运行 liunx 命令
    • ENV:设置环境变量

    注意:jdk安装包需要和Dockerfile在同一目录

    5. 删除镜像

    docker rmi 7cf6d64875c4
    
    • 1

    7cf6d64875c4:镜像ID

    6. docker-compose

    6.1 docker-compose 安装

    yum yum -y install python-pip
    pip install docker-compose
    
    • 1
    • 2

    查看安装的版本

    docker-compose --version
    
    • 1

    卸载

    pip uninstall docker-compose
    
    • 1

    如果 pip 比较慢则:

    pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com docker-compose
    
    • 1

    6.2 docker-compose 常用命令

    启动容器

    docker-compose up
    
    • 1

    后台启动容器

    docker-compose up -d
    
    • 1

    -f 指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定

    docker-compose -f docker-compose.yml up -d
    
    • 1

    7. 安装elasticsearch

    7.1 编写docker-compose.yml 文件

    version: '3'
    services:
      es:
        image: elasticsearch:7.9.0
        container_name: es
        restart: always
        environment:
          - "discovery.type=single-node"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - /root/es/data:/usr/share/elasticsearch/data
          - /root/es/logs:/usr/share/elasticsearch/logs
        ports:
          - 9200:9200
          - 9300:9300
        networks:
          esnet:
            aliases:
              - esnet
    networks:
      esnet:
        external: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    7.1 创建网络

    如果需要安装kibana等其他,需要创建一个网络,名字任意取,让他们在同一个网络,使得es和kibana通信

    docker network create esnet
    
    • 1

    7.2 启动容器

    docker run --name es -d  -p 9200:9200 -p 9300:9300  --network mysql-net --network-alias mysql -e "discovery.type=single-node" e47ebd7ec3ee
    
    • 1
    • --name 名称 :给容器起个名字
    • -p 外部访问端口:容器端口:9200是供htpp访问端口,9300是供tcp访问的端口,如果不做端口映射,浏览器就不能访问elasticsearch的服务
    • --network 网络名:用于多个服务通信与隔离,例如用kibana连接elasticsearch就需要他们在同一个网络下
    • e47ebd7ec3ee:通过docker images命令查看到需要创建的容器id,此处用镜像名也可以

    7.3 集群安装 elasticsearch

    编写 docker-compose.yml 文件

    version: '3.1'
    services:
      es01:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0
        hostname: 192.168.1.1
        container_name: es01
        restart: always
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./data/es01:/usr/share/elasticsearch/data
          - ./config/es01/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./logs/es01:/usr/share/elasticsearch/logs
        ports:
          - 9200:9200
          - 9300:9300
        networks:
          esnet:
            aliases:
              - esnet
      es02:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0
        hostname: 192.168.1.2
        container_name: es02
        restart: always
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./data/es02:/usr/share/elasticsearch/data
          - ./config/es02/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./logs/es02:/usr/share/elasticsearch/logs
        depends_on:
          - es01
        networks:
          esnet:
            aliases:
              - esnet
      es03:
        image: docker.elastic.co/elasticsearch/elasticsearch:7.9.0
        hostname: 192.168.1.3
        container_name: es03
        restart: always
        environment:
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          - ./data/es03:/usr/share/elasticsearch/data
          - ./config/es03/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          - ./logs/es03:/usr/share/elasticsearch/logs
        depends_on:
          - es01
        networks:
          esnet:
            aliases:
              - esnet
    
    networks:
       esnet:
        external: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • version:指定 docker-compose.yml 的版本

      V1 版本的 docker-compose.yml 只被支持到 docker-compose 1.6.x。再往后的 docker-compose 版本就不再支持 V1 版本的 docker-compose.yml

      V1 版本的 docker-compose.yml 文件格式主要区别就是:

      • 没有开头的 version 声明

      • 没有 services 声明

      • 不支持 depends_on

      • 不支持命名的 volumes, networks, build arguments 声明

      V2版本仅支持单机模式

      V3版本支持单机模式也支持多机模式

    • services:多个容器集合,它有多个子集,该子集是自定义的容器。

    • image:指定服务所使用的镜像,如果本地不存在,拉取镜像

    • build:基于dockerfile文件构建镜像

    • container_name:容器名称

    • volumes:卷挂载路径

      - 本地的目录名称:容器中的目录名称

    • volumes_from:从另一个服务或容器挂载其数据卷

      volumes_from:
        - service_name
        - container_name
      
      • 1
      • 2
      • 3
    • restart:always|no|on-failure| unless-stopped,3.7中已经被 restart_policy 代替。

      • no:no是默认的重启策略**,**在任何情况下都不会重启容器。

      • always:指定为always时,容器总是重新启动。

      • on-failure:如果退出代码指示出现故障错误,则on-failure将重新启动容器。

      • unless-stopped:unless-stoppedalways 基本一样,只有一个场景 unless-stopped有点特殊:

      如果容器正常stopped,然后机器重启或docker服务重启,这种情况下容器将不会被restart

    • restart_policy:配置是否以及如何在容器退出时重新启动容器。取代 restart。

      deploy:
        restart_policy:
          condition: on-failure
          delay: 5s
          max_attempts: 3
          window: 120s
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • condition:none|on-failure|any
        • none:不重启
        • on-failure:在发生错误的时候重启
        • any:默认值,任何情况下都是重启
      • delay:重新启动尝试之间等待的时间,指定为 持续时间(默认值:0)。
      • max_attempts:在放弃之前尝试重启容器的次数(默认值:永不放弃)。如果在配置中未成功重新启动 window,则此尝试不会计入配置的max_attempts值。例如,如果max_attempts设置为“2”,并且第一次尝试时重新启动失败,则可能尝试重新启动两次以上。
      • window:在决定重启是否成功之前等待多长时间,指定为持续时间(默认值:立即决定)。
    • environment:环境变量配置,可以用数组或字典两种方式

      任何布尔值: true,false,yes,no需要用引号括起来,以确保它们不被YML解析器转换为True或False

      如果服务指定了build选项,那么在构建过程中通过environment定义的环境变量将不会起作用。

      将使用build的args子选项来定义构建时的环境变量。

    • depends_on:解决容器的依赖、启动先后的问题

      depends_on:
        -db
        -redis
      
      • 1
      • 2
      • 3

      实例中先启动容器 db 和 redis 再启动 web,注意:web 服务不会等待 redis 和 db 「完全启动」之后才启动

    • ports:映射端口信息

      宿主端口:容器端口 (即:HOST:CONTAINER) 的格式格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。

      注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。

    • expose :暴露端口,但不映射到宿主机,只被连接的服务访问。仅可以指定容器内部的端口为参数。

    • extra_hosts:类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。

    • alias:别名。

    • dns:自定义DNS服务器,可以是一个值,也可以是一个列表。

    • dns_search:配置 DNS 搜索域,可以是一个值或列表。

    • entrypoint:类比dockerfile中的entrypoint。

    • command:覆盖容器启动后默认执行的命令。

    • env_file:从文件中获取环境变量,可以指定一个文件路径或路径列表,其优先级低于 environment 指定的环境变量。

    • network:指定一个网络。

    • links:将指定容器连接到当前连接,可以设置别名,避免ip方式导致的容器重启动态改变的无法连接情况。

    8. 安装 kibana

    8.1 拉取 kibana 镜像

    docker pull kibana:7.9.0
    
    • 1

    8.2 启动 kibana

    docker run --name kibana -d -e ELASTICSEARCH_URL=http://127.0.0.1:9200 -p 5601:5601 5983f5fff662
    
    • 1

    9. 安装mysql

    version: '3'
    services:
      db:
        image: mysql:5.7.21
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: 123456
        command:
          --default-authentication-plugin=mysql_native_password
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
          --max_allowed_packet=128M;
        ports:
          - 3306:3306
        volumes:
          - /root/mysql/data:/var/lib/mysql
        networks:
          mysql-net:
            aliases:
              - mysql
    networks:
      mysql-net:
        external: true
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    10. 安装superset

    10.1 编写 docker-compose.yml 文件

    version: '3'
    services:
      redis:
        image: redis
        restart: always
        volumes:
          - redis:/data
        mysql-net:
          aliases:
            - mysql
      superset:
        image: amancevice/superset
        restart: always
        depends_on:
          - redis
        environment:
          MAPBOX_API_KEY: ${MAPBOX_API_KEY}
        ports:
          - "8088:8088"
        dns:
          - "8.8.8.8"
        volumes:
          - ./superset_config.py:/etc/superset/superset_config.py
        mysql-net:
          aliases:
            - mysql
    networks:
      mysql-net:
        external: true
    volumes:
      redis:
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    10.2 编写superset_config.py 文件

    
    import os
    
    MAPBOX_API_KEY = os.getenv('MAPBOX_API_KEY', '')
    CACHE_CONFIG = {
        'CACHE_TYPE': 'redis',
        'CACHE_DEFAULT_TIMEOUT': 300,
        'CACHE_KEY_PREFIX': 'superset_',
        'CACHE_REDIS_HOST': 'redis',
        'CACHE_REDIS_PORT': 6379,
        'CACHE_REDIS_DB': 1,
        'CACHE_REDIS_URL': 'redis://mysql:6379/1'}
    SQLALCHEMY_DATABASE_URI = \
        'mysql://root:123456@10.10.241.208:3306/superset?charset=utf8mb4'
    SQLALCHEMY_TRACK_MODIFICATIONS = True
    SECRET_KEY = 'thisISaSECRET_1234'
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    10.3 初始化superset

    10.3.1 初始化 管理员
    docker exec -it [容器名称] superset fab create-admin \
                   --username admin \
                   --firstname admin \
                   --lastname admin \
                   --email songyingguang@ky-tech.com.cn \
                   --password 123456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    10.3.2 初始化数据库
    docker exec -it [容器名称] superset db upgrade
    
    • 1
    10.3.3 加载样例
    docker exec -it [容器名称] superset load_examples
    
    • 1
    10.3.4 设置角色
    docker exec -it [容器名称] superset init
    
    • 1

    9. 卸载 Docker

    yum remove docker-ce
    rm -rf /var/lib/docker
    
    • 1
    • 2
  • 相关阅读:
    计算机毕业设计Java“花园街道”社区医院服务系统(源码+系统+mysql数据库+lw文档)
    菜鸟教程《Python 3 教程》笔记(16):模块
    深度学习与python theano
    vue事件总线
    未归一化导致Dead ReLU的悲剧
    Docker实践笔记04:Tomcat环境DockerFile制作
    C语言编写函数把字符串里面的大写字母改成小写字母
    EN 1013内外屋顶、墙壁和天花板用异型塑料板透光单片—CE认证
    sort方法实现复杂排序
    2022大厂高频面试题之HTML篇
  • 原文地址:https://blog.csdn.net/dwjf321/article/details/126685828