前端学习案例-初识docker
  TEZNKK3IfmPf 2023年11月14日 26 0

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-/conf
 touch /mydata/redis/node-/conf/redis.conf
 cat << EOF>/mydata/redis/node-/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
 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.

这边就整理了一小部分的笔记
方便一起学习 本文源自个人学习笔记

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月19日   40   0   0 前端
  TEZNKK3IfmPf   2024年04月26日   51   0   0 Docker
TEZNKK3IfmPf