Docker
什么是Docker
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Docker的组成
- 镜像、容器、仓库
Docker的体系结构
- 客户端、RESTAPI、服务器(Docker守护进程)
Docker的执行流程
- Docker客户端
Docker容器和镜像
- 容器:容器是运行在主机上的沙盒进程,与该主机上运行的所有其他进程隔离。这种隔离利用了Linux中已经存在很长时间的内核名称空间和cgroup功能。Docker使这些功能变得易于使用。总之,容器:
- 是映像的可运行实例。您可以使用Docker API或CLI创建、启动、停止、移动或删除容器。
- 可以在本地机器、虚拟机上运行,也可以部署到云中。
- 是可移植的(并且可以在任何操作系统上运行)。
- 与其他容器隔离,并运行自己的软件、二进制文件、配置等。
- 镜像:镜像是文件,是只读的,提供了运行程序完整的软硬件资源,是应用程序的"集装箱
- 正在运行的容器使用一个隔离的文件系统。这个独立的文件系统由映像提供,映像必须包含运行应用程序所需的一切-所有依赖项、配置、脚本、二进制文件等。映像还包含容器的其他配置,如环境变量、要运行的默认命令和其他元数据。
Docker容器的生命周期
主要包含:Stopped、Running、Pause、Deleted四种状态,如下图
[图片]
Dockerfile和常用指令
Dockerfile是一个包含用于组合映像的命令的文本文档
Dockerfile执行的每一步都创建一个临时的镜像
FROM
MAINTAINER
LABEL
WORKDIR
ADD
COPY
ENV
RUN #包含Shell命令格式和Exec命令格式
# 使用Shell执行时,当前shell是父进程,生成一个子shell进程
# 在子shell中执行脚本。脚本执行完毕,退出子shell,回到当前shell.
# 使用Exec方式,会用Exec进程替换当前进程并且保持PID不变
# 执行完毕,直接退出,并不会退回之前的进程环境
CMD
EXPOSE
-
ENTRYPOINT启动命令
ENTRYPOINT(入口点)用于在容器启动时执行命令Dockerfile中只有最后一个ENTRYPOINT会被执行ENTRYPOINT["ps],推荐使用Exec格式 -
CMD默认命令
CMD用于设置默认执行的命令如Dockerfile中出现多个CMD则只有最后一个被执行如容器启动时附加指令,则CMD被忽略CMD[“ps”,”-ef"]#推荐使用Exec格式
Docker的/bin/bash有什么用
Docker /bin/bash可以帮助开发者进入一个Docker容器的命令行界面,以便进行调试、查看日志、执行命令等操作。当需要进行容器内部的操作时,使用/bin/bash命令可以启动一个交互式的终端会话,使得开发者可以像在本地终端一样操作容器。
Docker容器间的通信
- 单向通信
使用link
docker run -d --name web --link database tomcat
双向通信
- 构建网桥
- 连接网桥和容器
docker run -d --name web tomcat
docker run -d -it --name database centos /bin/bash
docker network ls
docker network create -d bridge [bridgeName]
docker network connect [bridgeName] web
docker network connect [bridgeName] database
docker exec -it [web cid] /bin/bash
docker exec -it [database cid] /bin/bash
[图片]
Docker间的数据共享
- 通过设置-v参数挂载宿主机目录
- 创建虚拟容器,通过–volumn-from共享容器内挂载点
Way 1
docker run --name t1 -v /usr/webapps:/usr/local/tomcat/webapps tomcat
Way 2
创建共享容器
docker create --name webpage -v /webapps:/tomcat/webapps tomcat /bin/true
共享容器挂载点
docker run --volumes-from webpage --name t1 -d tomcat
Docker-compose容器编排工具
- 单机多容器部署工具
- 通过yml文件定义多容器如何部署
- WIN/MAC默认提供Docker Compose,Linux需安装
常用的Docker命令
service docker start
docker pull [iname]
docker images
docker rm [cid]
docker rm -f [cid]
docker rmi [iid]
docker rmi -f [iid]
docker ps
docker build
docker run [iname]
docker start [cid]
docker exec [-it] [cid] [command]
exit
docker stop [cid]
docker create tomcat
docker pause [cid]
docker unpause [cid]
docker inspect [cid]
docker logs
#Docker网桥构建相关命令
docker network ls
docker network create -d bridge [bridgeName]
docker network connect [bridgeName] web
docker network connect [bridgeName] database
docker-compose up -d
docker-compose down