什么是Docker?docker就是一个可以放东西的容器,那是什么东西?可以是redis、nginx、mysql。简而言之,您可以在系统上安装的所有东西都可以在dokcer中安装。Manji:你为什么要那样做?集中管理,简单易用,安装更方便,无需去各个目录寻找配置文件,启动文件等。“在我们的测试环境下明明是好的?”,这句话是不是很眼熟?(坏笑)比如我们代码需要的组件,redis在测试环境下有很多配置需要修改,但是如果线上环境少了一个甚至版本不一致,那么就会出现不可预知的情况上线时的问题。然后用docker,把组件、环境、配置都封装成一个镜像,交给运维就可以避免很多次脸红脖子粗的情况。封装后的镜像可以运行在不同的系统中。封装和到处运行的思想更符合Java。名词解释:镜像:类似于一个安装包。容器:一个应用对应一个容器。比如我装了一个redis,一个nginx,那么分别有两个容器有redis和nginx。用java思维理解:镜像是对象,容器是实例installdockeryum-yinstalldockerstartdockersystemctlstartdockerviewdockerstatussystemctlstatusdockerinstallnginx我们先尝试安装nginx,第一步是搜索仓库中的nginxmirrordocker搜索nginx,发现列表很多,所以我们需要的是第一个,往下拉(默认最新版本)需要在具体版本后面加冒号和版本号。dockerpullnginx这时候可以使用dockerimages命令查看下载的镜像。现在我们有了镜像,我们来安装它dockerrun-p80:80-d--namenginxnginx安装成功!正确的!你没看错。解释一下上面命令的参数,-p后面是端口,冒号前的端口是宿主机的端口,后面是容器中nginx的端口-d后台运行--name是容器启动后的别名,最后的nginx是镜像名。dockerps查看正在运行的容器,dockerps-a查看所有容器。Manji:如果我想修改nginx的配置怎么办?可以通过dockerexec-it[CONTAINERID]bash进入容器找到并修改容器数据卷,exit命令退出容器。也可以在启动时使用-v参数挂载目录,将容器与宿主机指定目录进行映射。只需要在宿主机上指定目录操作即可,不需要进入容器。可以使用多个-v。我首先在主机上创建了一个新的目录和配置文件。宿主机nginx配置文件:/app/nginx/conf/nginx.conf容器nginx配置文件:/etc/nginx/nginx.conf宿主机redis日志目录:/app/nginx/logs容器redis日志目录:/var/log/nginxdocker运行-d-p8082:80--namenginx3-v/app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf-v/app/nginx/logs:/var/log/nginxnginx如果安装redis也是这么简单,两条命令就可以完成安装dockerpullredisdockerrun-p6379:6379-d--nameredis-6379redis当你用dockerexec-it[CONTAINERID]bash进入容器时,你会发现有一个精简版的linux。做镜像很好:我们可以自己做镜像吗?答案是肯定的,我们以运行jar包为例。比如我写了一个spring-boot项目,打包成jar包:datashare-0.0.1-SNAPSHOT.jar,请问怎么打包呢?先是这个,然后是那个,最后又是这个。曼吉:怎么跑?java-jardatashare-0.0.1-SNAPSHOT.jar&?nohupjava-jardatashare-0.0.1-SNAPSHOT.jar>info.log&?nonono我想用docker部署。使用docker部署,首先需要有一个镜像。您只需要一个Dockerfile即可制作镜像。以下是Dockerfile的内容:#openjdkbase镜像是我拉到本地的,需要jdk环境才能运行Jar。openjdk#?作者签名MAINTAINERMSHU#?简化jar的名称路径COPYdatashare-0.0.1-SNAPSHOT.jardatashare.jar#?执行java-jar命令CMDjava-jardatashare.jar#?设置外部端口to8089EXPOSE8089RunningJar需要jdk环境,所以我Docker提前pullopenjdk到本地。把我们新建的Dockerfile和datashare-0.0.1-SNAPSHOT.jar放在一起,这个目录下应该没有其他文件了。运行dockerbuild-tdatashare。开始生产。datashare代表创建镜像的名称,.表示使用当前目录的Dockerfile。图像准备好并将其放入容器中。dockerrun-p8089:8089-d--namedatasharedatashare成功!Manji:如果我想复制这个镜像,它可以在我同事的电脑上运行吗?满足你!dockersave-odatashare.imgdatashare在当前目录中导出一个名为datashare.img的图像。然后复制到你同事的电脑上,运行dockerload-idatashare.img导入。镜像加速官方仓库在国外,下载慢。使用以下方法可以使它更快!与maven相同。centos7以上:修改/etc/docker/daemon.json文件,如果没有就新建一个!content:{"registry-mirrors":["http://hub-mirror.c.163.com"]}别忘了重启docker!systemctlrestartdockercollection命令dockerpull[nginx]下载容器dockerps查看运行containerdockerps-a查看所有容器dockerexec-t-i[id]bash根据id进入对应的软件目录dockerstart[id]启动某个容器dockerstop[id]停止某个容器dockerrestart[id]重启容器dockerimages查看所有已安装的镜像dockerinspect[id]查看已启动容器的挂载信息dockerrm[id]删除容器dockerrmi[imageid]删除镜像dockerlogs-f-t--tail200容器ID查看containerlogsystemctlenabledockersetbootservicedockerstartstartdockerserviceusermod-Gdocker[username]addpermissiontospecifieduserdockercp[id]:Directory/hostdirectory将容器某路径下的文件(文件夹)复制到宿主机某个路径下的文件(文件夹)dockercommit-m="Descriptioninformationsubmitted"-a="Author"[原始容器id:[标签名称]]将容器封装成一个镜像dockerlogs-f[镜像id]查看容器日志。dockerrun后面还有很多参数,我也不是很了解。你可以自己搜索。
