docker知识总结

293 阅读3分钟

docker基础命令

mp.weixin.qq.com/s/a5fnVpXH1…

docker清理 mp.weixin.qq.com/s/y4vjmRBa-…

以root权限进入容器 sudo docker exec -it -u root 容器id /bin/bash

  • 实时查看docker容器名为s12的最后10行日志
  • $ sudo docker logs -f -t --tail 10 s12
  • 查看Docker信息
  • docker info
  • 下载镜像
  • docker pull busybox
  • BusyBox是一个最小的Linux系统
  • 运行一个带标签镜像的容器
  • sudo docker run -t -i ubuntu:14.04 /bin/bash
  • 跑个Hello World
  • docker run busybox /bin/echo Hello World
  • 构建容器
  • sample_job=$(docker run -d busybox /bin/sh -c "while true;do echo Docker;sleep 1;done")
  • 其中的-d是放在后台执行
  • 查看日志
  • docker logs $sample_job
  • 名为sample_job的容器,停止命令是
  • docker stop $sample_job
  • 重启该容器
  • docker restart $sample_job
  • 要将容器删除,需要先将容器停止,容器删除命令为:
  • docker rm $sample_job
  • 将容器的状态保存为新的镜像的方法为:
  • docker commit
  • 查看镜像
  • docker images
  • 搜索镜像
  • docker search (image-name)
  • 查看镜像的历史版本
  • docker history (image-name)
  • 将镜像推送到registry
  • docker push (image-name)
  • 查看我们正在运行的容器
  • docker ps -l
  • 端口映射
  • docker run -d -p 5000:5000 training/webapp python app.py
  • 移除镜像
  • docker rmi(镜像名称或者id前3位)

docker部署

blog.csdn.net/weixin_4268… jar包docker部署 1.部署的jar包配置maven pom 2.添加docker file 3.配置服务器上的docker.service 4.配置idea 的docker插件 maven插件参考mario-rich

docker安装

docs.docker.com/engine/inst…

docker 镜像加速

sudo cp -n /lib/systemd/system/docker.service /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/docker daemon|ExecStart=/usr/bin/docker daemon --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo sed -i "s|ExecStart=/usr/bin/dockerd|ExecStart=/usr/bin/dockerd --registry-mirror=<your accelerate address>|g" /etc/systemd/system/docker.service
sudo systemctl daemon-reload
sudo service docker restart

容器

#dockerfile
FROM java:8
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

安装mysql

docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=rich mysql:latest 或

version: '3'
services:
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: **
    ports:
      - 3306:3306
    volumes:
      - "/root/db-data/mysql/:/var/lib/mysql"
    restart: always

#chmod 777 /root/db-data/mysql/

搭建maven私有仓库

www.jianshu.com/p/09a6cab37… docker run -d -p 8081:8081 --name nexus -v /root/nexus-data:/var/nexus-data --restart=always sonatype/nexus3

docker exec -it 511d6878bca5 /bin/bash
获取登陆密码
cd nexus-data/
cat admin.password 登录后可以自定义修改密码

安装nginx

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - 443:443
    volumes:
      - "/root/nginx-config/service.conf:/etc/nginx/conf.d/service.conf"
      - "/root/nginx-config/1_service.xy-design.top_bundle.crt:/etc/nginx/1_service.xy-design.top_bundle.crt"
      - "/root/nginx-config/2_service.xy-design.top.key:/etc/nginx/2_service.xy-design.top.key"
  java:
    build:
      context: .
    ports:
      - 8088:8088
    volumes: 
      - "/root/java/mario-rich-web-1.0.0-SNAPSHOT.jar:/root/java/mario-rich-web-1.0.0-SNAPSHOT.jar"
    command: ["java", "-jar", "/root/java/mario-rich-web-1.0.0-SNAPSHOT.jar"]

安装redis

docker run --name redis -p 6379:6379 -d redis

安装zookeeper

docker run --name zookeeper --restart always -d zookeeper

后台服务jar

# 例如xxl-job-admin
version: '3'
services:
  jobadmin:
    build:
      context: /root/docker
      dockerfile: Dockerfile
    ports:
      - 8077:8077
    volumes: 
      - "/root/java/xxl-job-admin-2.2.1-SNAPSHOT.jar:/root/java/xxl-job-admin-2.2.1-SNAPSHOT.jar"
    command: ["java", "-jar", "/root/java/xxl-job-admin-2.2.1-SNAPSHOT.jar"]

