Docker概述
Docker应用
- 部署环境复杂,非常费时费力
- 环境不能跨平台
- docker可以把环境打包成镜像,直接运行即可
- docker通过隔离机制,可以将服务器利用到极致
Docker的功能
虚拟机技术
容器化技术
DevOps(开发 + 运维)
应用更加快速的交付和部署
更便捷的升级和扩缩容
更加简单的系统运维
更加高效的计算资源利用
Docker安装
1.Docker基本组成
仓库:仓库就是存放镜像的地方
镜像:docker镜像就像一个模板,通过镜像可以创建多个容器
容器:容器可以独立运行一个或者多组应用(启动,停止,删除)
2.run工作流程
3.Docker工作原理
4.Docker与VM的区别
- Docker的抽象层比虚拟机少
- docker利用的是宿主机的内核,vm需要的是Guest OS(vm每次都要加载操作系统的内核)
Docker命令
1.帮助命令
1 | docker version |
2.镜像命令
(1)docker images查看本地主机上的镜像
1 | sudo docker images |
解析:
- REPOSITORY :镜像的仓库源
- TAG:镜像的标签
- IMAGE ID:镜像的id
- CREATED:镜像的创建时间
- SIZE:镜像大小
可选项:
- -a : 列出所有镜像
- -q:只显示镜像id
(2)docker search 搜索镜像
1 | NAME DESCRIPTION STARS OFFICIAL AUTOMATED |
可选项,可以过滤搜索结果:
–filter=STARS=3000 :搜索stars大于3000的镜像
(3)docker pull 拉取镜像:tag ,默认拉取最新版
(4)docker rmi 删除镜像名称/id
1 | 删除mysql镜像 |
3.容器命令
有了镜像我们才能创建容器
(1)新建镜像并启动:dokcer run [可选参数] image
容器内相当于一个新的虚拟环境
1 | docker run -it centos /bin/bash |
相关参数:
- –name = “Name” :容器名字,用于区分容器
- -d :后台方式运行
- -it : 使用交互方式运行,可进入容器查看内容(开启容器终端)
- -p:指定容器端口
(2)查看容器:docker ps
1 | docker ps #查看运行中的容器 |
相关参数:
- -a :查看所有容器(包括已终止的容器)
- -n = ? :显示最近创建的容器
- -q : 只显示容器的编号
(3)退出容器
1 | exit # 容器停止并退出 |
(4)删除容器
1 | docker rm 容器id # 删除指定的容器(不能删除运行中的容器,加-f强制删除) |
(5)启动和停止容器的操作
1 | docker start 容器id # 启动容器 |
4.操作命令
(1)后台启动命令
docker容器使用后台运行时(docker run -d centos
),必须要有一个前台进程,如果docker发现自己没有应用了,就会自动停止
(2)查看日志命令
查看容器运行的日志
1 | docker logs -f -t --tail 容器 |
(3)查看容器进程信息
1 | docker top 容器id |
(4)查看镜像元数据
1 | docker inspect 容器id |
(5)进入当前正在运行的容器
1 | 我们通常容器都是使用后台方式运行的,需要进入容器,修改一些配置 |
(6)从容器中拷贝文件到主机上
1 | docker cp 2e18c3e0375a:/home/test.py /home/autovy/桌面 |
拷贝是一个手动过程,从封闭的容器中拿到需要留存的数据,而使用数据卷
则可以实现自动同步
Docker镜像
推荐文章:docker镜像讲解
1.Portainer可视化工具
2.镜像简介
- 镜像就是一种轻量级,可执行的独立软件包,用来打包软件运行环境和基于环境开会的软件(包括代码,运行时,库,环境变量,配置文件)
- 镜像来源:
- 从远程仓库下载
- 自己制作的镜像DockerFile
3.镜像加载原理
(1)联合文件系统(UnionFS)
镜像和容器不同,容器是彼此独立的,而容器是分层叠加的,可以共享相同的底层文件和目录
(2)镜像加载原理
共享底层资源
4.分层理解
基于Ubuntu Linux 16.04创建一个新的镜像,这就是新镜像的第一层;如果在该镜像中添加Python包,就会在基础镜像层之上创建第二个镜像层;如果继续添加一个安全补丁,就会创建第三个镜像层。该镜像当前已经包含3个镜像层
docker镜像默认只读,当容器启动时,一个新的可写层被加载到镜像顶部
这一层即为容器层,容器之下称为镜像层
5.commit镜像
提交一个新的镜像
1 | docker commit 提交容器成为一个新的副本 |
容器数据卷
1.数据卷原理
容器之间有一个数据共享技术,Docker容器中产生的数据,同步到本地(从而实现数据可持久化,数据同步操作,数据存储在本地不会随着容器删除而丢失)
其本质是将容器内的目录挂载到主机上
2.数据卷使用
(1)使用命令挂载 -v
1 | docker run -it -v 主机目录地址:容器目录地址 |
- 主机和容器没有对应目录时会自动创建目录
- 通过docker inspect 可以查看到挂载信息
- 挂载双方是双向同步关系,他们的文件内容无论哪一方更改,都会保持同步
- 修改文件时,只需要在本地修改即可,不需要进入容器
(2)具名挂载和匿名挂载
除了上文中的指定路径挂载,我们也可以使用具名挂载和匿名挂载
匿名挂载:-v :容器目录地址
具名挂载:-v 卷名:容器目录地址
1 | 匿名挂载 |
所有的docker容器内的卷默认放在本地主机的/var/lib/docker/volumes下
(3)挂载权限
1 | 可以通过 -v 容器路径:ro,rw改变读写权限 |
3.数据卷容器
容器间也可以进行挂载从而实现数据同步,多个子容器的数据可以挂载到一个父容器中,这个父容器就是数据卷容器
–volumes-from即可以让docker3挂载到docker1上
1 | docker run -it --name docker3 --volumes-from docker1 5ce91af318b3 /bin/bash |
容器之间的配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止
DockerFile
参考文章:DokcerFile命令详解
1.DockerFile简介
DockerFile是构建docker镜像的构建文件,即命令脚本。通过这个脚本我们可以生成一个镜像。
2.DockerFile构建流程
(1)DockerFile内容示例
1 | FROM centos |
(2)通过DockerFile文件构建镜像
1 | docker build -f dockerfile -t test/centos . |
build命令, -f 打开dockerfile文件的路径,-t test/centos命名容器,.即为生成路径
(3)用自己的镜像创建容器
1 | docker run -it 5ce91af318b3 /bin/bash |
(4)docker push 发布镜像(开源进行)
3.DockerFile指令详解
(图中最后一项应为CMD指令此处更正)
补充项:
CMD:指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT:指定这个容器启动时要运行的命令,可以追加命令
COPY:类似于ADD,将我们文件拷贝到镜像中
ENV:构建的时候设置环境变量
4.创建自己的DockerFile
1 | FROM centos |
通过docker history mycentos:0.1
命令可以查看构建镜像的过程
��过程