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. Unity shader学习之阴影,衰减统一处理

    使用unity AutoLight.cginc文件里的内置函数 UNITY_LIGHT_ATTENUATION shader如下: // Upgrade NOTE: replaced 'mul(UNI ...

  2. 软工网络15团队作业4——Alpha阶段敏捷冲刺2.0

    软工网络15团队作业4--Alpha阶段敏捷冲刺2.0 1.提供当天站立式会议照片一张. 2.每个人的工作 成员 昨天已完成 今天计划完成 郭炜埕 熟悉微信web开发者工具 完成新建话题界面的设计 郑 ...

  3. Azure Event Hub 技术研究系列1-Event Hub入门篇

    前两个系列研究了Azure IoT Hub和Azure Messaging.最近准备继续研究Azure Event Hub,即Azure的事件中心.首先, Azure Event Hub的官方介绍: ...

  4. Linux 软件安装卸载命令

    安装方式一: RPM 命令 rpm -qa|grep java  查看java 是否安装 rpm -e --nodeps  软件名   卸载已安装软件 rpm -ivh xxx.rpm   安装 安装 ...

  5. 分布式系统ID生成方案

    自增ID 不错,可以限度抑制ID的大小.但需要有一个中心化的节点作为解决原子性问题.可以选用Redis,MySQL,Zookeeper.成本有点高. UUID 分布式,而且唯一!缺点是生产的ID太长. ...

  6. linux常用命令:touch 命令

    linux的touch命令不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存在的文件. 1.命令格式: touch [选项]... 文件... 2.命令参数: -a    ...

  7. flask 使用Flask-WTF处理表单

    使用Flask-WTF处理表单 扩展Flask-WTF继承了WTFforms,使用它可以在flask中更方便的使用WTForms.Flask-WTF将表单数据解析.CSRF保护.文件上传等功能与Fla ...

  8. nextjs 服务端渲染请求参数

    Post.getInitialProps = async function (context) { const { id } = context.query const res = await fet ...

  9. java课上测试心得

    放暑假之前,建民老师就给我们布置了每一天学习两小时的代码,但是自己的不重视,根本就没有达到这个要求,简单学了一点点基本的东西,然后在开学的第一堂课上,连续三个小时的敲代码,让我意识到了自己的问题,一个 ...

  10. 案例:Redis在唯品会的大规模应用

    目前在唯品会主要负责redis/hbase的运维和开发支持工作,也参与工具开发工作,本文是在Redis中国用户组给大家分享redis cluster的生产实践. 分享大纲 本次分享内容如下: 1.生产 ...