Docker 容器学习笔记系列:

前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令。

基本概念

镜像 Image

镜像是一些打包好的已有的环境,可以被用来启动和创建容器

容器 Container

容器是镜像的实例化

容器的UUID

UUID -- 通用唯一标识符(Universally Unique Identifier

容器有三种方式来进行标识:

  • 长UUID
  • 短UUID
  • Name

UUID 是 Docker daemon 产生的,在一台主机上是唯一的,在创建容器的时候可以通过 --name 来指定容器的名字,如果不指定会自动分配一个字符串名称。

通过 docker psdocker inspect 等命令可以查看到容器的标识信息

容器启动过程

  1. 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  2. 利用镜像创建并启动一个容器
  3. 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  4. 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
  5. 从地址池配置一个 ip 地址给容器
  6. 执行用户指定的应用程序
  7. 执行完毕后容器被终止

镜像

  • 查看 image 列表:
docker iamges
  • 下载镜像:
docker pull registry.domain.com/library/ubuntu:14.04

制作镜像

# 常用下面这种方式制作镜像,Dockerfile 文件更透明
docker build [-f DockerfileName] -t image_name DockerfilePath

这里 DockerfilePath 是 Context 上下文目录,在创建的时候会全部上传到 Docker Server 端,所以这个目录不要太大。

参数说明:

  • -f/--file:Name of the Dockerfile (Default is 'PATH/Dockerfile'),Dockerfile的完整路径
  • -t/--tag:Name and optionally a tag in the 'name:tag' format,指定了镜像名称,镜像的名字及 tag,通常 name:tag 或者 name 格式
  • --no-cache:Do not use cache when building the image,这篇文章介绍了使用这个参数的场景,构建镜像中有时候包含 git clone 命令,会默认使用缓存,新代码就不会下载了,所以,有时候需要加上这个参数;
  • --pull,默认 false。Always attempt to pull a newer version of the image,设置该选项,总是尝试 pull 镜像的最新版本

其他的 build 参数,可以采用 docker build -h 查看。

删除镜像

删除 image 之前,需要先删除 container:

docker ps -a
docker rm container_id/container_name

删除 image:

docker rmi <image-id>
docker rmi <image-name>:<tag>

删除虚悬镜像(dangling image):

$docker image ls -f dangling=true #列出虚悬镜像

$ docker image prune
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

无tag镜像(dangling)

显示无 tag 镜像:

$ docker images --filter "dangling=true"

当新构建的镜像占用这个镜像ID的 repo:tag 时,会出现这些图像,将其保留为 untagged。可以使用如下命令批量删除这类镜像

$ docker rmi $(docker images -f "dangling=true" -q)

迁移镜像

保存镜像到文件,语法格式:

docker save [OPTIONS] IMAGE [IMAGE...]

例如:

docker save image_name -o file.tar
# Or
docker save image_name --output file.zip

将镜像保存一个 tar 包文件了,也可以是 zip 格式的压缩包。

加载一个 tar 包的镜像:

docker load -i file.tar

容器操作

  • 查看运行中的容器
docker ps
  • 查看所有容器
docker ps -a
  • 显示运行的容器里的进程信息
docker top cid

此处, cid 表示你运行的容器名

  • 显示容器详细信息
docker inspect cid
  • 日志查看
docker logs cid
# 实时查看日志输出
docker logs -f cid
  • 查看容器root用户密码
docker logs cid 2>&1 | grep '^User: ' | tail -n1

容器运行

语法格式:

Usage:	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

例如:

docker run -it --name cidregistry.domain.com/library/ubuntu:14.04

如果直接 docker run -it registry.domain.com/library/ubuntu 可能会出错,因为不加 tag ,默认就去运行 latest 版本,而本地没有 latest 版本,所以,需要将 image+tag,以冒号分隔拉去。

  • -i 交互操作
  • -t 终端
  • --name 指定容器名字
  • -d 后台运行一个容器
  • --rm,表明退出容器后随之将其删除,可以避免浪费空间
  • -p 映射端口
  • -v 挂载 volumn
  • --privileged=false 容器内 root 拥有真正 root 权限

当处于一个容器中时,利用exit退出容器

  • 在容器中运行一段程序
docker run ubuntu apt-get update

启动已终止(stop)容器:

docker restart 3e8 # 3e8 为容器的 id 号,不需要全写,也可以用容器名替代

进入容器

  • 进入正在运行的容器,退出不会造成容器停止:
docker exec -it cid /bin/bash
  • 附着到正在运行的容器中,退出时会导致容器终止,不常用:
docker attach cid

从容器拷贝文件出来

拷贝文件出来

docker cp cid:/container_path to_path

删除容器

docker rm cid
# 强制删除
docker rm -f cid
# 删除所有容器
# -q 表示只列出容器的 id 值
docker rm `docker ps -a -q`

容器运行状态修改

docker start/stop/kill/restart cid

更改容器名字

docker rename old new

修改容器,制作镜像

image 相当于类,container 相当于实例,不过可以动态给实例安装新软件,然后把这个 containercommit 命令固化成一个 image

docker commit -m "修改yum源" -a "michaelxiang" cid registry.domain.com/ci/centos-os:latest

这种制作镜像的方式并不推荐,因为不如 Dockerfile 方式透明。

推送镜像

docker login registry.domain.com -u username -p password
docker push registry.domain.com/michael/IMAGE[:TAG]

如果支持 accesstoken 权限认证:

docker login registry.domain.com -u test -p ACCESSTOKEN:XXXXXXXXXXXXX:ACCESSTOKEN

其他

你可以通过以下命令来便捷的查看镜像、容器、数据卷所占用的空间:

docker system df

docker 配置

daemon.json 文件

{
"insecure-registries": ["registry.xxx.com"],
"registry-mirrors": ["https://xxxx.mirror.domain.com"],
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2",
"storage-opts": [
"overlay2.override_kernel_check=true"
]
}

FAQ

Q1:Docker 空间问题

Docker长时间运行后的volumes目录清理

参考

命令:

镜像登录:

Docker 入门指南——常用命令的更多相关文章

  1. Docker入门以及常用命令

    目的: Docker入门 Docker简介 Centos7安装Docker Docker HelloWorld运行原理解析 阿里云镜像仓库配置 Docker常用命令 Docker基本命令 Docker ...

  2. Docker入门之常用命令

    写在前面 细数当前最流行的技术莫过于容器化和人工智能了,而容器化技术能有今天的热度,Docker可谓功不可没. 让我们一起来回顾一下Docker 是什么? 是一种虚拟化技术 能够将应用程序自动部署到容 ...

  3. docker入门及常用命令

    Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...

  4. Docker的入门及常用命令

    Docker入门及常用命令 1. 各个容器之间是相互隔离状态: 这样减少了我们软件之间的影响. 2. docker是os层虚拟化架构的一种产品体现, os层虚拟化架构出来的操作系统需要和宿主机操作系统 ...

  5. Docker 入门指南

    Docker 入门指南 目录 基础概念 安装教程 基本操作 常用安装 构建操作 容器编排 壹.基础概念 什么是Docker? Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装 ...

  6. Docker基础和常用命令

    Docker基础和常用命令 一,Docker 简介 1.1,什么是 Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,nam ...

  7. docker 安装与常用命令与常用容器(containers)环境

    注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...

  8. Docker系列之常用命令操作手册

    目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...

  9. Docker(2):快速入门及常用命令

    什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...

随机推荐

  1. python入门第一篇

    python里面 单行注释用:#被注释内容 多行注释用:"""被注释内容""" 要想py2.7和py3.5都能运行,必须在文件头部加: #/ ...

  2. sql server行列转化和行列置换

    行列转换: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 李四 物理 94 想变成(得到如下结果): 姓名 语文 数学 物理 ---- - ...

  3. Oracle创建禁止DDL的触发器

    create or replace trigger forbid_ddl       before ddl on DATABASEbegin  --if ora_dict_obj_owner = or ...

  4. Unity之Vector3.SignedAngle实现

    如代码: float angle = Vector3.Angle(v1, v2); angle *= Mathf.Sign(Vector3.Cross(v1, v2).y);

  5. 用Hexo在GitHub上搭建个人博客

    我用Hexo在GitHub上搭建好了自己的博客,我的这第一篇博客就来说说搭建的过程. 1 环境配置 本文使用环境如下: Windows 10 node.js v8.1.3 git v2.13.2 np ...

  6. Python datetime获取详细时间

    说明:datetime是date和time的结合体,包含了date和time的所有信息 datetime常见用法: 1.datetime.datetime.now()返回一个UTC时间的datetim ...

  7. VMWare虚拟机 window文件传递

    无论是将虚拟机的文件传到window上或者是将window上文件传到虚拟机上: 都可以选中文件,然后拖动文件到另一个系统上 提前:虚拟机安装了VMWARE Tools 1)window上文件拖到虚拟机 ...

  8. ModelState查看错误字段的信息

    if (!ModelState.IsValid) { List<string> sb = new List<string>(); //获取所有错误的Key List<st ...

  9. Qt & VS2013 报错:There's no Qt version assigned to this project for platform Win32

    如果你想了解关于Qt与VS2013开发环境搭建,可以至此翻页. 这里主要分享环境已搭建成功,在构建项目时遇到的报错解决方案. [1]Qt 与 VS2013开发环境构建时报错 报错界面如下: 注意:对话 ...

  10. 机器学习评价方法 - Recall & Precision

    刚开始看这方面论文的时候对于各种评价方法特别困惑,还总是记混,不完全统计下,备忘. 关于召回率和精确率,假设二分类问题,正样本为x,负样本为o: 准确率存在的问题是当正负样本数量不均衡的时候: 精心设 ...