docker笔记内容

Docker 学习笔记内容

  • jdk 与 docker各种版本之间限制:【很好的博文 来自

    1
    2
    3
    4
    5
    6
    7
    8
    简言之:注意资源限制的不匹配。测试你的内存设置和JVM标志,不要假设任何东西。
    如果您在Docker容器中运行Java,请确保你设置了docker内存限制和在JVM中也做了限制,或者你的JVM能够理解这些限制。
    如果您无法升级您的Java版本,请使用-Xmx设置您自己的限制。
    对于Java 8和Java 9,请更新到最新版本并使用: -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap
    docker run -m 100m -it adoptopenjdk/openjdk10:nightly /bin/bash
    对于Java 10,确保它支持’UseContainerSupport’(更新到最新版本)。
    docker run -m 100m -it adoptopenjdk/openjdk9-openj9 /bin/bash
    对于OpenJ9(我强烈建议使用,可以在生产环境中有效减少内存占用量),现在使用-Xmx设置限制,但很快会出现一个支持UseContainerSupport标志的版本。
  • 1.配置的docker容器,外网不可以访问,只能内网才可以进行访问

    1
    2
    docker run xxx -p 3306:3306  -d  xximage  : 这个port会对外网可以进行访问,无视防火墙的设置
    docker run xxx -p 127.0.0.1:3306:3306 -d xximage : 这个port是针对本地的地址的内容,外网无法进行访问
  • 2.清空的none的docker镜像内容

    1
    docker rmi $(docker images -f "dangling=true" -q)
  • 3.docker可视化工具:portainer 参考资料 | 官方文档

    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
        1.拉取镜像:docker pull portainer/portainer

    2.docker run相应的脚本内容:
    local本地模式开启:
    添加 : -v "/var/run/docker.sock:/var/run/docker.sock"
    docker run -d -p 9000:9000 \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --name prtainer-test \
    docker.io/portainer/portainer

    3.访问相应的ip地址:http://IP:9000
    ```
    - 4.docker无法查看jvm的参数 [参考资料](https://blog.csdn.net/kinginblue/article/details/78078028)
    ```text
    1.使用 --cap-add 明确添加指定功能:
    docker run --cap-add=SYS_PTRACE ...
    2.docker compose添加的相应指令:
    version: '2'
    services:
    mysql:
    ...
    api:
    ...
    cap_add:
    - SYS_PTRACE
    ```
    - 5.docker对jdk资源的限制: [参考资料](https://segmentfault.com/a/1190000014142950)
    - 6.docker compose指令 : [参考资料](https://www.cnblogs.com/52fhy/p/5991344.html)

    - 7.docker容器启动非常的缓慢 死机 [参考](https://my.oschina.net/u/1188877/blog/422405?p=1)
    ```text
    1.sudo service docker stop
    2.rm -rf /var/lib/docker/* #(记得备份重要数据)
    3.sudo servie docker start
  • 8.linux报错:kernel:unregister_netdevice: waiting for lo to become free. Usage count = 1

docker-compose

1
2
docker-compose up 执行docker镜像的内容
docker-compose build 会执行文件里面需要build的镜像内容,然后再进行up的处理

docker-swarm:

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
71
72
73
74
75
1.生产环境的使用,多机器,扩展部署
2.Node有2种角色:Manager Worker
3.Manager要多节点部署避免单点故障 需要共享库来同步状态
4.Service 和 Replicas
5.Manager进行做决策多部署服务到多个节点上

6.docker swarm 指令:
A.docker swarm --advertise-addr=[IP] 初始化manager
查看join的信息然后把内容加入到子节点上
B.docker node ls 查看manager节点信息 看到manger+worker的节点信息

7.swarm环境搭建好之后,进行对service进行操作
A.创建服务: docker service create -name [Images] bash
B.docker service ls
C.docker service ps demo
D.docker service scale=[Num] 水平扩展到不一样的机器

8.docker swarm部署 wordpress
A.创建网络:共享的网络
docker network create -d overlay demo
B.docker service create xxxName
C.多节点的同步问题:overlay : 原理是DNS服务来发现的功能,为连overlay建一条日志

docker swarm技术:
Routing Mesh的两种体现:【题外话:Lvs+keepalived实现高可用集群】
A. Internal : container 和 container之间的访问通过overlay网络(通过Vip虚拟Ip)
【具体原理可以查看 [图片](/images/Internal原理.png)】
B. Ingress : 如果服务有绑定接口,则此服务可以通过任意swarm节点的相应接口访问
作用:
外部访问的负载均衡
服务端口被暴露到各个swarm节点
内部通过IpVs进行负载均衡
[Ingress流程图 : /images/Ingress.png]
[数据包传输流程图 : /images/Ingress数据包走向.png]



9.docker发布服务在生产环境:
借助compose 的 version = 3部署到生产环境上
docker stack deploy 执行的compose文件的内容
docker stack remove 进行删掉的services服务

10.DOckerSecret管理
Secret Management:
1.存在Swarm Manager节点Raft database里
2.Secret可以assign给一个service,这个service就能看到这个secret
3.在container内部secret看起来像文件,但是实际上在内存中
指令:
创建: docker secret create my-pwd
删除: docker secret rm my-pwd
在创建一个secret在一个容器中,容器里面的文件夹中有相应的内容:
1. docker service create --name xxx --secret my-pwd 【imagesName】
2. docker service ls 查看服务节点多少个
3. docker service ps [name] 查看服务节点在哪里
4. cat /run/secrests/my-pwd 就可以查看secret的明文内容

11.Swarm更新服务(生产环境):
A.运行一个service
docker service create --name web --publish 8080:5000 --network demo flask:1.0
B.运行2个节点的操作
docker service scale web=2
3.运行shell指令来测试
sh -c "while true; do curl 127.0.0.1:8080&&sleep 1;done"
4.更新指令很多内容:
docker service update --help
5.更新images的版本
docker service update --image flask:2.0 web
6.更新端口的操作:删掉原来的端口并添加新的端口操作
docker service ps web
docker service update --publish-rm 8080:5000 --publish-add 8099:5000 web


12. dockerEE 企业版:可以查看swarm部署多个节点监控状态
在dockerEE基础上部署DTR,其作用是扫描镜像的安全性问题
阿里云也有相应的docker-swarm服务,但是相应的付费还是蛮昂贵的
感谢您的阅读,本文由 左之右 版权所有。如若转载,请注明出处:左之右(https://zuoyoulai.github.io/2019/12/25/docker%E7%AC%94%E8%AE%B0%E5%86%85%E5%AE%B9/
windows-Mq 启动操作
Linux-Vim 插件,指令的学习