Docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以放笔,书包可以放书,可以把hello word放在docker中,可以把网站放入docker中,可以把任何想得到的程序放在docker中。
docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器。
docker能解决什么问题?
一、系统环境不一致 开发:我本地没问题。运维:服务器没问题. 这个问题就变成了皮球.
如果一个应用要正常的启动起来需要什么?比如java web应用。 需要一个操作系统,操作系统之上要jdk,tomcat,我们的代码,配置文件。 操作系统的改变可能会导致我们的应用开不起来,比如我们调用了某些系统命令. jdk版本也可能导致程序的运行失败。比如class文件需要1.7编译,我们装了个1.6的jdk。 tomcat版本也能导致失败,比如旧的版本一些配置在新版本中不再支持。 代码的话就比如应用了C盘,D盘的一个文件,或者是用了系统的一些环境编码。 配置的话我们可能少了某个配置文件等等。 docker来了,它把操作系统,jdk,tomcat,代码,配置全部放到集装箱(镜像)里。再打包放到容器云上,从容器云给我们送到服务器上,在我的机器上怎么运行,在别的机器上也怎么运行。不会有任何的问题.一句话就是docker解决了运行环境不一致所带来的问题。
二、内存占满导致程序运行错误 docker在启动的时候就限定好了,它最大使用的CPU硬盘,如果超过了,就会杀掉对应进程。不会出现以为别人的程序是死循环疯狂吃CPU,还是封装疯狂打日志把硬盘占满,还是内存泄漏,把内存占满,都不会导致我们的程序运行错误。
三、部署多服务器 一些电商系统,每逢节日的时候就会提前扩展服务器,过完节再把多余的节点下线,这就给运维带来了非常大的工作量,一到过节就在各个机器上部署各种各样的服务,我们启动程序需要java,tocmat等等,并且还可能起不来还要调试,这是非常恶心的工作,有了docker一切都变得美好了,只要点一下服务器就可以从10台变成100台甚至1000,1W台,都是分分钟的事情。 为什么会这么快呢?都是用标准的方式把我们的程序运过来,下载过来,再用标准的方式把它运行起来,就可以做到只要在每台机器上都执行一两条命令,就可以让程序正常跑起来,并且不用担心有问题。
二、 了解docker
2.2 容器的操作 1、运行容器
简单操作
docker run 镜像的标识|镜像名称[tag]
常用的参数
docker run -d -p 宿主机端口:容器端口 --name 容器名称 镜像的标识|镜像名称[tag]
-d: 代表后台运行容器
-p: 宿主机端口:容器端口: 为了映射当前Linux的端口和容器的端口
--name 容器名称: 指定容器的名称
2、查看正在运行的容器
查看正在运行的容器
docker ps [OPTIONS]
OPTIONS说明:
-a: 代表查看全部的容器,包括没有运行
-q: 只查看容器的标识
-f: 根据条件过滤显示的内容
--format: 指定返回值的模板文件
-l: 显示最近创建的容器
-n: 列出最近创建的n个容器
--no-trunc: 不截断输出
-s: 显示总的文件大小
3、查看容器的日志
查看容器的日志
docker logs -f 容器id
-f: 可以滚动查看日志的最后几行
4、进入容器内部
#进入到容器内部 docker exec -it 容器id bash
5、删除和停止容器
删除容器(删除容器前,需要先停止容器)
停止指定的容器
docker stop 容器id
删除指定容器
docker rm 镜像id
删除全部容器
docker rm $(docker ps -aq)
安装Docker 1.下载关于Docker的依赖环境
yum -y install yum-utils device-mapper-persistent-data lvm2 1 2.设置下载Docker的镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo3.安装Docker
yum makecache fast yum -y install docker-ce 4.启动Docker,并设置为开机自动启动,测试
#启动Docker服务 systemctl start docker
#设置开机自动启动 systemctl enable docker
#测试 docker run hello-world
基础命令 #启动docker systemctl start docker
#关闭docker systemctl stop docker
#重启docker systemctl restart docker
#查看docker 运行状态 systemctl status docker