docker的出现为环境配置,项目部署提供了空前便捷。相较于虚拟机的臃肿,运行缓慢,docker既轻量有快捷,成本开销都更小
¶docker install
下载适配当前liunx版本的docker
sudo wget -q0- https://get.docker.com | sh
docker需要使用root用户运行,可以通过将用户添加到"docker" group,注销并重新登录使其生效
sudo usermod -aG docker [USER]
¶命令
¶image 操作命令
查找image(支持通配符)
docker search [IMAGE]
获取 image
docker pull [IMAGE]
查看 image(支持通配符)
docker images
删除 image
docker rmi [IMAGE]
查看image 历史(创建过程)
docker history ubuntu:latest
查看详细信息
docker inspect ubuntu:latest
添加镜像标签(指向同一个镜像文件,只是别名不同)
docker tag ubuntu:latest myubuntu:latest
创建 image
docker build [IMAGE]
¶container 操作命令
启动容器(通过本地镜像创建容器并启动,本地没有远端拉取)
docker run [IMAGE]
终端启动容器
docker run -it -p 80:80 [IMAGE] \bin\bash
守护进程启动容器
docker run --name webserver -d -p 80:80 [IMAGE]
- -d 守护进程后台启动
- –name 容器名
- -p 端口映射
容器关闭时清理容器的匿名data volumes
docker run --rm -it [IMAGE]
通过交互终端打开容器(一般用于打开守护进程在后端启动的容器)
docker exec -it webserver bash
查看容器修改(会有大量无关内容)
docker diff webserver
清理所有处于终止状态的容器
docker container prune
查看当前运行的 container(options -a 所有容)
docker ps
关闭容器(start 启动 restart 重启)
docker stop [IMAGE]
删除容器(需要关闭)
docker rm [IMAGE]
¶关于镜像删除
删除行为分为两类,一类是 Untagged,另一类是 Deleted。当一个镜像有多个标签时,删除只是删除该镜像的的某一个标签(Untagged),当只有一个标签就会彻底删除(Deleted)。
当有该镜像创建的容器存在时,镜像无法删除,需要删除容器,docker rmi -f [IMAGE]
强制删除镜像 (不推荐)
¶关于–rm操作
在Docker容器退出时,默认容器内部的文件系统仍然被保留,以方便调试并保留用户数据。
但是,对于foreground容器,由于其只是在开发调试过程中短期运行,其用户数据并无保留的必要,因而可以在容器启动时设置–rm选项,这样在容器退出时就能够自动清理容器内部的文件系统。示例如下:
docker run --rm [IMAGE]
显然,–rm选项不能与-d同时使用,即只能自动清理foreground容器,不能自动清理detached容器
注意,–rm选项也会清理容器的匿名data volumes,容器也会一并删除。
¶创建镜像
- 从已经创建的容器中更新镜像,commit提交这个镜像
- 基于本地模板导入
- 使用 Dockerfile指令来创建一个新的镜像
¶基于已有容器创建
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
docker commit --author 'darren' --message '修改首页' dad9a2486a8b nginx:darr
黑盒操作,虽然可以diff命令查看,但维护麻烦,会使得镜像臃肿。
¶导入创建
镜像导出
docker save [IMAGE ID] > save.tar
镜像的导入
docker load < save.tar
容器导出(导出容器的快照)
docker export [IMAGE ID] > export.tar
容器导入
cat export.tar | docker import - [IMAGE NAME:TAG]
镜像导入和容器导入的区别:
- 容器导入 是将当前容器 变成一个新的镜像,容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态)
- 镜像导入 是复制的过程,体积更大
save 和 export区别:
- save 保存镜像所有的信息-包含历史
- export 只导出当前的信息
¶Dockerfile
在 Dockerfile 文件所在目录执行:docker build -t [IMAGE TAG] .
镜像构建上下文(Context)
当构建的时候,用户会指定构建镜像上下文的路径,docker build 命令得知这个路径后,会将路径下的所有内容打包,然后上传给 Docker 引擎。这样 Docker引擎收到这个上下文包后,展开就会获得构建镜像所需的一切文件。所需文件需存放在dockerfile同级目录。
指令:
FROM
RUN
COPY
ADD
CMD
ENTRYPOINT
ENV
ARG
VOLUME
EXPOSE
WORKERDIR
USER
HEALTHCHECK
ONBUILD
ADD COPY 区别:
- ADD可以将远端的文件复制进容器
- ADD可以在复制压缩包进容器时会自动解压
CMD ENTRYPOINT HEALTHCHECK 只能有一个,输入多个最后一个生效
CMD ENTRYPOINT 区别
run container 后面带的参数 会将 CMD 指令覆盖,但是不能覆盖ENTRYPOINT指令,会变成ENTRYPOINT的参数添加。
docker run -it --entrypoint=[指令] [IMAGE]
就可以覆盖ENTRYPOINT指令
对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。守护进程一般在系统启动时开始运行,除非强行终止,否则直到系统关机都保持运行,因此会以守护进程的方式在后端启动服务。
Docker 容器通过虚拟网桥进行连接