安装es

services:
  elasticsearch:
    image: elasticsearch:7.8.0
    container_name: elasticsearch
    restart: always
    environment:
      # 开启内存锁定
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      # 指定单节点启动
      - discovery.type=single-node
    ulimits:
      # 取消内存相关限制  用于开启内存锁定
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200
      - 9300:9300
      - 5601:5601
    volumes:
      - /root/es/data:/usr/share/elasticsearch/data
      - /root/es/logs:/usr/share/elasticsearch/logs
      - /root/es/plugins:/usr/share/elasticsearch/plugins


#需要给与/root/es/data 下3个文件777权限

搭建loki日志系统

loki local-config

auth_enabled: false

server:
  http_listen_port: 3100

ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s
  max_transfer_retries: 0

schema_config:
  configs:
    - from: 2018-04-15
      store: boltdb
      object_store: filesystem
      schema: v11
      index:
        prefix: index_
        period: 168h

storage_config:
  boltdb:
    directory: /tmp/loki/index

  filesystem:
    directory: /tmp/loki/chunks

limits_config:
  enforce_metric_name: false
  reject_old_samples: true
  reject_old_samples_max_age: 168h

chunk_store_config:
  max_look_back_period: 0s

table_manager:
  retention_deletes_enabled: false
  retention_period: 0s

promtail

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: rich-web
          __path__: /var/log/*log
#          __path__: /Users/vimk/IdeaProjects/java/mario-rich/log/rich-web/*log

grafana

version: "3"
networks:
  loki:
services:
  loki:
    image: grafana/loki:1.5.0
    ports:
      - "3100:3100"
    volumes:
      - $PWD:/etc/loki
      - $PWD/etc/loki/loki-local-config.yaml:/etc/loki/local-config.yaml
    networks:
      - loki

  promtail:
    image: grafana/promtail:1.5.0
    volumes:
      - $PWD:/etc/promtail
      - /var/log:/var/log
      - $PWD/etc/promtail/promtail-docker-config.yaml:/etc/promtail/docker-config.yaml
    command: -config.file=/etc/promtail/docker-config.yaml
    networks:
      - loki

#无法启动
#docker run -v $(pwd):/mnt/config -v /Users/vimk/IdeaProjects/java/mario-rich/log/rich-web/log:/var/log  -v /Users/vimk/IdeaProjects/java/mario-rich/docker-compose/etc/promtail/promtail-docker-config.yaml:/etc/promtail/docker-config.yaml  grafana/promtail:1.5.0 -config.file=/etc/promtail/docker-config.yaml

  grafana:
    image: grafana/grafana:master
    ports:
      - "3000:3000"
    environment:
      GF_EXPLORE_ENABLED: "true"
      GF_SECURITY_ADMIN_USER: "rich"
      GF_SECURITY_ADMIN_PASSWORD: "rich"
    networks:
      - loki
version: "3"

networks:
  loki:
services:
  grafana:
    image: grafana/grafana:master
    ports:
      - "3000:3000"
    environment:
      GF_EXPLORE_ENABLED: "true"
      GF_SECURITY_ADMIN_USER: "rich"
      GF_SECURITY_ADMIN_PASSWORD: "rich"
    networks:
      - loki

安装flink

#manager
version: "2.2"
services:
  jobmanager:
    image: flink:1.11.0-scala_2.11
    ports:
      - "8081:8081"
    command: jobmanager
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager

  taskmanager:
    image: flink:1.11.0-scala_2.11
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 1
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 2
#task
version: "2.2"
services:
  jobmanager:
    image: flink:1.11.0-scala_2.11
    ports:
      - "8081:8081"
    command: standalone-job --job-classname com.job.ClassName [--job-id <job id>] [--fromSavepoint /path/to/savepoint [--allowNonRestoredState]] [job arguments]
    volumes:
      - /Users/vimk/IdeaProjects/java/mario-rich/docker-compose/flink/usrlib:/opt/flink/usrlib
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        parallelism.default: 2

  taskmanager:
    image: flink:1.11.0-scala_2.11
    depends_on:
      - jobmanager
    command: taskmanager
    scale: 1
    volumes:
      - /Users/vimk/IdeaProjects/java/mario-rich/docker-compose/flink/usrlib:/opt/flink/usrlib
    environment:
      - |
        FLINK_PROPERTIES=
        jobmanager.rpc.address: jobmanager
        taskmanager.numberOfTaskSlots: 2
        parallelism.default: 2