docker是项目开发部署相关工具容器,本文经过官网等资料阅读学习,简单介绍一些基本使用操做:html
为何会出现docker,常使用项目部署开发的人天然能理解,由于docker让服务部署更简单。java
下面说一下docker是什么,有什么用,等同与说明为何会出现docker这种技术。mysql
docker主要是让服务部署更高效。官网称之为容器 container,在项目开发中开发环境/测试环境/生产环境经过docker容器技术统一,减小环境偏差致使产生的错误,大大提升开发效率。linux
我认为docker是一种镜像服务技术,他将原来linux上运行的服务所有放在docker内运行,linux和docker之间有必定的物理隔离和软件版本隔离效果,而且能够复制多个程序而避免从新安装,很好的提升服务器项目部署相关的工做效率,且有增长服务器安全系数。nginx
(甚至介绍经过docker,可让linux上的程序也能在windows照常运行,目前还没试过)git
当你有一个服务开发部署好了,服务器是linux,里面安装了mysql,nginx,java-application,redis,jdk8;如今服务器要扩展,一样的服务部署到多台服务器,要怎么作才高效? 从新安装mysql,nginx,jdk8 ,而后各类配置端口密码各类参数,再从新启动每一个程序? 当你做为一个部署负责人的时候会以为重复繁琐,而且配置细节不少,不当心会出差错,这时候镜像技术docker就能使服务部署快速,并避免少犯错,这时候docker可真是个好东西。github
将原来的运行服务放在docker内运行,须要部署到其余服务器时,打包整个docker生成docker镜像,而后复制docker到新的linux服务器启动就行了,mysql,nginx,redis,等等不少东西不须要从新配置部署,只须要启动镜像docker和一些个性化的脚本。web
# 首先安装须要用到的工具 yum install -y yum-utils #安装工具 环境 #指定存储库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
查询可安装版本redis
yum list docker-ce --showduplicates | sort -r # 查看可用安装版本 ## 找出stable版本的,表示稳定版,本次选的是 ## docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable ## ## 安装 yum install docker-ce-18.09.0 docker-ce-cli-18.09.0 containerd.io ## 规则 3:18.09.0-3.el7 为版本信息,那么安装就是 ce-后面加上18.09.0 ## 取3:18.09.0-3.el7的':'和'-'之间的字符"18.09.0"
运行测试sql
docker run hello-world
拉取一个 redis 容器 并运行
# 拉取 redis容器 docker pull redis # 查看当前容器有哪些 docker images # 运行容器 -p 指定端口 docker run -p 3123:6379 --name some-redis -d redis redis-server --appendonly yes # 经过docker 启动redis服务 # 访问服务器3123端口时,映射到docker的6379端口 # docker服务名 some-redis # --appendonly yes redis持久化,容器关闭后再启动,redis内的数据不失效
docker运行后,咱们能够进入容器,上面是redis服务容器,能够理解为一个centos服务器里面启动了redis服务,咱们能够链接进去,而且里面是一个虚拟的linux环境
# 查看在运行的docker容器服务 docker -ps # exec 表示链接进入容器 32jd3h21正在运行的容器的id docker exec -it 32jd3h21 /bin/bash
当咱们定义好一个容器的环境,咱们能够将容器镜像上传的仓库,用于同一开发的环境,当其余人员也参与当前项目开发是,拉去同一个docker镜像容器,避免了项目代码运行环境差别。
docker hub 是专门用于docker镜像服务的仓库,咱们须要先注册账号,注册好后,建立仓库(和github相似)
让后咱们在服务器里面先登陆dockerhub帐号,而后将须要上传的镜像push到仓库
# 查看镜像 docker images a4sdfa2 为某个docker容器的id # 复制建立一个要提交到远程的镜像容器 docker commit -a "author" -m "description" a4sdfa2 web1 # 设置仓库 web1 本地容器名 username dockerhub用户名 rep-url 用户的仓库名 v2 标签名 docker tag web1 username/rep-url:v2 # 拉去上传的docker docker pull username/rep-url:web1 # 最后经过pull命令拉取镜像
通常项目开发,代码修改较频繁,容器主要是用于同一运行环境,不该含有具体开发项目代码。
给团队使用的docker容器应该是定义代码运行环境,而不是代码自己。每一个开发人员拉取了docker容器后,负责业务模块不一样,极可能要编写的代码也不同,容器放入代码反而多余;代码同步这快应该是经过git,svn等代码仓库工具完成更合适。