Docker 学习
1. Docker 基础概念
Docker 是基于 Go 语言实现的开源容器项目,诞生于2013年年初。Docker 加入了 Linux 基金会,遵循 Apache 2.0 协议,在 GitHub 开源。
在云时代,开发者创建的应用必须能方便的在网络上传播,需要脱离底层物理硬件的限制,同时需要任何时间、任何地点可获取。因此,开发者需要一种新型的分布式应用程序的部署实现快速分发。Docker 的容器打包可以满足这样的需求。
2. Docker 的安装和配置
Docker 官网:https://www.docker.com/,找到系统对应的 Docker 下载安装。
1. 为了避免每次执行 docker 命令需要使用特权身份,可以将当前用户加入安装中自动创建的 docker 用户组
2. 可以配置使用 systemd 管理 docker 服务
3. 支持自定义下载和上传镜像的并发数
4. Docker 默认镜像源为 DockerHub,Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
科大镜像:https://docker.mirrors.ustc.edu.cn/
网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com
5. 其他有用配置待补充。。。
3. Docker 镜像
# 拉取源端镜像
docker pull NAME[:TAG]
# NAME 是镜像仓库的名称, TAG 是镜像的标签(如果不指定,默认 latest)
# 查看镜像信息
docker images
# 为本地镜像添加标签
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
# 获取镜像详细信息
docker inspect NAME|ID [NAME|ID...]
# 查看镜像各层的历史内容
docker history NAME:TAG
# 搜索远端仓库中的镜像
docker search TERM
# 删除镜像
docker rmi IMAGE # IMAGE 可以是标签或 ID
# 当镜像有多个标签时,只是删除该标签,不会删除镜像文件
# 当使用镜像 ID 删除时,会先尝试删除所有指向该镜像的标签,然后删除该镜像文件本身。如果有容器使用该镜像,镜像文件是无法被删除的,正确做法是先删除对应的容器,然后再删
# 镜像导出到文件
docker save -o FILE IMAGE[:TAG]
# 载入镜像,导入镜像及其相关的元数据信息(包括标签等)
docker load --input FILE
# 上传镜像到仓库 Docker hub
docker push NAME[:TAG]
# 需要在 Docker hub 先创建一个仓库
4. Docker 容器
容器是镜像的一个运行实例。
# 创建一个容器 docker create -it IMAGE:TAG # -i 保持标准输入打开,默认为 false # -t 是否分配一个伪终端,默认为 false # -d 是否在后台运行容器,默认为否
# 启动容器
docker start CONTAINER
# 创建并启动容器 docker run -itd IMAGE:TAG # 后台运行的标准操作: # 检查本地是否存在指定的镜像,不存在就从共有仓库下载 # 利用镜像创建一个容器,并启动容器 # 分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层 # 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中 # 从网桥的地址池配置一个 IP 地址给容器 # 执行用户指定的应用程序 # 执行完毕后容器被自动终止
# 查看容器(运行或者非运行)信息 docker ps [-a]
# 终止容器 docker stop [-t|--time[=10]] [CONTAINER...]
#
docker attach CONTAINER
#
docker exec CONTAINER COMMAND [ARG...]
# 删除容器 docker rm CONTAINER # 该命令只能删除处于终止或退出状态的容器,不能删除运行中的容器
# 导出容器 docker export [-o|--output[=""]] CONTAINER
# 导入容器 docker import file|URL