安装
- 官网安装app
- 命令行安装(但是没有图形界面app)
brew install docker
架构
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
- Docker 客户端(Client):Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
- Docker 主机(Host):一个物理或者虚拟的机器用于执行 Docker 守护进程和容器
配置镜像加速器
登录https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
创建账号,点击左上角找到容器镜像服务,选择镜像加速器,将加速器地址复制保存
打开docker,选择设置,选择docker engine,将加速器地址复制进去,输入完之后选择apply&restart
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://mnq9hehw.mirror.aliyuncs.com"
]
}
可以使用命令docker info
检查有没有配置成功
镜像相关命令
- 查看本地镜像:
docker images
- 搜索某个镜像:
docker search <image name>
, egdocker search redis
- 下载某个镜像:
docker pull <image name>
,egdocker pull redis
- 下载某个版本的镜像:
docker pull <REPOSITORY>:<version>
,具体支持的版本号需要去hub.docker.com网站查找 - 删除某个镜像:
docker rmi <image ID>
, image ID 可通过docker images
命令查看docker rmi <REPOSITORY>:<TAGS>
,两个不同版本的镜像的image ID相同,此时可以通过TAGS删除
- 查看所有镜像的ID:
docker images -q
- 删除所有镜像:
docker rmi `docker images -q`
容器相关命令
- 运行容器:
docker run -it --name=<name> <REPOSITORY>:<TAG> /bin/bash
, -i表示容器保持一致运行,-t表示给容器分配一个伪终端,<REPOSITORY>:<TAG>
表示运行某镜像,/bin/bash表示打开一个shell脚本docker run -id --name=<name> <REPOSITORY>:<TAG>
, -d表示后台运行容器
- 退出容器:
exit
,通过-it创建的容器一经退出就自动关闭,-d创建的容器不会自动关闭 - 查看容器:
docker ps -a
,-a表示查看所有历史运行容器,status为up表示正在运行 - 进入正在运行的容器内部:
docker exec -it <NAMES> /bin/bash
- 启动历史容器:
docker start <NAMES>
- 查看某个容器的信息:
docker inspect <NAMES>
- 停止正在运行的容器:
docker stop <NAMES>
- 删除容器:
docker rm <NAMES>
- 查看所有容器的ID:
docker ps -aq
- 删除所有容器:(正在运行的容器是不能被删除的)
docker rm `docker ps -aq`
容器数据卷
概念
- 数据卷是宿主机中的一个目录或文件
- 当容器目录和数据卷目录绑定后,对方的修改会立即同步
- 即使docker容器删除,宿主机中的数据卷仍然存在,只要再次挂载该数据卷,数据就可以再次恢复
- 一个数据卷可以被多个容器同时挂载,一个容器也可以挂载多个数据卷
作用
- 容器数据持久化
- 外部机器和容器间接通信
- 通过同一个数据卷挂载到两个容器上间接实现两个容器之间数据交换
配置数据卷
- 创建启动容器时,使用-v参数设置数据卷
- 目录必须是绝对路径
- 如果目录不存在,会自动创建
- 可以挂载多个数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件) \
-v 宿主机目录(文件):容器内目录(文件) \
-v 宿主机目录(文件):容器内目录(文件)...
// docker run -it --name=qjl \
-v /opt/project1/:/opt/project_container1 \
-v /opt/project2/:/opt/project_container2 \
mysql:5.0
数据卷容器
概念
如果docker内有两个容器c1、c2,使用容器数据卷进行容器间的数据交换的操作是使这两个容器均挂载到同一个数据卷上。
数据卷容器就是另一种办法:创建一个新的容器c3并挂载到数据卷上,再使c1、c2挂载到c3容器上,此时也就相当于c1、c2、c3挂载到同一个数据卷上了
配置
- 创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 -v /volume centos:7 /bin/bash
- 创建c1、c2容器,使用–volumes-from参数设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run -it --name=c2 --volumes-from c3 centos:7 /bin/bash