• docker入门


     

    Docker入门

                

     

                     

     

    什么是docker

    Docker是一个装应用的容器 就像杯子可以装水  笔筒装笔 可以吧hello word 把网页以及你可以想到的程序都放进docker

    www.docker.com 官网

     

     

    docker是世界领先的容器化平台

     

     

    Docker思想 看logo可以提现很多

      集装箱 在没有集装箱的时候货物比较混乱又可能有些东西还会掉了,有了集装箱箱子密封的东西不容易丢失保证货完整(把货物想象成你的程序)

    标准化 将你需要的东西交付给鲸鱼然后运到超级码头,然后你再本地使用命令到超级码头运过来(可以想成是一个中央库(公有私有都可以)也不用考虑应用装在那些地方你只是需要使用docker命令就ok  Api标准化  如你启动tomcat的时候有使用tomcat.start其它服务器用其它启动命令 docker就标准化了这些 你只需要使用同一个启动命令就可以了

    隔离  隔离进程和资源

      

    Docker解决了什么问题

     

     

     

    这是公司开发和测试经常遇到的问题(开发自己的环境可以起来测试也测试到自己的服务都正常)  两边都感觉不是自己的问题 问题成皮球

     

    Docker 可以将程序正常运行的环境装入集装箱 打包给鲸鱼 鲸鱼给服务器 在你的环境怎么运行在服务器还是怎么运行 Docker 解决运行环境不一致的问题

     

     

    Docker隔离性 别人的问题不会影响到自己的程序 Docker启动就规定了最大的cpu 超过就gg

     

     

     

    当节日来到电商网站需要加多服务器然后进行安装各种环境然后调试非常的麻烦和耗时间Docker可以轻松扩展服务器 1100 1001000  它是已标准的方式把程序和环境运过来然后运行起来每台机器运行两条命令就ok

    直接使用

     

     

     

     

     

    镜像(集装箱)   仓库(超级码头)   容器(运行程序的地方)

    Docker生命周期

    Docker 包括三个基本概念:

    镜像(Image
    容器(Container
    仓库(Repository

    这三部分组成了Docker的整个生命周期,如下图所示,容器是由镜像实例化而来的,这和我们学习的面向对象的概念十分相似,我们可以把镜像想象成类,容器想象成类经过实例化后的对象,这样就非常好理解镜像和容器的关系了。

     

    Docker镜像

    Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。

    例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了Mysql或用户需要的其它应用程序。

    Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS。镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。

    Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。

    注:镜像是只读的,可以理解为静态文件。

    Docker容器

    Docker 利用容器来运行应用。

    Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。

    可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

    注:相对于镜像来说容器是动态的,容器在启动的时候创建一层可写层作为最上层。

    Docker仓库

    如果你使用过gitgithub就很容易理解Docker的仓库概念。Docker 仓库的概念跟Git 类似,注册服务器可以理解为 GitHub 这样的托管服务。

    Docker 仓库是用来包含镜像的位置,Docker提供一个注册服务器(Register)来保存多个仓库,每个仓库又可以包含多个具备不同tag的镜像。Docker运行中使用的默认仓库是 Docker Hub 公共仓库。

    仓库支持的操作类似git,当用户创建了自己的镜像之后就可以使用 push 命令将它上传到公有或者私有仓库,这样下次在另外一台机器上使用这个镜像时候,只需要从仓库上 pull 下来就可以了。.

    ·Docker image镜像是只读的,镜像中包含有需要运行的文件。镜像用来创建container,一个镜像可以运行多个container;镜像可以通过Dockerfile创建,也可以从Docker hub/registry上下载。

    ·Docker container容器是Docker的运行组件,启动一个镜像就是一个容器,容器是一个隔离环境,多个容器之间不会相互影响,保证容器中的程序运行在一个相对安全的环境中。

    ·Docker hub/registry: 共享和管理Docker镜像,用户可以上传或者下载上面的镜像,官方地址为https://registry.hub.docker.com/,也可以搭建自己私有的Docker registry

     

     

    去仓库吧镜像 拉到本地 用命令吧镜像在容器中运行起来

    Build构建镜像   ship运输镜像(仓库)   Run运行

     

    Docker 鲸鱼身上的所有集装箱就是一个docker镜像  镜像就是一系列的文件(保存在本地)

    联合文件系统(linux 实现文件的分层

     

     

     

    最下面是系统的引导  第二是linux  第三层如tomcat  jdk  第四就是自己的程序 每层只读

     

    容器 就是一个进程或者虚拟机

    第五层可读可写 如果下层需要修改文件需要先拷贝到最上层然后修改 应用读的时候先从顶层开始查找 没有就 找下一层  可以保证同一个镜像可以生成多个容器独立运行没有任何干扰

     

    仓库

     

     

     

    构建镜像完成可以在其它机器运行环境  怎么传送到其它机器呢?

     

    先把镜像传输到仓库目的地到仓库去拉去(有点maven的意思 )

    https://c.163yun.com/hub#/m/home/  推荐

     

     

     

     

     

    Docker可以自己搭建私有仓库中心

    安装 推荐linux系统  ubuntu  dockerubuntu  开发集成最好稳定

     

     

     

     

     

    查询系统版本

     

     

    三)安装docker

    https://blog.csdn.net/horizon_zpy/article/details/88383263

     

                                             启动docker:systemctl start docker
    停止docker:systemctl stop docker
    重启docker:systemctl restart docker
    查看docker状态:systemctl status docker
    开机启动:systemctl enable docker
    查看docker概要信息 docker info
     

    Docker  version    命令查看是否安装成功

    service docker start  启动docker服务

     

     

     

     

    实践镜像操作 hello-word

     

     

    拉取镜像 黑色必须  红色可选

     

     

    查看本机镜像

     

     

     

     

    默认去docker仓库下载

     

     

    容器运行

     

     

     

     

     

    持久化容器  web服务器  需要后台挂起

     

    首先去https://c.163yun.com/hub#/m/home/ 查找自己需要的镜像

     

     

    进入复制命令

     

     

    然后下载镜像  拉去到本地

     

     

     

    查看镜像完成

     

     

     

    运行docker run 名称|| image  id都可以

     

     

    新开一个窗口 记住登录root权限

     

     

    镜像已经正常的运行了

    Docker ps 查看本机运行的容器

    这是前台运行看不到任何反应  ctrl+c结束  要后台运行需要 docker run  -d  名称跟id都行

     

     

    Docker stop 关闭容器

     

     

     

    Docker stop b11 也可以关闭容器

     

     

    想要进入容器内部使用一下命令

     

     

    Which nginx查看安装地址

    Ps  -ef 查看经常

     

     

    Exit 退出容器

     

    Docker网络 访问容器中的nginx

     

     

     

     

     

     

     

    -p开放容器的端口到主机上 默认空   -P(大写)开放所有的端口到随机的端口

    8080主机端口 80是容器开放的的端口

    Netstat  -na|grep  8080

     

     

    查看开放的端口

    Ip为服务器ip

     

     

    -P

    8080访问实现  变成32769的随机端口

     

    Dockercfile  :  https://www.jianshu.com/p/10ed530766af 

     

                                                                                                                执行构建命令: docker build -t xxx:v1.0 .

     

                                                                                                                注意最后有个点,代表使用当前路径的 Dockerfile 进行构建 ,

     

                                                                                                                -t  xxx: v1.0  给新构建的镜像取名为xxx, 并设定版本为 v1.0 。

     

     

     

     

     安装mysql

    docker pull hub.c.163.com/library/mysql:latest  最新版本

    docker tag 镜像id   新名

                                                                                                                       docker pull hub.c.163.com/library/mysql:5.7  5.7版本

    创建三个文件

                                                                                                                                                                                       

    
    

     

                                       docker run --privileged=true -d -p 3307:3306 --name mysql -v /usr/local/mysqlData/test/conf:/etc/mysql/conf.d 
    -v /usr/local/mysqlData/test/log:/var/log/mysql -v /usr/local/mysqlData/test/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
    无法挂载https://blog.csdn.net/john1337/article/details/96272398



    docker stop mysql 关闭容器
    docker start mysql 重启mysql容器
    docker rm mysql 删除容器
    docker exec -it mysql bash 进入容器内部
    mysql -uroot -p 登录mysql

                                                                                                 SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;查看数据库用户



    其余按这个来吧
    https://blog.csdn.net/xsj34567/article/details/80940238

    主从
    复制:https://www.cnblogs.com/songwenjie/p/9371422.html

       一主多从架构就可以依葫芦画瓢出来了



    如在实际项目中的话不想一次对所有的数据进行全量的复制,可以先将主库的数据dump成mysql文件在从库上执行(可以修改库名)然后在进行关联主从库的时候查看
    mysqldump -–master-data=2 –-single-transaction –rotines –triggers –events -uroot -p immoc_db > bak_imooc.sql(没有测试)
    里面包含了当前数据的一份快照也存在master_log_file,master_log_pos(相当于数据定格的一个点从这个点开始向下同步)
    
    
    问题:能不能使主库跟从库同步复制但是库名不一样(但是同步内容一致)一般情况下主从同步的库名都是一致的
    从库执行:

    change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 4650002, master_connect_retry=30;

    之后执行

    change replication filter replicate_rewrite_db=((主数据库库名,从数据库库名)); 




    从库不能写数据否则主从失败 :https://blog.csdn.net/heng_ji/article/details/51013710

    应该设置从库只读 :https://www.cnblogs.com/wlmq/p/6084880.html

    操作用户 : https://www.cnblogs.com/wuxunyan/p/9095016.html
    远程登录 https://www.cnblogs.com/jhxk/articles/10797324.html

        新授权方式,需要先创建用户和设置密码,然后才能授权。

    
    
    #先创建一个用户
    create user 'test'@'%' identified by '123123';
    #再进行授权
    grant all privileges on *.* to 'test'@'%' with grant option;
    
    
    





    
    

     

     

     

     

     

  • 相关阅读:
    UVa 658 (Dijkstra) It's not a Bug, it's a Feature!
    CodeForces Round #288 Div.2
    UVa 540 (团体队列) Team Queue
    UVa 442 (栈) Matrix Chain Multiplication
    CodeForces Round #287 Div.2
    CodeForces Round #286 Div.2
    CodeForces Round #285 Div.2
    UVa 12096 (STL) The SetStack Computer
    UVa 101 (模拟) The Blocks Problem
    UVa 12171 (离散化 floodfill) Sculpture
  • 原文地址:https://www.cnblogs.com/jiahaoJAVA/p/8994631.html
Copyright © 2020-2023  润新知