docker 能干什么?
- 简化配置
- 整合服务器
- 代码流水线管理
- 提高开发效率
- 隔离应用
- 调试能力Docker
- 多租户环境
- 快速部署
容器编排工具
- kubernetes 和 docker swarm
容器的前生今世
物理机 -> 虚拟机
容器解决了什么问题?
docker 进行了容器的打包,打包好的容器,可以运行在任务的环境,解决了开发和运维直接的矛盾。开发和运维之间建立了桥梁。
什么是容器?
对软件和其依赖的标准化打包,应用之间相互隔离(肯定没有虚拟机和物理机隔离的那么完全),共享同一个OS Kernel(同一个操作系统上),可以运行在很多主流的操作系统上。
Docker平台
- Docker 提供了一个平台,打包,运行的app的平台
- 把application和底层的基础建设隔离开来
Docker Engine
Docker 底层技术支持
- 资源控制
- 访问隔离
- 文件系统隔离
- 容器引擎(生命周期控制)
什么是Image
- 文件和meta data的集合
- 分层的,并且每一层都是可以添加改变的,成立一个新的Image
- 不同的image之前可以共享分层
- Image本身是只读的
查看Image
sudo docker image ls
获取Image
- build from Dockerfile
- pull docker 官网
Dockerfile
Dockerfile 分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
FROM
必须为第一个命令,指定基础镜像
LABEL
给镜像添加信息。使用docker inspect 可查看镜像的相关信息(类似注释)
RUN
构建镜像时执行的命令
RUN yum update && yum install -y vim \
python-dev #反斜线换行
RUN apt-get update && apt-get install -y perl
pwgen --no-install-recommends && rm -rf
/var/lib/apt/lists/* #注意清理cache
RUN /bin/bash -c 'source $HOME/.bashrc;echo $HOME'
WORKDIR
WORKDIR /test #如果没有会自动创建test目录
WORKDIR hexin
RUN pwd #输出结果应该是/test/hexin
ADD and COPY
- 将本地文件添加到容器中,identity, gzip, bzip2,xz,tar.gz,tgz等类型的文件将被添加tar -x命令,进行解压
- 同ADD,只是不会解压文件
ENV
设置环境变量
Shell 和 Exec 格式
- Dockerfile shell
FROM centos
ENV name Docker
ENTRYPOINT echo "hello $name"
- Dockerfile Exec
FROM centos
ENV name Docker
ENTRYPOINT ["/bin/echo", "hello $name"]
ENTRTYPOINT
设置容器启动时运行的命令
EXPOSE
暴露端口
CI 持续性集成