docker 是一个能够放东西的容器,那东西是什么?能够是redis、nginx、mysql。总之你能在系统上安装的均可以在dokcer里面安装。java
蛮吉:为何这么作?
集中管理,使用方便,安装更方便,不用到各各目录上去找配置文件啊,启动文件之类的。mysql
“在咱们测试环境明明是好的啊?”,这句话是否是很熟悉?(坏笑)linux
好比咱们代码须要的组件,redis在测试环境有不少配置须要修改,可是在线上环境若是少了一个甚至版本不一致了,那么在上线的时候,都会出现不可预料的问题。nginx
那么有了docker 就能够把组件、环境、配置封装到一个镜像,交给运维就能够避免许屡次脸红脖子粗的事情了。
封装好的镜像就能够在不一样的系统中运行,这封装和处处运行的思想和Java比较一致。redis
名词解释:
镜像:相似于安装包。
容器:一个应用对应一个容器,好比,我安装一个redis,一个nginx ,那么就是两个容器,分别装有redis和nginx。
用java思想理解:镜像是对象,容器是实例spring
咱们先安装一个nginx试试,
第一步搜索一下仓库有没有nginx的镜像sql
docker search nginx
咱们发现列出了不少,那么咱们须要的是第一个,把它拉下来(默认最新版)须要特订版本后面加上冒号和版本号。docker
docker pull nginx
这时候可使用 docker images
命令查看已经下载下来的镜像们。json
有了镜像咱们就安装吧centos
docker run -p 80:80 -d --name nginx nginx
安装成功!对!你没有看错。
我来解释一下上面那条命令的参数,
docker ps 能够查看正在运行的容器,dockers ps -a 查看全部容器。
蛮吉:若是我想修改nginx 的配置怎么办?
docker exec -it [CONTAINER ID] bash
进入容器里面找到并修改,exit
命令退出容器。也能够在启动的时候使用-v
参数挂载目录,给容器和宿主机指定目录作个映射。只须要在宿主机指定目录操做,不须要进入容器。-v
可使用多个。
我先在主机新建好了目录和配置文件。
docker run -d -p 8082:80 --name nginx3 -v /app/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /app/nginx/logs:/var/log/nginx nginx
若是安装redis 也是那么简单,两条命令就能够完成安装
docker pull redis docker run -p 6379:6379 -d --name redis-6379 redis
当你 docker exec -it [CONTAINER ID] bash
进入容器后发现,原来里面是一个精简版的linux.
蛮吉:那咱们能不能本身制做镜像?
答案是确定的,
咱们就用运行jar包为例。
好比我写了一个spring-boot 的项目,把它打成jar包 :datashare-0.0.1-SNAPSHOT.jar
,
怎么打jar包?先这样,而后那样,最后再这样一下就行了。
蛮吉:怎么运行?
java -jar datashare-0.0.1-SNAPSHOT.jar &
?nohup java -jar datashare-0.0.1-SNAPSHOT.jar >info.log &
?
no no no
我要用docker 部署。
用docker 部署 就要先有镜像,制做镜像只须要一个Dockerfile文件就能够啦
如下是Dockerfile的内容:
# openjdk 基础镜像 是我pull到本地的,运行Jar 须要jdk 环境 FROM openjdk # ?做者签名 MAINTAINER MSHU # ?简化 jar 的名字路径 COPY datashare-0.0.1-SNAPSHOT.jar datashare.jar # ?执行 java -jar 命令 CMD java -jar datashare.jar # ?设置对外端口为 8089 EXPOSE 8089
运行Jar 须要jdk 环境,因此我提早docker pull openjdk
到本地了。
将咱们新建的 Dockerfile 和datashare-0.0.1-SNAPSHOT.jar
放一块儿,该目录不要有其余文件。
运行 docker build -t datashare .
开始制做。
datashare
表明制做的镜像名称,.
表明使用当前目录的 Dockerfile 。镜像作好了放入容器吧。docker run -p 8089:8089 -d --name datashare datashare
成功了!
蛮吉:若是我想把这个镜像拷贝出来,在我同事电脑运行行不行?
知足你!docker save -o datashare.img datashare
在当前目录导出名为 datashare.img 的镜像。
而后复制到你同事电脑上并运行docker load -i datashare.img
就导入了。
官方仓库在国外,下载缓慢,使用如下方法能够更快!和 maven 一个道理。
centos7以上:
修改 /etc/docker/daemon.json
文件,若是没有就新建 !
内容:
{ "registry-mirrors": ["http://hub-mirror.c.163.com"] }
重启docker不能忘 !
systemctl restart docker
docker pull [nginx] | 下载容器 |
docker ps | 查看正在运行的容器 |
docker ps -a | 查看全部容器 |
docker exec -t -i [id] bash | 根据id进入对应的软件目录 |
docker start [id] | 启动某个容器 |
docker stop [id] | 中止某个容器 |
docker restart [id] | 重启容器 |
docker images | 查看全部已安装的镜像 |
docker inspect [id] | 查看启动容器的挂载信息 |
docker rm [id] | 删除容器 |
docker rmi [镜像id] | 删除镜像 |
docker logs -f -t --tail 200 | 容器ID 查看容器日志 |
systemctl enable docker | 设置开机启动 |
service docker start | 启动docker服务 |
usermod -G docker [用户名] | 给指定用户添加权限 |
docker cp [id]:目录 /主机目录 | 复制容器某路径下的文件(夹)到主机某路径下的文件(夹) |
docker commit -m="提交的描述信息" -a="做者" [原容器id:[标签名]] | 将容器封装成镜像 |
docker run 后面也有不少参数,我知道的也很少,各位自行搜索吧,我去看《魁拔》啦,真心话真好看!