Docker 入门指南——常用命令

Docker 容器学习笔记系列:
前面已经介绍了 Docker 的安装方式,本文总结一下使用 Docker 的基本概念和常用命令。
基本概念
镜像 Image
镜像是一些打包好的已有的环境,可以被用来启动和创建容器
容器 Container
容器是镜像的实例化
容器的UUID
UUID -- 通用唯一标识符(Universally Unique Identifier)
容器有三种方式来进行标识:
- 长UUID
- 短UUID
- Name
UUID 是 Docker daemon 产生的,在一台主机上是唯一的,在创建容器的时候可以通过 --name 来指定容器的名字,如果不指定会自动分配一个字符串名称。
通过 docker ps、docker inspect 等命令可以查看到容器的标识信息
容器启动过程
- 检查本地是否存在指定的镜像,不存在就从公有仓库下载
- 利用镜像创建并启动一个容器
- 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
- 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行完毕后容器被终止
镜像
- 查看
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 相当于实例,不过可以动态给实例安装新软件,然后把这个 container 用 commit 命令固化成一个 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目录清理
参考
命令:
- 官宣——Command-Line Interfaces (CLIs) 强烈
推荐 - Docker 使用总结 本文的主要参考
- Docker 入门教程
- Docker —— 从入门到实践
- 只要一小时,零基础入门Docker
- SF-docker命令详解
- 简书-Docker命令使用
- Docker命令行参考(8) – docker images列出镜像 删除无 tag 镜像
镜像登录:
Docker 入门指南——常用命令的更多相关文章
- Docker入门以及常用命令
目的: Docker入门 Docker简介 Centos7安装Docker Docker HelloWorld运行原理解析 阿里云镜像仓库配置 Docker常用命令 Docker基本命令 Docker ...
- Docker入门之常用命令
写在前面 细数当前最流行的技术莫过于容器化和人工智能了,而容器化技术能有今天的热度,Docker可谓功不可没. 让我们一起来回顾一下Docker 是什么? 是一种虚拟化技术 能够将应用程序自动部署到容 ...
- docker入门及常用命令
Docker简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发布 ...
- Docker的入门及常用命令
Docker入门及常用命令 1. 各个容器之间是相互隔离状态: 这样减少了我们软件之间的影响. 2. docker是os层虚拟化架构的一种产品体现, os层虚拟化架构出来的操作系统需要和宿主机操作系统 ...
- Docker 入门指南
Docker 入门指南 目录 基础概念 安装教程 基本操作 常用安装 构建操作 容器编排 壹.基础概念 什么是Docker? Docker是基于Go开发的应用容器引擎,属于 Linux 容器的一种封装 ...
- Docker基础和常用命令
Docker基础和常用命令 一,Docker 简介 1.1,什么是 Docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,nam ...
- docker 安装与常用命令与常用容器(containers)环境
注意区别 container 与 image 的关系,container 的建立需要 image 的承载,也即 container 依赖 image,停止并删除了 container 并不会删除 im ...
- Docker系列之常用命令操作手册
目录 1.安装虚拟机 2.安装Docker 3.Docker镜像操作 4.Docker容器操作 Docker系列之常用命令操作手册 继上一篇博客Docker系列之原理简单介绍之后,本博客对常用的Doc ...
- Docker(2):快速入门及常用命令
什么是Docker? Docker 是世界领先的软件容器平台.开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题.运维人员利用 Docker 可以在隔离容器中并行运行和管理 ...
随机推荐
- 提高Linux运维效率的30个命令行常用快捷键
提高Linux运维效率的30个命令行常用快捷键 表4-1 30个常用快捷键 快捷键 功能说明 最有用快捷键 tab 命令或路径等的补全键,Linux最有用快捷键* 移动光标快捷键 Ctrl+a 光标 ...
- 配置hdfs之后发现9000端口未被监听[玄学]
1. 按照apache的官网的文档配置hdfs 2. 在 core-site.xml 中配置了 fs.defaultFS 的值为 hdfs://0.0.0.0:9000 3. 执行 start-dfs ...
- Big Event in HDU (母函数, 玄学AC)
Nowadays, we all know that Computer College is the biggest department in HDU. But, maybe you don't k ...
- E. Kefa and Watch hash 线段树
2015-09-28 14:11:36 by opas 这题给的是一个字符串 把其中一些子串给取出来 判断是否是周期为d的字符串 还需要把 其中的一个区间完全变成一个数 ,然后在查询,我们把每个字符 ...
- hdu4749 kmp改进
这题说的是给了一个模板串 然后又给了一个串 需要找出类似的按个模板串 , 改相等的位置要相等 该大于的位置到大于 我们将模板串做好失配指针就ok了,然后匹配和原来的匹配不同,这个匹配需要的是相对匹配, ...
- Java基础(basis)-----代码块详解
1.静态代码块 格式: static{ 内容..... } 随着类的加载而加载,而且只被加载一次 多个静态代码块之间按照顺序结构执行 优先其他各种代码块以及构造函数先执行 静态的代码块中只能执行静态的 ...
- linux 安装 Python
一. 打开终端,输入:wget https://www.python.org/ftp/python/3.5.0/Python-3.5.0b4.tgz 下载完毕后 输入解压命令:tar –zxvf Py ...
- 设计模式之Flyweight(享元)(转)
Flyweight定义: 避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类). 为什么使用? 面向对象语言的原则就是一切都是对象,但是如果真正使用起来,有时对象数可能显得很庞大, ...
- html5实现移动端下拉刷新(原理和代码)
这篇文章给大家介绍的内容是关于html5实现移动端下拉刷新(原理和代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 移动端的下拉刷新是一个很常见的功能,也有许多开源库实现了这个功 ...
- JustOj 1974: 简单的事情 (组合数)
题目描述 数学天才fans曾经说过一句话:组合数的计算是一件非常简单的事情.组合数的计算真的是一件非常简单的事情吗?请你自己去尝试一下吧! 输入 输入中的一些整数对n,m(m≤n≤20) 输出 输出其 ...