使用Docker
的原因:
有时候团队开发急需一个本地环境,配置开发环境又快又稳定,那必须使用 Docker 的 image 镜像啦!
此处传送门 感谢大佬的提供的文档:
教程:Docker 入门到实践此教程适合 Mac OS
用户
常用命令
杀死所有正在运行的容器
$ docker kill $(docker ps -a -q)
删除所有已经停止的容器
$ docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像
$ docker rmi $(docker images -q -f dangling=true)
删除所有镜像
docker rmi $(docker images -q)
安装步骤
- 使用
Homebrew
安装$ brew cask install docker
- 在任务栏点击 Docker for mac 应用图标 -> Perferences… -> Daemon -> Registry mirrors。在列表中填写加速器地址
https://registry.docker-cn.com
。修改完成之后,点击 Apply & Restart 按钮,Docker 就会重启并应用配置的镜像地址了。 - 获取镜像 ,从仓库获取镜像
$ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
- 运行镜像:
$ docker run -it --rm \
docker run
:==启动镜像·==-it
:-i
交互式操作、-t
终端--rm
:容器退出随之删除
列出镜像
命令 | 作用 | 释义补充 |
---|---|---|
docker image ls | 列出下载至本地的镜像 | 由仓库名 、标签 、镜像ID 、创建时间 、占用空间 |
docker system df | 镜像体积 | 镜像展开后的本地磁盘空间实际大小 |
docker image ls -f dangling=true | 虚悬镜像 | 镜像既没有仓库名,也没有标签,均为 |
docker image prune | 镜像删除 | 删除悬虚镜像 |
docker image ls -a | 中间层镜像 | ls 显示顶层镜像,ls-a 中间层镜像罗列出来 |
docker image ls -q | 列出悬虚镜像ID | |
docker image ls –format “ID: Repository” | 自定义罗列镜像列表 | --format 后面追加其他想要参数 |
镜像修改
命令 | 作用 | 释义补充 |
---|---|---|
docker image rm [选项] <镜像1> [<镜像2> …] | 删除镜像 | 根据镜像ID 、长ID 、标签删除 相关容器需要 docker rm [id] 后 在删除镜像 |
docker diff | 修改内容的具体变化 | |
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]] | 将容器的存储层保存新的镜像 | 就是在原有镜像的基础上,再叠加上容器的存储层,并构成新的镜像。黑箱操作==不易常用== |
Dockerfile 的使用
定制镜像
- 新建文件
Dockerfile
写入修改内容FROM nginx //引用基础镜像 RUN buildDeps='gcc libc6-dev make' \ // 镜像的修改命令RUN执行 && 配合使用 达到多次改动 构建一层 && apt-get update \ // 支持 Shell 类`\` 转行 、`#` 注释 ... && apt-get purge -y --auto-remove $buildDeps // 最后一步避免臃肿需, 删除为了满足其他软件包的依赖而安装的,但现在不再需要的软件包。
- 构建镜像
在Dockerfile
文件所在目录执行:
$ docker build [选项] <上下文路径/URL/->
同时构建指定上下文(Context)路径,打包上传到 Docker 引擎
==注意==:一般来说,应该会将 Dockerfile 置于一个空目录下,或者项目根目录下。如果该目录下没有所需文件,那么应该把所需文件复制一份过来。如果目录下有些东西确实不希望构建时传给 Docker 引擎,那么可以用 .gitignore 一样的语法写一个 .dockerignore,该文件是用于剔除不需要作为上下文传递给 Docker 引擎的。
- 其他 dockr build 用法
- Git repo 进行构建
- 给定 tar 压缩包
- 标准输入读取 docker build - < Dockerfile
Dockerfile 指令详解
COPY 复制文件
格式:
- COPY <源路径>… <目标路径>
- COPY [“<源路径1>”,… “<目标路径>”]
和 RUN 指令一样,也有两种格式,一种类似于命令行,一种类似于函数调用。ADD高级复制
ADD 功能更复杂 ,所有的文件复制均使用 COPY 指令,仅在需要自动解压缩的场合使用
CMD 容器启动命令
CMD 指令的格式和 RUN 相似,也是两种格式:
- shell 格式:CMD <命令>
- exec 格式:CMD [“可执行文件”, “参数1”, “参数2”…]
- 参数列表格式:CMD [“参数1”, “参数2”…]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。
ENV 设置环境变量
格式有两种:
- ENV
- ENV
= = ..
下列指令可以支持环境变量展开: ADD
、COPY
、ENV
、EXPOSE
、LABEL
、USER
、WORKDIR
、VOLUME
、STOPSIGNAL
、ONBUILD
。
VOLUME 定义匿名卷
数据库类需要保存动态数据的应用,其数据库文件应该保存于卷(volume)中,避免忘记挂载卷提前设置匿名卷存储目录
VOLUME /data
WORKDIR 指定工作目录
工作目录,在各层的当前目录就被改为指定的目录,如该目录不存在,WORKDIR 会帮你建立目录。
==每一个 RUN 都是启动一个容器、执行命令、然后提交存储层文件变更==
需要改变以后各层的工作目录的位置,那么应该使用 WORKDIR 指令
HEALTHCHECK 健康检查
格式:
- HEALTHCHECK [选项] CMD
- <命令>:设置检查容器健康状况的命令
HEALTHCHECK NONE:如果基础镜像有健康检查指令,使用这行可以屏蔽掉其健康检查指令
可以判断容器死锁状态,或者死循环状态
镜像打包复用
- 下载镜像压缩包
- 定制打包
docker save
和 导入其他设备docker load
操作容器
启动容器
新建并启动
- 命令:
docker run
- 交互输入模式:
docker run -t -i ubuntu:14.04 /bin/bash
中-t
Docker 分配伪终端(pesudo-tty)绑定到容器标准输入-i
让容器的标准输入保持打开。
当利用 docker run
来创建容器时,Docker 在后台运行的标准操作包括:
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜
像层外面挂载一层可读写层 - 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
启动已终止容器
可以利用 docker container start
命令,直接将一个已经终止的容器启动运行。
守护态运行
后台运行
让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添加 -d 参数来实现
通过 docker container ls
命令来查看容器信息
要获取容器的输出信息,可以通过 docker container logs
命令
终止容器
使用 docker container stop
来终止一个运行中的容器。
进入容器
docker exec -it
镜像名 -i
标准输入保持打开 -t
分配伪终端 并且 exit 不会停止容器 docker attach
会停止
导入和导出
命令 | 作用 | |
---|---|---|
docker export 镜像id > file.tar |
导出容器快照到本地 | |
`cat ubuntu.tar | docker import` - 镜像名 | 导入容器快照为镜像,丢弃所有记录 |
docker load -i file.tar |
导入加载镜像到本地同时保持完整历史记录,占用空间大 |
删除容器
docker container rm
删除一个处于终止的容器docker container ls -a
查看所有处于终止的容器docker container prune
清理所有已终止容器
三剑客- Compose 项目
允许用户通过一个单独的 docker-compose.yml 模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)
重要概念:
服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
使用
文件组成
- Dockerfile
- docker-compose.yml
- web 文件
运行项目: docker-compose up
数据管理
数据卷
命令 | 作用 |
---|---|
docker volume create 卷名 | 创建数据卷 |
docker volume ls | 查看所有的 数据卷 |
docker volume inspect 卷名 | 数据卷详细信息 |
docker run –mount source=卷名 | 镜像挂载数据卷 |
docker inspect web | 主机内 查看 web 容器信息 |
docker volume rm 卷名 | 删除数据卷 |
docker volume prune | 删除所有无主卷 |