我是歌谣 放弃很难 但是坚持一定很酷 微信关注小歌谣一起学习

最近因为工作需要就要进行docker的一些相关学习
这边就整理了一小部分的笔记
方便一起学习 本文源自个人学习笔记

docker笔记

docker 教程方法

1.docker 的镜像和容器的基本操作

  1. uname -r 查看系统的版本信息

  2. docker version 查看是否安装成功

  3. docker images --help

  4. docker ps 查询正则运行的命令

  5. docker ps -a 查询全部的容器

  6. docker ps -n=1 显示 最近一个容器的

  7. docker ps -q 只显示容器的编号

  8. ctrl+p+q 容器退出不停止运行

    docker 搜索

    1. 搜索星级大于3000

      docker search mysql --filter=STARS=3000

      docker pull mysql:5.7

    docker 删除镜像

    1. docker rmi -f 镜像id #删除指定的镜像

      docker rmi -f 镜像id 镜像id #删除多个镜像

      docker rmi -f $(docker images -aq) # 删除全部镜像

    docker 容器

    1. 新建容器并启动

      docker run [] image

      #参数说明

      –name=‘Name’ 容器名

      -d 后台运行

      -p 指定端口

      -it 使用交互模式运行

    2. 启动并进行容器内

      docker run -it centos /bin/bash

    3. 删除容器

      docker rm 容器id #删除指定的容器,不能删除正则运行的容器

      docker rm -f $(docker ps -aq) #删除所有容器

      docker ps -a -q | xargs docker rm #删除所有容器

      1. 启动和停止容器

        docker start 容器id

        docker restart 容器id

        docker stop 容器id

        dokcer kill 容器id

        docker stop 容器id

    常用的其他命令

    1. 后台启动容器

      docker run -d 镜像名 #比如加it可以视为前台命令

    2. 查看日志信息

      docker logs

      docker logs -f -t --tail 10 容器id

    3. 查看容器中的进程信息

      docker top 容器id

    4. 查看容器的信息

      docker inspect 容器id

    5. 进入当前正在运行的容器

      docker exec -it 容器id /bin/bash #进图容器开启一个新的终端,可以在里面操作

      docker attach 容器id #进入正在进行的容器内

    6. 从容器内拷贝到主机上

      进入到容器内

      docker cp 容器id:/home/文件名 /home /ubuntu

    项目注意点

    1. docker run -d --name nginx01 -p 3304:80 nginx

      curl local:3304 # 本地运行测试

    2. docker 配置es的命令

      docker run -d --name elasticsearch -p 9200:9300 -e “discovery.type=single-node” -e ES_JAVA_OPTS="-Xms64m -Xmx51m" elasticsearch:7.6.2

    commit 镜像

    1. docker commit -a=‘sss’ -m=‘add web’ 容器id tomcat:1.0

2.容器数据卷

1.使用数据卷

方式一,直接使用命令挂载 -v

docker run -it -v /home/ceshi:/home ubutu /bin/bash

#挂载mysql

-d 后台运行

-p 端口

-v # 卷挂载

-e #环境配置

–name 容器的名字

docker run -d -p 3310:3306 -v /homge/ubuntu/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7

2.具名和匿名挂载

  1. 匿名挂载

    docker run -d -P --name nginx01 -v /etc/nginx nginx #-v 容器内路径,

  2. 具名挂载

    docker volume ls

    docker run -d -P --name nginx03 -v juming-Nginx:/etc/nginx nginx

3.初识dockerfile

  1. dockerfile 就是用来构建docker 镜像构建文件,命令脚本,通过脚本可以生成镜像,镜像是一层一层的,脚本是一个个的命令

    #创建一个dockerfile文件,名字随机,建议dockerfile

    FROM centos

    VOLUME [‘volume01’,‘volume02’]

    CMD echo ‘–end —’

    CMD /bin/bash

    #运行

    docker build -f /home/ubuntu/docker_test_volume/dockerfile -t jayson/ubuntu . # 后面是有点 . 代表当前的路径

  2. docker 过个容器共用一个存储数据,称为数据卷容器

    #主要是–volumes-from

    docker run -it --name docker02 --volumes-from docker01 jayson_ubuntu

3.dockerfile制作镜像

1.dockerfile 构建过程

  1. 每个保留关键字都是必须大写字母
  2. 执行从上到下顺序执行
  3. #表示注释
  4. 每一个指令都会创建提交一个新的镜像层,并提交

dockerfile都是面向开发的,我们以后发布项目,做镜像,都是编写dockerfile文件,文件十分简单

docker镜像逐渐成为企业交付的标准,必须掌握!

DokerFile :构建文件,定义了一切的步骤,源代码

Dockerimages:通过DockerFile构建生成的镜像,最终发布和运行产品

DockerFile的指令

FROM #基础镜像,一切从这里开始构建

MAINTAINER #镜像是谁写的,姓名+邮箱

ADD #步骤,tomcat镜像,添加内容

WORKDIR #镜像的工作目录

VOLUME # 挂载的目录

EXPOSE # 暴露的端口配置

CMD #指定容器启动时要运行的命令,只有一个最后的命令生效,可以被替代

ENTRYPOINT # 指的是容器启动时要运行的命令,可以追加
ONBUILD #当构建一个被继承的dockerfile,这时候会运行onbuild指令
COPY #类似于ADD,将文件拷贝到镜像当中
ENV #构建的时候设置环境变量

实战docker

创建一个centos,先创建文件

ubuntu@VM-0-4-ubuntu:~/dockerfile$ vi mydockerfile
ubuntu@VM-0-4-ubuntu:~/dockerfile$ cat mydockerfile
FROM centos
MAINTAINER jayson123@qq.com
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOST 80
CMD echo $MYPATH
CMD echo “–end–”
CMD /bin/bash

  1. docker history 可以看到镜像的构建过程

  2. CMD 和ENTRYPOINT的区别

