共计 2514 个字符,预计需要花费 7 分钟才能阅读完成。
What is Docker?
docker 是一个可以放东西的容器,那东西是什么?可以是 redis、nginx、mysql。总之你能在系统上安装的都可以在 dokcer 里面安装。
蛮吉:为什么这么做?
集中管理,使用方便,安装更方便,不用到各各目录上去找配置文件啊,启动文件之类的。
名词解释:
镜像 :类似于安装包。
容器:一个应用对应一个容器,比如,我安装一个 redis, 一个 nginx , 那么就是两个容器,分别装有 redis 和 nginx。
安装 nginx
我们先安装一个 nginx 试试,
第一步搜索一下仓库有没有 nginx 的镜像
docker search nginx
我们发现列出了很多,那么我们需要的是第一个,把它拉下来(默认最新版)需要特订版本后面加上冒号和版本号。
docker pull nginx
这时候可以使用 docker images
命令查看已经下载下来的镜像们。
有了镜像我们就安装吧
docker run -p 80:80 -d --name nginx nginx
安装成功!对!你没有看错。
我来解释一下上面那条命令的参数,
- -p 后面跟端口,冒号前面是宿主机的端口,后面是容器内 nginx 的端口
- -d 后台运行
- –name 启动后容器的别名
- 最后一个 nginx 是镜像的名称。
docker ps 可以查看正在运行的容器,dockers ps -a 查看所有容器。
蛮吉:如果我想修改 nginx 的配置怎么办?
可以使用 docker exec -it [CONTAINER ID] bash
进入容器里面找到并修改,exit
命令退出容器。
也可以在启动的时候使用-v
参数挂载目录,给容器和宿主机指定目录做个映射。只需要在宿主机指定目录操作,不需要进入容器。-v
可以使用多个。我先在主机新建好了目录和配置文件。
- 主机 nginx 配置文件:/app/nginx/conf/nginx.conf
- 容器 nginx 配置文件:/etc/nginx/nginx.conf
- 主机 redis 日志目录:/app/nginx/logs
- 容器 redis 日志目录:/var/log/nginx
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
制作镜像
蛮吉:那我们能不能自己制作镜像?
答案是肯定的,
我们就用运行 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 一个道理。
修改 /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 run 后面也有很多参数,我知道的也不多,各位自行搜索吧,我去看《魁拔》啦,真心话真好看!