前端学习案例-初识docker

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

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

docker笔记
docker 教程方法
1.docker 的镜像和容器的基本操作

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

    docker version 查看是否安装成功

    docker images --help

    docker ps 查询正则运行的命令

    docker ps -a 查询全部的容器

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

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

    ctrl+p+q 容器退出不停止运行
    docker 搜索

        搜索星级大于3000

            docker search mysql --filter=STARS=3000

            docker pull mysql:5.7

    docker 删除镜像

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

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

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

    docker 容器

        新建容器并启动

            docker run [] image

            #参数说明

            –name=‘Name’ 容器名

            -d 后台运行

            -p 指定端口

            -it 使用交互模式运行

        启动并进行容器内

            docker run -it centos /bin/bash

        删除容器

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

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

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

            启动和停止容器

                docker start 容器id

                docker restart 容器id

                docker stop 容器id

                dokcer kill 容器id

                docker stop 容器id

    常用的其他命令

        后台启动容器

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

        查看日志信息

            docker logs

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

        查看容器中的进程信息

            docker top 容器id

        查看容器的信息

            docker inspect 容器id

        进入当前正在运行的容器

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

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

        从容器内拷贝到主机上

            进入到容器内

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

    项目注意点

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

            curl local:3304 # 本地运行测试

        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 镜像
        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.具名和匿名挂载

    匿名挂载

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

    具名挂载

        docker volume ls

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

3.初识dockerfile

    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 . # 后面是有点 . 代表当前的路径

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

        #主要是–volumes-from

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

3.dockerfile制作镜像
1.dockerfile 构建过程

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

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

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

        CMD 和ENTRYPOINT的区别

3.docker 网络

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

    原理

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

    #可以通过ip进行ping通

    docker exec -it tomat02 ping 172.18.0.3

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

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

    docker exec -it tomcat04 ping tomcat01

        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.网络连通

    将容器和集群连接

    docker network connect mynet tomcat01

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

3.docker 建立redis集群实战

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

    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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值