3.docker 网络

  1. ip addr
  2. linux可以ping通docker容器内部

原理

evth-pair是linux虚拟设备接口,成对出现,,docker所有的网络接口都是虚拟的,

#可以通过ip进行ping通

docker exec -it tomat02 ping 172.18.0.3

  1. 如果通过非主机名直接ping通,需要通过–link

docker run -d -P --name tomcat03 --link tomcat02 tomcat

docker exec -it tomcat04 ping tomcat01

  1. docker network ls#查看网络

    #直接启动命令 --net bridge ,这个就是我们的docker0

    docker run -d -P --name tomcat01 tomcat

    docker run -d -P --name tomcat01 --net bridge tomcat

    #docker0的特点默认,域名是不能访问,–link可以打通链接

    #我们可以自定义一个网络

    ####下面是自己组建了一个网络,可以保持自己集群的健康,集群之间相互隔离

    docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

    #查询自己的网络

    docker network ls

    #加入到网络

    docker run -d -P --name tomcat-net-01 --net mynet tomcat

    docker run -d -P --name tomcat-net-02 --net mynet tomcat

    #查询到网络可以看到

    docker network inspect mynet

    2.网络连通

  2. 将容器和集群连接

docker network connect mynet tomcat01

原理是直接将容器的ip直接加入到自定义的网络当中,暴力计入

3.docker 建立redis集群实战

  1. 环境部署,三主三从,从的是备份机

    docker network create redis --subnet 172.38.0.0/16
    docker network ls
    #创建集群配置文件
    for port in $(seq 1 6); \
    do \
    mkdir -p /mydata/redis/node-${port}/conf
    touch /mydata/redis/node-${port}/conf/redis.conf
    cat << EOF>/mydata/redis/node-${port}/conf/redis.conf
    port 6379
    bind 0.0.0.0
    cluster-enabled yes
    cluster-config-file nodes.conf
    cluster-node-timeout 5000
    cluster-announce-ip 172.38.0.1${port}
    cluster-announce-port 6379
    cluster-announce-bus-port 16379
    appendonly yes
    EOF
    done
    #启动服务
    docker run -p 6371:6379 -p 16371:16379 --name redis-1 -v /mydata/redis/node-1/data:/data -v /mydata/redis/node-1/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.11 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
    #第二个
    docker run -p 6373:6379 -p 16373:16379 --name redis-3 -v /mydata/redis/node-3/data:/data -v /mydata/redis/node-3/conf/redis.conf:/etc/redis/redis.conf -d --net redis --ip 172.38.0.13 redis:5.0.9-alpine3.11 redis-server /etc/redis/redis.conf
    e0ddd2844f8565575f3228ef16308828b14feb508e65dbc7c0eb8e02df870263
    #一共启动了6个
    #接下来创建集群
    进入到sh
    docker exec -it redis-01 /bin/sh
    /data# redis-cli --cluster create 172.38.0.11:6379 172.38.0.12:6379 172.38.0.13:6379
     172.38.0.14:6379 172.38.0.15:6379 172.38.0.16:6379 --cluster-replicas 1
     #显示下面的结果表示成功
     >>> Performing hash slots allocation on 6 nodes...
    Master[0] -> Slots 0 - 5460
    Master[1] -> Slots 5461 - 10922
    Master[2] -> Slots 10923 - 16383
    Adding replica 172.38.0.15:6379 to 172.38.0.11:6379
    Adding replica 172.38.0.16:6379 to 172.38.0.12:6379
    Adding replica 172.38.0.14:6379 to 172.38.0.13:6379
    M: 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe 172.38.0.11:6379
       slots:[0-5460] (5461 slots) master
    M: b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731 172.38.0.12:6379
       slots:[5461-10922] (5462 slots) master
    M: e5ae04bff43034f04f0dfa23ee66c4563160aa37 172.38.0.13:6379
       slots:[10923-16383] (5461 slots) master
    S: dba613da945914b339adf96a2a7fbc30fb01848e 172.38.0.14:6379
       replicates e5ae04bff43034f04f0dfa23ee66c4563160aa37
    S: 7858895f332bd68775267adf5c3530ab1172fa60 172.38.0.15:6379
       replicates 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe
    S: 3472dc464937a645af57ece9a4ec8769ed6b2fa0 172.38.0.16:6379
       replicates b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731
    Can I set the above configuration? (type 'yes' to accept): yes
    >>> Nodes configuration updated
    >>> Assign a different config epoch to each node
    >>> Sending CLUSTER MEET messages to join the cluster
    Waiting for the cluster to join
    ..
    >>> Performing Cluster Check (using node 172.38.0.11:6379)
    M: 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe 172.38.0.11:6379
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    S: 7858895f332bd68775267adf5c3530ab1172fa60 172.38.0.15:6379
       slots: (0 slots) slave
       replicates 8742bf66934ec467e43d74c9fd2c9c06d1b0adfe
    M: e5ae04bff43034f04f0dfa23ee66c4563160aa37 172.38.0.13:6379
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
    S: dba613da945914b339adf96a2a7fbc30fb01848e 172.38.0.14:6379
       slots: (0 slots) slave
       replicates e5ae04bff43034f04f0dfa23ee66c4563160aa37
    S: 3472dc464937a645af57ece9a4ec8769ed6b2fa0 172.38.0.16:6379
       slots: (0 slots) slave
       replicates b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731
    M: b9e11f701c7ca13eb9c35d1b786bd4f5c0fa0731 172.38.0.12:6379
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    [OK] All nodes agree about slots configuration.
    >>> Check for open slots...
    >>> Check slots coverage...
    [OK] All 16384 slots covered.