docker入门
Posted niuniuJAVA
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker入门相关的知识,希望对你有一定的参考价值。
Docker入门
什么是docker
Docker是一个装应用的容器 就像杯子可以装水 笔筒装笔 可以吧hello word 把网页以及你可以想到的程序都放进docker里
docker是世界领先的容器化平台
Docker思想 看logo可以提现很多
集装箱 在没有集装箱的时候货物比较混乱又可能有些东西还会掉了,有了集装箱箱子密封的东西不容易丢失保证货完整(把货物想象成你的程序)
标准化 将你需要的东西交付给鲸鱼然后运到超级码头,然后你再本地使用命令到超级码头运过来(可以想成是一个中央库(公有私有都可以)也不用考虑应用装在那些地方你只是需要使用docker命令就ok Api标准化 如你启动tomcat的时候有使用tomcat.start其它服务器用其它启动命令 docker就标准化了这些 你只需要使用同一个启动命令就可以了
隔离 隔离进程和资源
Docker解决了什么问题
这是公司开发和测试经常遇到的问题(开发自己的环境可以起来测试也测试到自己的服务都正常) 两边都感觉不是自己的问题 问题成皮球
Docker 可以将程序正常运行的环境装入集装箱 打包给鲸鱼 鲸鱼给服务器 在你的环境怎么运行在服务器还是怎么运行 Docker 解决运行环境不一致的问题
Docker隔离性 别人的问题不会影响到自己的程序 Docker启动就规定了最大的cpu 超过就gg
当节日来到电商网站需要加多服务器然后进行安装各种环境然后调试非常的麻烦和耗时间Docker可以轻松扩展服务器 1变100 100变1000 它是已标准的方式把程序和环境运过来然后运行起来每台机器运行两条命令就ok了
直接使用
镜像(集装箱) 仓库(超级码头) 容器(运行程序的地方)
Docker生命周期 Docker 包括三个基本概念: 镜像(Image) 这三部分组成了Docker的整个生命周期,如下图所示,容器是由镜像实例化而来的,这和我们学习的面向对象的概念十分相似,我们可以把镜像想象成类,把容器想象成类经过实例化后的对象,这样就非常好理解镜像和容器的关系了。
Docker镜像 Docker的镜像概念类似于虚拟机里的镜像,是一个只读的模板,一个独立的文件系统,包括运行容器所需的数据,可以用来创建新的容器。 例如:一个镜像可以包含一个完整的 ubuntu 操作系统环境,里面仅安装了mysql或用户需要的其它应用程序。 Docker的镜像实际上由一层一层的文件系统组成,这种层级的文件系统被称为UnionFS。镜像可以基于Dockerfile构建,Dockerfile是一个描述文件,里面包含若干条命令,每条命令都会对基础文件系统创建新的层次结构。 Docker 提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。 注:镜像是只读的,可以理解为静态文件。 Docker容器 Docker 利用容器来运行应用。 Docker容器是由Docker镜像创建的运行实例。Docker容器类似虚拟机,可以支持的操作包括启动,停止,删除等。每个容器间是相互隔离的,容器中会运行特定的应用,包含特定应用的代码及所需的依赖文件。 可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。 注:相对于镜像来说容器是动态的,容器在启动的时候创建一层可写层作为最上层。 Docker仓库 如果你使用过git和github就很容易理解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 docker是ubuntu 开发集成最好稳定
查询系统版本
三)安装docker
https://blog.csdn.net/horizon_zpy/article/details/88383263
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;
以上是关于docker入门的主要内容,如果未能解决你的问题,请参考以下文章
Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段
markdown [Docker] Docker片段列表和命令#linux #docker #snippets