Docker Hub
Docker Docs

容器时区设置

  1. ## 查看时区
  2. bash> date -R
  3. ## 复制相应的时区文件,替换系统时区文件
  4. #### 如果容器中没有 /usr/share/zoneinfo/Asia/Shanghai,则从宿主机拷贝
  5. cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  6. docker cp /path '容器id':/path/filename

1、Docker安装

  • 卸载老版本
  1. sudo yum remove docker \
  2. docker-client \
  3. docker-client-latest \
  4. docker-common \
  5. docker-latest \
  6. docker-latest-logrotate \
  7. docker-logrotate \
  8. docker-engine
  • 配置镜像仓库
  1. sudo yum install -y yum-utils
  2. sudo yum-config-manager \
  3. --add-repo \
  4. https://download.docker.com/linux/centos/docker-ce.repo # 默认
  5. sudo yum-config-manager \
  6. --add-repo \
  7. http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云地址
  • 安装docker 相关内容
  1. yum makecache fast # 更新软件包
  2. sudo yum install -y docker-ce docker-ce-cli containerd.io # 安装
  3. sudo yum install -y docker-ce-1.13.1 docker-ce-cli-1.13.1 containerd.io
  • 启动 docker
  1. sudo systemctl start docker
  2. #将docker安装目录移动到 /data/docker
  3. # /data 为另一块分区
  4. mv /var/lib/docker /data/docker
  5. #创建软连接
  6. ln -s /data/docker /var/lib/docker
  • 阿里云镜像加速
  1. sudo mkdir -p /etc/docker
  2. sudo tee /etc/docker/daemon.json <<-'EOF'
  3. {
  4. "registry-mirrors": ["https://nzxppyu8.mirror.aliyuncs.com"]
  5. }
  6. EOF
  7. sudo systemctl daemon-reload
  8. sudo systemctl restart docker
  9. ### 设置开机自启动
  10. systemctl enable docker
  11. # 或者
  12. systemctl disable docker.service
  • 运行hello-world
  1. sudo docker run hello-world
  1. <a name="2ef29986"></a>
  2. ## 2、Docker基本命令
  3. ```bash
  4. docker pull 'name' # 安装
  5. docker rmi -f 'REPOSITORY' # 删除 -f 强制删除
  6. docker rmi -f $(docker images -q) # 删除全部镜像
  7. docker ps -a -q|xargs docker rm # 删除全部镜像
  8. # 删除 tag 等为 <none> 的镜像
  9. sudo docker images|grep none|awk '{print $3}'|xargs sudo docker rmi
  1. sudo docker rm -f ee0c12940191 # 移除指定容器
  1. docker start 'id' # 启动停止的容器
  2. docker restart 'id' # 重启容器
  3. docker stop 'id' # 停止容器
  4. docker kill 'id' # 强制停止
  1. # 日志 -tf:显示日志 --tail number 要显示的日志条数
  2. docker logs -f -t --tail number 'id'
  3. # 网络
  4. docker network create custom_net
  5. docker network ls
  1. # 查看容器的进程信息
  2. docker inspect centos
  3. # 查看镜像构建历史
  4. docker history 'IMAGE ID'
  5. # 查看容器的 CPU,MEM 等占用率
  6. docker stats
  1. # 进入容器
  2. docker run -it centos /bin/bash # -it:以交互方式进入 centos 容器
  3. docker run -d 'id' # -d 后台运行
  4. exit # 退出容器,并停止容器运行
  5. ctrl + P + Q # 退出容器,并保持当前容器运行
  6. docker ps -a # 查看当前运行的容器 -a 曾经运行的(可选)
  7. # 进入容器
  8. [root@iZwz9actuhd1532kyp2llsZ ~]# docker ps # 查看进程状态
  9. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  10. a5a7b998aee3 centos "/bin/bash" 14 minutes ago Up 14 minutes elated_dhawan
  11. [root@iZwz9actuhd1532kyp2llsZ ~]# docker exec -it a5a7b998aee3 /bin/bash
  12. -------------或者------------ # docker attach a5a7b998aee3
  1. # 文件拷贝-- 把容器中的文件拷贝到容器外
  2. docker cp '容器id':/path/filename /path
  3. ## 同步时间
  4. docker cp /usr/share/zoneinfo/Asia/Shanghai '容器id':/etc/localtime
  5. docker restart '容器id'
  6. ## 把容器打包成镜像
  7. docker commit 容器id 镜像名:镜像版本
  8. docker save 镜像名:镜像版本 -o xxx.tar ||| docker export 容器id > xxx.tar
  9. docker load < xxx.tar ||| docker import xxx.tar 镜像名:镜像版本
  10. ## 镜像和容器 导出和导入的区别
  11. 镜像导入 是复制的过程,导入的镜像 ID 和导出的镜像 ID 相同;
  12. 容器导入 是将当前容器变成一个新的镜像。
  13. ## save 和 export 区别
  14. save 保存镜像所有的信息-包含历史,体积更大;
  15. export 只导出当前的信息,将丢弃所有的历史记录和元数据信息,体积更小。
  16. ## load 和 import 区别
  17. load 不能重命名导入的镜像;
  18. import 可以重命名导入的镜像,并且还可以在导入的同时执行对容器进行修改的 DockerFile 指令。

3、实例

3.1 可视化工具——Portainer

  1. docker pull portainer/portainer
  2. # 单机运行
  3. docker run -d -p 9001:9000 \
  4. --restart=always \
  5. -v /var/run/docker.sock:/var/run/docker.sock \
  6. --name prtainer-test1 \
  7. portainer/portainer
  8. ----------------------------------------------------------------
  9. -----访问 http://ip:9000/ ---------
  10. # 集群运行
  11. docker run -d -p 9000:9000 --restart=always --name prtainer-test portainer/portainer

3.2 安装 RabbitMQ

  1. #指定版本,该版本包含了web控制页面
  2. docker pull rabbitmq:management
  3. # 运行
  4. #方式一:默认guest 用户,密码也是 guest
  5. docker run -d --hostname my_RabbitMQ --name RabbitMQ -p 15672:15672 -p 5672:5672 rabbitmq:management
  6. #方式二:设置用户名和密码
  7. docker run -d --hostname my_RabbitMQ --name RabbitMQ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 rabbitmq:management
  8. docker run -d --name RabbitMQ_K -e default_user=admin -e default_pass=admin123 -p 15673:15672 -p 5673:5673 rabbitmq:management
  9. ------------------访问 http://ip:15672/ ----------------
  10. ######## js WebSocket
  11. docker run -d --hostname my_RabbitMQ --name RabbitMQ -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 15672:15672 -p 5672:5672 -p 15674:15674 rabbitmq:management
  12. ## 开启插件
  13. rabbitmq-plugins enable rabbitmq_web_stomp rabbitmq_web_stomp_examples

3.3 安装 Tomcat

  1. # 下载
  2. docker pull tomcat
  3. # 后台启动
  4. docker run -d --name tomcat_test1 -p 8089:8080 tomcat
  5. # 进入容器
  6. docker exec -it 'id' /bin/bash
  7. # 文件拷贝
  8. cp -r webapps.dist/* webapps
  9. mkdir -p /home/tomcat/webapps /home/tomcat/logs
  10. ------------------访问 http://ip:8089/ ----------------
  11. docker run -d -p 8888:8080 --name mytomcat -v /home/zlh/mydata/web/webapps:/usr/local/tomcat/webapps/ -v /home/zlh/mydata/web/logs:/usr/local/tomcat/logs tomcat
  12. docker run -d -p 8888:8080 --name mytomcat -v /home/zlh/tomcat/webapps:/usr/local/tomcat/webapps/ -v /home/zlh/tomcat/logs:/usr/local/tomcat/logs tomcat

3.4 Elasticsearch 7.11.1

  1. docker pull elasticsearch:7.11.1
  2. # 数据放置在安全目录,挂载
  3. mkdir -p /home/elasticsearch/config /home/elasticsearch/data /home/elasticsearch/plugins
  4. touch /home/elasticsearch/config/elasticsearch.yml
  5. chmod -R 777 /home/elasticsearch
  6. # 启动
  7. docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 --restart=always -e ES_JAVA_OPTS="-Xms512m -Xmx512m"
  8. -e "discovery.type=single-node"
  9. -v /home/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
  10. -v /home/elasticsearch/data:/usr/share/elasticsearch/data
  11. -v /home/elasticsearch/plugins:/usr/share/elasticsearch/plugins
  12. --network my_net --network-alias es elasticsearch:7.11.1
  13. # ES_JAVA_OPTS="-Xms64m -Xmx512m" 设置占用内存大小
  14. # 查看日志,是否启动成功
  15. docker logs -f 容器id
  16. ###### 查看并修改max_map_count 大小
  17. # 查看max_map_count :
  18. cat /proc/sys/vm/max_map_count
  19. # 设置max_map_count
  20. sysctl -w vm.max_map_count=262144
  21. ########## 若连接被拒绝 ###########
  22. # 修改 elasticsearch.yml 配置文件,在配置文件中加入
  23. network.host: 0.0.0.0 # 允许来自其他 IP 的连接
  24. # 安装 kibana
  25. docker pull kibana:7.10.1
  26. mkdir -p /home/kibana/config/
  27. vi /home/kibana/config/kibana.yml
  28. ####### kibana.yml 中添加以下内容 ###########
  29. # Default Kibana configuration for docker target
  30. server.name: kibana
  31. server.host: "0"
  32. elasticsearch.hosts: [ "http://ip:9200" ]
  33. xpack.monitoring.ui.container.elasticsearch.enabled: true
  34. #################
  35. # 启动
  36. docker run -d --restart=always --name kibana -p 5601:5601 -v /home/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml -e "I18N_LOCALE=zh-CN" kibana:7.10.1
  37. # 查看日志,是否启动成功
  38. docker logs -f 容器id
  39. # 安装 ik 分词
  40. # 下载连接 https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.10.1/elasticsearch-analysis-ik-7.10.1.zip
  41. # 在 /home/elasticsearch/plugins 目录下新建文件夹 ik ,将压缩解压至该目录下,再重启 ES

3.4.1设置账号密码

  1. # 1、修改 elasticsearch.yml,加上以下配置项:
  2. xpack.security.enabled: true
  3. xpack.license.self_generated.type: basic
  4. xpack.security.transport.ssl.enabled: true
  5. ## 如果是docker,添加配置后要重启容器
  6. # 2、设置密码,elasticsearch/bin 目录下,执行命令:
  7. ./elasticsearch-setup-passwords interactive
  8. # 2.1、修改指定账号的密码 --- 把 elastic 密码改成 123456
  9. curl -H "Content-Type:application/json" -XPOST -u elastic 'http://localshot:9200/_xpack/security/user/elastic/_password' -d '{ "password" : "123456" }' ## 执行之后,输入一遍原始密码,即可以成功修改成新的密码了
  10. # 3、修改Kibana配置 ---- kibana.yml
  11. elasticsearch.username: "kibana_system"
  12. elasticsearch.password: "953598751"
  13. # 4、修改 logstash 配置 -----logstash.yml
  14. xpack.monitoring.enabled: true
  15. xpack.monitoring.elasticsearch.username: logstash_system
  16. xpack.monitoring.elasticsearch.password: 953598751
  17. xpack.monitoring.elasticsearch.hosts: ["http://ip:9200"]
  18. ##### xxxxx.conf 文件
  19. elasticsearch {
  20. hosts => ["localhost:9200"]
  21. index => "xxxxx"
  22. document_id => "%{id}"
  23. user => "elastic"
  24. password => "953598751"
  25. }

3.4.2 Elastic_Dump

文档

  1. docker pull taskrabbit/elasticsearch-dump
  2. ---------导出(导出到文件)
  3. docker run --rm -ti -v /home/java/es_dump:/tmp taskrabbit/elasticsearch-dump --input=http://121.196.158.48:9200/index_polylines --output=/tmp/index_polylines_mapping.json --type=mapping
  4. docker run --rm -ti -v /home/java/es_dump:/tmp taskrabbit/elasticsearch-dump --input=http://121.196.158.48:9200/index_polylines --output=/tmp/index_polylines_data.json --type=data
  5. ----------导入(文件导入)
  6. docker run --rm -ti -v /home/java/es_dump:/tmp --network custom_net --network-alias esdump taskrabbit/elasticsearch-dump --input=/tmp/index_polylines_mapping.json --output=http://elasticsearch:9200/index_polylines --type=mapping
  7. docker run --rm -ti -v /home/java/es_dump:/tmp --network custom_net --network-alias esdump taskrabbit/elasticsearch-dump --input=/tmp/index_polylines_data.json --output=http://elasticsearch:9200/index_polylines --type=data
  8. ----- ip 拷贝
  9. docker run --rm -ti -v /home/java/es_dump:/tmp --network custom_net --network-alias esdump taskrabbit/elasticsearch-dump --input=http://121.196.158.48:9200/index_add_bridge --output=http://elasticsearch:9200/index_add_bridge --type=mapping
  10. docker run --rm -ti -v /home/java/es_dump:/tmp --network custom_net --network-alias esdump taskrabbit/elasticsearch-dump --input=http://121.196.158.48:9200/index_add_bridge --output=http://elasticsearch:9200/index_add_bridge --type=data

3.5 Nginx

  1. docker pull nginx # 拉取镜像
  2. mkdir -p /home/nginx/conf /home/nginx/conf.d # 创建配置文件目录
  3. # 拷贝配置文件
  4. docker run --name nginx01 -d nginx:latest
  5. docker cp nginx01:/etc/nginx/nginx.conf /home/nginx/conf #把容器中的nginx.conf文件复制到conf目录下
  6. docker cp nginx01:/etc/nginx/conf.d/default.conf /home/nginx/conf.d #把容器中的default.conf文件复制到conf目录下
  7. docker rm -f nginx01 #删除镜像
  8. # 创建容器
  9. docker run -it -d --name mynginx -p 888:80 -v /home/nginx/html:/usr/share/nginx/html
  10. -v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  11. -v /home/nginx/conf.d:/etc/nginx/conf.d
  12. -v /home/nginx/logs:/var/log/nginx nginx
  • 转发到多个 Tomcat
  1. # default.conf
  2. upstream blance{
  3. #ip_hash; # 每个访客固定访问一个后端服务器,可以解决 session 的问题
  4. server 172.18.0.8:8080 weight=1;
  5. server 172.18.0.9:8080 weight=1;
  6. #fair; # 按后端服务器的响应时间来分配请求,响应时间短的优先分配
  7. }
  8. location / {
  9. root /usr/share/nginx/html;
  10. proxy_pass http://blance;
  11. index index.html index.htm;
  12. }
  • 根据 URL 转发到指定 Tomcat
  1. # url中,根据 http://ip:port/cug 访问,转发到指定 Tomcat
  2. location ~ /cug {
  3. proxy_pass http://172.18.0.9:8080; # 目标 Tomcat 的 webapps下要有 cug 文件夹
  4. }
  • 静态资源
  1. # 静态资源放在 root 后面路径下的 pic 文件夹中
  2. location /pic/ {
  3. autoindex on; # 列出整个目录
  4. autoindex_exact_size off; # 显示出文件的大概大小,单位是kB或者MB或者GB,默认为on,显示出文件的确切大小,单位是bytes
  5. autoindex_localtime on; # 显示的文件时间为文件的服务器时间,默认为off,显示的文件时间为GMT时间
  6. root /usr/share/nginx/html;
  7. }

启动: ./nginx

停止:./nginx -s stop

重启: ./nginx -s reload

重载:./nginx -s reload

  1. systemctl start nginx.service 启动nginx
  2. systemctl stop nginx.service 结束nginx
  3. systemctl restart nginx.service 重启nginx

3.6 SuperMap iServer

  1. docke pull supermap/iserver:10.1.2a
  2. docker run -d --name supermap_iserver -p 8090:8090 -v /home/supermap/my_opts:/opt/iserverOPTs -v /home/supermap/Desktop:/etc/icloud/supermap-iserver-10.1.2a-linux64-deploy/Desktop supermap/iserver:10.1.2a
  3. ----------------------------------------------------------------------------------------------------------------
  4. /etc/icloud/supermap-iserver-10.1.2a-linux64-deploy/Desktop
  5. supermap_iserver_1001_18915_4646_linux64_deploy
  6. find / -name 'Desktop'
  7. docker run -d --name supermap_iserver -p 8090:8090 -v /home/supermap/my_opts:/opt/iserverOPTs supermap/iserver:10.0.1
  8. docker run -d -p 8090:8090 --name supermap_iserver -v /home/supermap/my_opts:/opt/iserverOPTs -v /home/supermap/Desktop:/etc/icloud/supermap_iserver_1001_18915_4646_linux64_deploy/desktop supermap/iserver:10.0.1

3.7 PHP 环境

dockerfile

  1. FROM php:7.4-cli
  2. ADD index.php /var/www/
  3. EXPOSE 8080
  4. WORKDIR /var/www/
  5. ENTRYPOINT ["php", "-S", "0.0.0.0:8080"]

index.php

  1. <?php echo phpversion();?>

运行

  1. docker build -t phpproject:0.1 .
  2. docker run -d -p 8081:8080 -v /home/php/:/var/www/ --network my_dq_net --network-alias phpproject --name myphp phpproject:0.1

测试

  1. curl localhost:8081

3.8 lanproxy

  1. ### server
  2. docker run -d \
  3. --name lanproxy-server \
  4. -p 10000:8090 \
  5. -p 4900:4900 \
  6. -p 4993:4993 \
  7. -p 10001-10020:10001-10020 \
  8. --restart=always \
  9. -e LANPROXY_USERNAME="admin" \
  10. -e LANPROXY_PASSWORD="admin123" \
  11. franklin5/lanproxy-server
  12. ### client
  13. docker run -d \
  14. --name lanproxy-client \
  15. -e LANPROXY_KEY="d2733bd0e661477587d175282b909b9f" \
  16. -e LANPROXY_HOST="47.97.214.127" \
  17. --restart=always \
  18. franklin5/lanproxy-client
  19. 172.26.20.151

3.9 Redis

  1. docker pull redis:6.0
  2. mkdir -p /home/redis/conf
  3. touch /home/redis/conf/redis.conf
  4. docker run -p 6379:6379 --name redis6.0 -v /home/redis/data:/data -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -d --network my_net --network-alias redis6.0 --restart=always redis:6.0 redis-server /etc/redis/redis.conf
  5. docker run -p 6382:6379 --name redis2 -v /home/redis2/data:/data -v /home/redis2/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
  6. docker run -p 6379:6379 --name redis6.0 -v /home/redis/data:/data --sysctl net.core.somaxconn=1024 -v /home/redis/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
  7. ## 错误
  8. overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to/etc/sysctl.conf andthen reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
  9. # linux 虚拟机中: echo vm.overcommit_memory = 1 >> /etc/sysctl.conf
  10. # sysctl vm.overcommit_memory=1
  11. The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
  12. # linux 虚拟机中: echo 511 > /proc/sys/net/core/somaxconn

3.10 Nacos

  1. # 1、拉取镜像
  2. docker pull nacos/nacos-server:1.4.2
  3. # 2、在 mysql 中执行 nacos-mysql.sql
  4. # 3、启动
  5. docker run -d -p 8848:8848 \
  6. --name nacos \
  7. --network my_net \
  8. --network-alias nacos1.4.2 \
  9. --env MODE=standalone \
  10. --env SPRING_DATASOURCE_PLATFORM=mysql \
  11. --env MYSQL_SERVICE_HOST=mysql5.7 \
  12. --env MYSQL_SERVICE_PORT=3306 \
  13. --env MYSQL_SERVICE_DB_NAME=nacos_config \
  14. --env MYSQL_SERVICE_USER=root \
  15. --env MYSQL_SERVICE_PASSWORD=953598751 \
  16. nacos/nacos-server:1.4.2
  17. # 4、把容器中的 nacos 文件复制出来
  18. docker cp -a nacos:/home/nacos /home
  19. # 5、删除 nacos 容器
  20. docker rm -f nacos
  21. # 6、重启启动 nacos
  22. docker run -d -p 8848:8848 \
  23. --name nacos \
  24. --restart=always \
  25. --network my_net \
  26. --network-alias nacos1.4.2 \
  27. --env MODE=standalone \
  28. --env SPRING_DATASOURCE_PLATFORM=mysql \
  29. --env MYSQL_SERVICE_HOST=mysql5.7 \
  30. --env MYSQL_SERVICE_PORT=3306 \
  31. --env MYSQL_SERVICE_DB_NAME=nacos_config \
  32. --env MYSQL_SERVICE_USER=root \
  33. --env MYSQL_SERVICE_PASSWORD=953598751 \
  34. -v /home/nacos/conf:/home/nacos/conf \
  35. -v /home/nacos/logs:/home/nacos/logs \
  36. -v /home/nacos/data:/home/nacos/data \
  37. nacos/nacos-server:1.4.2

3.11 Sentinel

  1. docker pull bladex/sentinel-dashboard:latest
  2. docker run --name sentinel -d -p 8858:8858 --restart=always --network my_net bladex/sentinel-dashboard

3.12 Hbase

  1. docker pull harisekhon/hbase
  2. docker run -d -h hbase192 \
  3. -p 2181:2181 \
  4. -p 9090:9090 \
  5. -p 9095:9095 \
  6. -p 16000:16000 \
  7. -p 16010:16010 \
  8. -p 16020:16020 \
  9. -p 16201:16201 \
  10. -p 16301:16301 \
  11. --name hbase \
  12. --restart=always \
  13. --network my_net --network-alias hbase192 \
  14. harisekhon/hbase
  15. http://192.168.31.192:16010/master-status

3.13 Zookeeper

  1. docker pull zookeeper
  2. mkdir -p /home/zookeeper/node1/data
  3. mkdir -p /home/zookeeper/node1/conf
  4. mkdir -p /home/zookeeper/node1/logs
  5. docker network create zk_net
  6. docker run -d \
  7. --name zookeeper1 \
  8. --privileged=true \
  9. -p 2181:2181 \
  10. --restart=always \
  11. --network zk_net \
  12. -v /home/zookeeper/node1/data:/data \
  13. -v /home/zookeeper/node1/conf:/conf \
  14. -v /home/zookeeper/node1/logs:/datalog \
  15. zookeeper
  16. vi /home/zookeeper/node1/conf/zoo.cfg
  17. ################## zoo.cfg 配置 ###########################
  18. # 客户端与服务器或者服务器与服务器之间维持心跳,也就是每个tickTime时间就会发送一次心跳。
  19. # 通过心跳不仅能够用来监听机器的工作状态,还可以通过心跳来控制Flower跟Leader的通信时间
  20. tickTime=2000
  21. # 集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数
  22. initLimit=10
  23. # 集群中flower服务器(F)跟leader(L)服务器之间的请求和答应最多能容忍的心跳数
  24. syncLimit=5
  25. # the port at which the clients will connect
  26. clientPort=2181
  27. audit.enable=true
  28. # 允许连接的客户端数目,0为不限制,通过IP来区分不同的客户端
  29. #maxClientCnxns=60
  30. #
  31. # Be sure to read the maintenance section of the
  32. # administrator guide before turning on autopurge.
  33. #
  34. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
  35. #
  36. # The number of snapshots to retain in dataDir
  37. #autopurge.snapRetainCount=3
  38. # Purge task interval in hours
  39. # Set to "0" to disable auto purge feature
  40. #autopurge.purgeInterval=1
  41. ## Metrics Providers
  42. #
  43. # https://prometheus.io Metrics Exporter
  44. #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider
  45. #metricsProvider.httpPort=7000
  46. #metricsProvider.exportJvmInfo=true
  47. dataDir=/data
  48. dataLogDir=/datalog
  49. #######################################################
  • 集群部署 docker-compose.yml ```yaml version: ‘3.1’ services:

    1. zoo1:
    2. image: zookeeper
    3. restart: always
    4. container_name: zoo1
    5. ports:
    6. - 2181:2181
    7. volumes:
    8. - /home/zookeeper/zoo1/data:/data
    9. - /home/zookeeper/zoo1/datalog:/datalog
    10. environment:
    11. ZOO_MY_ID: 1
    12. ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    13. ZOO_AUTOPURGE_PURGEINTERVAL: 1
    14. zoo2:
    15. image: zookeeper
    16. restart: always
    17. container_name: zoo2
    18. ports:
    19. - 2182:2181
    20. volumes:
    21. - /home/zookeeper/zoo2/data:/data
    22. - /home/zookeeper/zoo2/datalog:/datalog
    23. environment:
    24. ZOO_MY_ID: 2
    25. ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
    26. ZOO_AUTOPURGE_PURGEINTERVAL: 1
    27. zoo3:
    28. image: zookeeper
    29. restart: always
    30. container_name: zoo3
    31. ports:
    32. - 2183:2181
    33. volumes:
    34. - /home/zookeeper/zoo3/data:/dada
    35. - /home/zookeeper/zoo3/datalog:/datalog
    36. environment:
    37. ZOO_MY_ID: 3
    38. ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181

