#yyds干货盘点# docker小结

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: #yyds干货盘点# 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.


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
11月前
|
Java Go 虚拟化
【Docker 系列】docker 学习十一,docker 总结和面试题整理
【Docker 系列】docker 学习十一,docker 总结和面试题整理
117 0
|
5月前
|
数据管理 应用服务中间件 nginx
分享一下docker的使用心得
分享一下docker的使用心得
37 0
|
12月前
|
消息中间件 NoSQL 关系型数据库
Docker真好用
Docker真好用
49 1
|
关系型数据库 MySQL 应用服务中间件
浅谈docker&小试牛刀
浅谈docker&小试牛刀
67 0
|
测试技术 Linux 应用服务中间件
docker是什么?docker能干嘛?dcokerfile计划第一期
docker是什么?docker能干嘛?dcokerfile计划第一期
107 0
|
Shell 应用服务中间件 nginx
|
安全 应用服务中间件 Shell
三天入门 Docker - 第一天:Docker 基本介绍与使用
Docker是一个用于开发、发布和运行应用程序的开放平台。Docker可以将应用程序与基础架构9分离(即不再过于需要底层支持),以便我们可以快速交付软件。使用Docker,我们可以像管理应用程序一样管理基础架构。Docker 官方
250 0
三天入门 Docker - 第一天:Docker 基本介绍与使用
|
应用服务中间件 Linux Docker
docker学习日记(二):Docker的安装
1.Docker的基本组成: 镜像(image): docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像===》run===》t
83 0
|
运维 Docker 容器
docker学习日记(一):Docker基本介绍
1.比较Docker和虚拟技术的不同: 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核,也没有虚拟我们的硬件,所以就轻便了 每个容器是相互隔离,每个容器内部都有一个属于自己的文件系统,互不影响。
91 0
|
架构师 Docker Python
Docker 镜像构建可以分享的快乐
通过上一篇 Dockerfile 语法与指令的学习,本节就开始使用Dockerfile 来制作自己的 Docker 镜像啦。 ## Docker 镜像构建 新建 app.py 文件 ``` from flask import Flask app = Flask(__name__) @app.route('/') def hello(): return 'Hello Worl
下一篇
无影云桌面