Docker(rush_peng)
一.Docker 介绍
1.有一篇文章讲的不错。建议看看
https://blog.csdn.net/bjweimengshu/article/details/108067509
2.Docker 解决的问题
- 我本地运行没问题啊?
环境不一致。- 哪个哥们又写死循环了,怎么这么卡?
在多用户的操作系统下,会相互影响- 淘宝双十一,用户量暴增。
运维成本过高的问题- 学习一门技术,学习安装成本过高。
关于安装软件成本过高
3.Docker 的思想
- 集装箱:会将所有所需要的内容,放到不同的集装箱里,谁需要这些个环境,直接拿到这个集装箱就可以了。
- 标准化:
1.运输的标准化:Docker 有一个码头,所有的集装箱都放在了这个码头上,谁要需要这个环境,只要派大海疼去搬运这个集装箱就可以了。
2. 命名的标准化:Docker 提供了一系列的命令,帮助我们去获取集装箱等等的操作。
3.提供了 REST 的API:衍生出来很多的图像化界面: Rancher- 隔离
Docker在运行的时候,会在Linux的内核中,单独开辟出来一片空间,这片空间不会影响到其他的程序
Docker 的相关术语
- 注册中心(超级码头,上边放集装箱)
- 镜像 。(集装箱)
- 容器。(运行起来的集装箱)
二. Docker 的基本操作
2.1 Docker 的安装
- 下载 Docker 的依赖环境
- 设置 Docker 的国内镜像源
2.2 Docker的中央仓库
- Docker 的官方中央仓库,这个仓库最全,但是网速很慢,
- 网易蜂巢 ,但是需要注册,还有一个就是 http://hub.daocloud.io/(这个用的比较多)
- 使用公司内部的私有服务器
2.3 镜像的操作:
1.拉取镜像到本地
docker pull + 在 daocloud.io (也就是上边的地址) 复制过来的镜像地址
2.查看全部镜像
docker images (一定要是复数)
3.删除本地镜像:
docker rmi + 镜像的唯一标识符ID
(因为删除,所以是 remov image)
有这个命令,说明,现在镜像正在使用,不能停止。
2.4镜像的导入导出
一般情况下,镜像都是联网下载的,但是有情况,可以把别人下载好的镜像,打包后导出,然后再你的电脑上再导入。
1 镜像的导出
docker save -o +导出镜像的路径 +镜像id
2. 镜像的导入
docker load -i 镜像文件
3.修改导入的镜像名称
docker tag 镜像Id 镜像名称:版本号
2.5容器的操作
运行容器 (简单操作)
docker run 镜像的标识 | 镜像名称 [ : tag]
完整的操作
docker run -d -p 宿主机端口号:容器端口号。。–name 容器的名称 | 镜像名称 [:tag]
-d 表示后台运行容器(如果关掉界面,那么也就停止了)
-p 宿主机端口号:容器端口号。。为了映射当前 linux 的端口和容器端口
关于如何查看虚拟机的端口号https://zhidao.baidu.com/question/1707918041441638300.html
如何访问虚拟机:
https://blog.csdn.net/qq_33624558/article/details/83276844
查看正在运行的 docker
docker ps [-qa]
-a: 查看全部的容器,包括没有运行的
-q:只显示 Ip 地址
查看容器的日志
docker logs -f 容器 Id
-f: 可以滚动的查看 日志的最后几行。
进入容器的内部
docker exec -it + 容器的Id + bash
exec 全称是 execute
一般不推荐在镜像内部进行直接操作
删除容器
删除容器之前要先停止容器
#停止容器
docker stop 容器ID
#删除容器
cocker rm +容器ID
启动容器
docker start 容器 ID
3.Docker 应用:
3.1Docke安装:
菜鸟教程,可以一键安装:
3.2常用的命令
docker info
通过命令,将宿主机的内容复制到容器的内部
docker cp 文件名 容器Id :容器内部的路径
3.3数据卷
为了部署SSM的工程,需要使用 cp 命令将宿主机内的 ssm.war 文件复制到容器内部。但是一般不推荐使用这种在容器内部操作的方法
数据卷:将宿主机的一个目录映射到容器的一个目录中。
可以在宿主机中操作目录中的内容,那么容器内部映射的文件,也会跟着一起改变。
1.创建数据卷
docker volume create +数据卷名称
创建数据卷后,会默认存放在一个目录下: / var / lib / docker / volumes / 数据卷名称 / _data
2.查看数据卷的详细信息
docker volume inspect +数据卷名称
3.查看所有的数据卷
docker volume ls
4删除数据卷
docker volume rm +数据卷名称
5.应用数据卷
- 当你映射的数据卷如果不存在的话,Docker 会帮你自动创建的。(会生成在上边默认的路径里)
docker run -v 数据卷名称:容器内部路径 镜像id
- 直接指定一个路径作为数据卷的存放位置。
docker run -v 路径:容器内部的路径 镜像id
例如(没跑通)
docker run -d -p 8080:8080 --name ssm_tomcat -v /opt/volume_ssm_tomcat :/usr /local / tomcat /webapps b8
4.Docker 自定义镜像
中央仓库上的镜像,也是 docker 的用户自己传上去的
1.创建一个 Dockerfile 文件,并且指定自定义镜像信息。
Dockerfile 文件常用的内容
from: 指定当前自定义文件的依赖环境
copy: 将相对路径下的内容复制到自定义的镜像中
workdir: 声明镜像的默认工作目录
cmd: 需要执行的命令 (在 workdir 下执行的,cmd可以写多的,但是最后只最后一个为准)
2.将准备好的Dockerfile 和相应的文件,拖拽到 Linux 操作系统中,通过 Docker 的命令制作镜像
docker build -t 镜像名称:[tag] .
最后那个 . 是指的在当前目录下。
.
5.Docker-Compose
之前运行一个镜像,需要添加大量的参数,
- 可以通过 Docker-Compose 编写这些个参数。
- Docker-Compose 可以帮助我们批量的管理容器。
- 只需要通过一个 docker-compose.yml 文件去维护即可。
用这个的话,需要先下载 Docker-compose
6. Docker CI.CD
引言:
在项目部署中:
- 将项目通过maven 进行编译大包
- 将文件上传到指定的 tomcat 的目录里
- 通过Dockerfile 将tomcat 和war 包转成一个镜像,由 DockerCompose 去运行容器
项目更新了:
将上述流程再次从头到尾的执行一次
三.Docker 与Asp.net core
1. 基础指令:
1.查看 docker 信息
docker info
2.查看 image 列表
docker image ls
3.查看所有的 container
docker container ls --all
某一些具体的 docker 镜像,可以从 docker hub 上查看说明书
4.周期的声明周期
使用了 stop的镜像,可以再次拉取使用:
5.更换国内镜像
自行百度
2.Volum
volume的作用是把代码和镜像连接起来
1.先看Docker的分层文件系统
docker 实际上就是一层一层的堆叠起来的;
比如下边的图示:DELTA文件就是这样拉取的一层一层的文件。
你在一个镜像上,可以建立多个容器
镜像里面的层是只读的,可以在镜像层上再加一层可读写的层,就成了容器
但是这种情况下,如果把镜像给删除了,那么里面的东西也被删除了,这是不可取的
2.Volume 卷
如何把源代码装入容器里:
- 在制作镜像的时候,直接把源代码嵌入;(不考虑这个)
- 把源代码挂载到容器的 读写层
volume 是容器里的一个特别的种类的目录,通常叫做数据volume ,顾名思义,里面可以放置 各种类型的数据,例如代码,日志文件,数据文件等等。
volume 可以在容器之间被共享和复用,可以让一个容器对多个volume读写,也可以让多个容器对一个 volume 读写。
对镜像的更新并不会影响 volume
对 volume 是被持久化的,即使容器被删除了,他依然还在
3.具体操作
查看当前的目录:
${pwd}
查看某个具体的镜像内容
docker inspect
参考文献
[1] https://www.bilibili.com/video/BV1sK4y1s7Cj/?p=3
[2] https://www.bilibili.com/video/BV1ib411w7L7/