server.A=B:C:D

- A 是一个数字,表示这个是第几号服务器。集群模式下需要在zoo.cfg中dataDir指定的目录下创建一个文件myid,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。

- B 是这个服务器的地址。

- C 是这个服务器Follower与集群中的Leader服务器交换信息的端口。

- D 是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。

  1. <a name="LAksH"></a>
  2. ### 3.14 创建 GDAL-java8 镜像
  3. > Dockerfile
  4. ```dockerfile
  5. FROM osgeo/gdal
  6. RUN rm -f /etc/apt/sources.list \
  7. && echo "deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse">> /etc/apt/sources.list \
  8. && echo "deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse">> /etc/apt/sources.list \
  9. && echo "deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse">> /etc/apt/sources.list \
  10. && echo "deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse">> /etc/apt/sources.list \
  11. && echo "deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse">> /etc/apt/sources.list \
  12. && apt-get update
  13. RUN apt-get install openjdk-8-jdk -y
  14. RUN ln -sf /usr/share/zoneinfo/Asia/ShangHai /etc/localtime \
  15. && echo "Asia/Shanghai" > /etc/timezone \
  16. && dpkg-reconfigure -f noninteractive tzdata
  1. docker build -t java8gdal:0.1 .
  2. docker run -d -it java8gdal:0.1

4、Docker 高级

4.1 提交

  1. # 提交容器为一个副本
  2. docker commit -m='describe' -a="author" 'id' '目标镜像':[TAG]

4.2 数据卷 —- 数据同步(双向)

  1. #直接在本地修改数据,可直接同步到容器
  2. docker run -it -v 主机目录:容器目录 -p... '镜像ID'
  3. -v 容器内路径 # 匿名挂载
  4. -v 卷名:容器内路径 # 具名挂载
  5. -v /主机路径:容器路径 # 指定路径挂载
  1. docker volume ls # 查看卷的情况
  2. #具名挂载---> 挂载到的目录:/var/lib/docker/volumes/xxxxx/_data
  3. docker run -d --name nginx02 -v juming-nginx:/etc/nginx nginx

4.3 Dockerfile

  1. FROM # 基础镜像
  2. MAINTAINEG # 镜像是谁写的,姓名+邮箱
  3. RUN # 镜像构建的时候需要运行的命令
  4. ADD # eg:添加 tomcat安装包
  5. WORKDIR # 镜像工作目录
  6. VOLUME # 挂载到目录
  7. EXPOST # 暴露端口
  8. CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
  9. ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
  10. ONBUILD # 当构建一个被集成 DockerFile,这个时候就会运行 ONBUTILD 的指令,触发指令
  11. COPY # 类似 ADD ,将文件拷贝到镜像中
  12. ENV # 构建的时候设置环境变量

image-20201208201912301.png

4.4 自定义网络

  1. # 查看所有的 docker 网络
  2. docker network ls
  3. # 自定义网络
  4. docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
  5. # 查看信息
  6. docker network inspect mynet
  7. # 把容器放在自己的网络中----可以通过 IP 或容器名字 ping 通
  8. docker run -d -P --name tomcat01 --net mynet tomcat
  9. docker run -d -P --name tomcat02 --net mynet tomcat
  10. # 连接到另一个容器
  11. docker network connect mynet tomcat01

4.x 实例

4.x.1 MySQL

  1. docker pull mysql:5.7
  2. # 官方实例: docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
  3. # -e 环境配置
  4. docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/ -v /home/mysql/data:/var/lib/mysql -v/home/mysql/log:/var/log/mysql -e MYSQL_ROOT_PASSWORD=WHUaliyun425 --restart=always --name mysql5.7 --network my_net --network-alias mysql5.7 mysql:5.7
  5. docker run -d -p 3306:3306 -v /home/mysql/conf:/etc/mysql/ -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=WHUaliyun425 --restart=always --name mysql5.7 mysql:5.7
  6. # 配置 mysql/conf/my.cnf
  7. [client]
  8. default-character-set=utf8
  9. [mysql]
  10. default-character-set=utf8
  11. [mysqld]
  12. init_connect='SET collation_connection = utf8_unicode_ci'
  13. init_connect='SET NAMES utf8'
  14. character-set-server=utf8
  15. collation-server=utf8_unicode_ci
  16. skip-character-set-client-handshake
  17. skip-name-resolve

安装 MYSQL:8.0

  1. docker pull mysql:8.0
  2. docker run -p 3306:3306 --name mysqltest1 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0 # 必须设置密码,否则启动无法启动
  3. # 进入 Mysql 容器
  4. mysql -u root -p 123456
  5. use mysql;
  6. select host,user,authentication_string,plugin from user; # 查看加密方案---plugin
  7. alter user 'root'@'%' identified with mysql_native_password by '123456'; # 修改加密方案为: mysql_native_password
  8. alter user 'root'@'%' identified by '123456' password expire never;
  9. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';# 解决错误--1045
  10. flush privileges; # 更新权限

若报错:1045 Access denied for user ‘root’@’localhost’ (using password:YES)

  1. # 解决方案
  2. use mysql;
  3. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
  4. flush privileges;
  5. # mysql 5.7 授权所有 ip
  6. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'rootpassword' WITH GRANT OPTION;
  7. # mysql 5.7 授权指定 ip
  8. GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.2.201' IDENTIFIED BY 'rootpassword' WITH GRANT OPTION;

MySQL 修改密码

  1. use mysql;
  2. UPDATE user SET Password = PASSWORD('WHUaliyun425') WHERE user = 'root';
  3. FLUSH PRIVILEGES;
  4. # 5.7
  5. update user set authentication_string = 'WHUaliyun425' where `user` = 'root';

4.x.2 PostgreSQL——PostGSI

  1. # postgresql
  2. docker pull postgres:12
  3. docker run --name postgreSQL_test -e POSTGRES_PASSWORD=953598751 -d -p 5432:5432 -v /home/postgresql:/var/lib/postgresql/ postgres:12

安装 PostGIS

  1. docker pull kartoza/postgis:13.0
  2. docker run --name=postgis -d -e POSTGRES_USER=postgres -e POSTGRES_PASS=953598751 -e POSTGRES_DBNAME=gis -e ALLOW_IP_RANGE=0.0.0.0/0 --network my_net --network-alias psql -p 5432:5432 -v /home/postgis:/var/lib/postgresql --restart=always kartoza/postgis:13.0

4.x.3 基于 CentOS 构建一个镜像

  • 编写 dockerfile 文件
  1. FROM centos
  2. MAINTAINER fengyuaho<953598751@qq.com>
  3. ENV MYPATH /usr/local
  4. WORKDIR $MYPATH
  5. RUN yum -y install vim
  6. RUN yum -y install net-tools
  7. EXPOSE 80
  8. CMD echo $MYPATH
  9. CMD echo "-----end-----"
  10. CMD /bin/bash
  • 通过命令构建 最后有一个点
  1. docker build -f 'file' -t '镜像名':[TAG] . # -f:文件路径 -t:镜像:【TAG】
  2. # docker build -f mydockerfiel_centos -t mycentos:0.1 .

4.x.4 构建 Tomcat 镜像

  • 准备 Tomcat 和 JDK 压缩包
  • 创建 Dockerfile 文件
  1. FROM centos
  2. MAINTAINER fengyuaho<953598751@qq.com>
  3. COPY read.txt /usr/local/read.txt
  4. ADD jdk-8u271-linux-x64.tar.gz /usr/local/
  5. ADD apache-tomcat-9.0.40.tar.gz /usr/local/
  6. /home/mydockerimage/readme.txt
  7. RUN yum install -y vim
  8. ENV MYPATH /usr/local/
  9. WORKDIR $MYPATH
  10. ENV JAVA_HOME /usr/local/jdk1.8.0_271
  11. ENV CLASSPATH $JAVA_HOME/lib/dt.jat:$JAVA_HOME/lib/tools.jar
  12. ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.40
  13. ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.40
  14. ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
  15. EXPOSE 8080
  16. CMD /usr/local/apache-tomcat-9.0.40/bin/startup.sh && tail -f /usr/local/apache-tomcat-9.0.40/logs/catalina.out
  • 镜像构建
  1. docker build -t mytamcat:0.1 .
  • 启动自定义的 Tomacat
  1. docker run -d -p 8083:8080 --name mytomcat--01 -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.40/webapps/test -v /home/tomcat/logs:/usr/local/apache-tomcat-9.0.40/logs mytomcat:0.1

4.x.5 Redis 集群

  • 安装 Redis
  1. docker pull redis
  2. mkdir -p /home/redisMaster/conf
  3. touch /home/redisMaster/conf/redis.conf
  4. docker run -p 6379:6379 --name redisMaster -v /home/redisMaster/data:/data -v /home/redisMaster/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
  5. docker run -p 6380:6379 --name redisMaster -v /home/redisMaster/data:/data -v /home/redisMaster/conf/redis.conf:/etc/redis/redis.conf -d redis:6.0 redis-server /etc/redis/redis.conf
  6. mkdir -p /home/redisSlave/conf
  7. touch /home/redisSlave/conf/redis.conf
  8. docker run -p 6380:6379 --name redisSlave -v /home/redisSlave/data:/data -v /home/redisSlave/conf/redis.conf:/etc/redis/redis.conf -d redis redis-server /etc/redis/redis.conf
  9. ### slave 的 redis.conf
  10. slaveof 192.168.31.155 6379 ######### 完成同步 ############
  11. ######### 无法读取 dump.rdb 文件##########
  12. # The filename where to dump the DB
  13. dbfilename dump.rdb
  14. # Note that you must specify a directory here,not a file name.
  15. dir /current/working/directory

5、错误

  1. Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=portainer%2Fportainer&tag=latest: dial unix /var/run/docker.sock: connect: permission denied
  2. 解决: sudo chmod a+rw /var/run/docker.sock