- Published on
Docker核心技术与企业级应用实战指南
- Authors
- Name
- Liant
介绍
Docker是什么
出现的原因
- 虚拟机占用资源特别大 启动慢
- 传统的交换模式:只给程序,不给环境
- 开发和运维之间的鸿沟
- 减少运维的工作量
设计理念
- 解决了什么问题:运行环境和配置的问题,方便持续集成,有助于整体发布
能干什么
企业级:可以作为作为企业级别的容器技术
开发和运维
- 对开发和运维比较简单
docker与传统虚拟机之间的差异
- 虚拟机:虚拟了整套环境
- 资源占用多,启动慢
- docker轻量:没有Hypervisor和操作系统,只有docker引擎
获取
英文官网:www.docker.com
文档地址:https://docs.docker.com/get-started/
中文官网:www.docker-cn.com
仓库
hub.docker.com
架构
- https://www.cnblogs.com/CloudMan6/p/6763789.html
- client
- docker服务器 (docker 守护进程)
- docker镜像
- docker容器 镜像运行的实例
- 仓库 存放镜像的仓库,包含共有和私有
- 运行过程
- 当client 执行命令docker run nginx时,client发送socket消息给docker守护进程,
- docker守护进程先在本地看下有没有这个镜像存在,如果不存在就去远程仓库下载,然后保存到本地;
- 然后通过 container run命令把这个镜像做成一个容器然后运行起来
安装
- 参考官方文档
- 配置仓库地址
组成
- 镜像
- 容器
- 仓库
命令
帮助命令
- docker version
- docker info
- docker --help
镜像命令
- docker images
-a 列出所有镜像
-q 只显示镜像ID
--digests:显示摘要信息
--no-trunc:不截断输出,显示完整的镜像ID
docker search 镜像名
docker rmi 删除镜像
- 删除单个
docker rmi 镜像id/镜像名称
- 删除多个镜像
docker rmi id1 id2
- 删除全部镜像
docker rmi ${docker images -qa}
- 删除单个
docker 运行命令
新建并运行
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS --name为容器指定新名称
-d 后台运行
-i交换方式运行
-t伪终端
-p端口映射
-P随机端口映射
列出所有运行的容器
docker ps [options]
-a
:所有正在运行和运行过的-l
: 显示最近创建的容器-n
:显示最近创建的n个容器-q
:只显示容器id
退出容器
exit / ctrl + d
:退出并停止容器ctrl+p+q
:退出不停止容器
启动容器
docker start 容器id/名称
重启容器
docker restart 容器id/名称
停止容器
docker stop 容器id/名称
强制停止所有容器
docker kill 容器id/名称
删除容器
docker rm 容器id/名称
删除所有容器
docker rm -f $(docker ps -aq)
docker ps -a -q | xargs docker rm
以后台方式运行容器
docker run -d
容器
进入正在运行的容器,并以前台方式运行
docker exec -t
容器id/名称bashshell
产生新的进程docker attach
容器id/名称 进入容器不产生新的进程
容器
<->拷贝文件<->
主机docker copy 容器id/名称:容器中路径 主机路径
docker copy 主机路径 容器id/名称:容器中路径
镜像
是什么
- UnionFS(联合文件系统)
- 镜像加载原理
- 分层镜像
docker commit 镜像提交
docker commit -m="" -a="作者" 容器id 目标镜像名称:[标签名]
网络
单机
- Bridge Network
- Host Network
- None Network
多机
- Overlay Network
Dockerfile关键字
FROM
基础镜像,当前镜像是基于那个镜像
MAINTAINER
镜像维护者的姓名和邮箱地址
RUN
镜像构建时需要运行的命令
WORKDIR
容器创建后,默认在那个目录
EXPOSE
当前容器对外暴露的接口
ENV
用来构建镜像时设置环境变量
ADD
将宿主机目录下的文件copy到镜像且ADD命令会自动解压压缩包
COPY
VOLUME
容器数据卷,用来保存和持久化
CMD
- 指定容器启动时需要运行的命令
- 多条CMD命令,只有最后一条生效
- CMD命令会被docker run之后的参数替换
ENTRYPOINT
- 指定容器启动过程中需要运行的命令
- 把docker run命令的参数追加到后面
ONBUILD
数据容器卷
日志系统存储(典型场景) 使用 docker run -it --name n1 --volumes-from n0 centos