Docker镜像
镜像是基于联合文件系统的一种层式的结构,由一系列指令一步一步构建出来。用户基于镜像来运行自己的容器。
镜像是Docker生命周期中的构建或打包阶段。
一个镜像可以有多个标签。
Docker容器
容器是基于镜像启动起来的,容器中可以运行一个或多个进程。
容器是启动或执行阶段。
一个容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。
Docker常用命令
docker run -p 80:80 --name 容器名 -it 容器镜像:基于xx镜像启动一个容器 ,以交互的方式启动。-p参数将容器的80端口绑定到主机的80端口上。
docker ps: 列出所有运行中的容器
docker ps -a: 列出所有的容器
docker exec -it 容器名 bash: 在容器内运行交互命令
docker logs -f 容器名:跟踪容器的日志
docker rm -f 容器名 :删除运行中的Docker容器
docker rm docker ps -a -q
: 删除所有的容器
docker images: 列出所有的镜像
docker login: 登录到Docker Hub
docker build --no-cache -t="xx/xx" . :忽略Dockerfile的构建缓存
docker history 镜像名:可看到构建镜像的每一层,以及创建这些层的Dockerfile指令。
构建镜像
一般基于一个已有的基础镜像来构建新镜像。推荐使用Dockerfile构建镜像,Dockerfile由一系列指令和参数组成。每条指令,如FROM,都必须为大写字母,且后面要跟随一个参数FROM ubuntu:14.04。RUN指令用来运行一条指令。
Dockerfile中的指令会按顺序从上到下执行,每条指令都会创建一个新的镜像层并对镜像进行提交。
Docker大体上按照如下流程执行Dockerfile中的指令
- Docker从基础镜像运行一个容器
- 执行一条指令,对容器做出修改
- 执行类似docker commit的操作,提交一个新的镜像层
- Docker再基于刚提交的镜像运行一个新容器
- 执行Dockerfile中的下一条指令,直到所有指令都执行完毕
如果用户的Dockerfile由于某些原因(如某条指令失败了)没有正常结束,那么用户将得到一个可以使用的镜像,方便调试。
使用docker build命令来构建镜像,Dockerfile中的所有指令都会被执行并且提交,并且在该命令成功后返回一个新镜像。
写Dockerfile好的实践
- 创建短暂的container
短暂意味着container可以被停止和摧毁,用很小的构建和配置代价来重建和替换。 - 理解构建上下文
网友评论