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;








 

 

 

 

 

原文地址:https://www.cnblogs.com/jiahaoJAVA/p/8994631.html