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 可以在隔离容器中并行运行和管理 ...
随机推荐
- C#项目中关于多个程序集下App.config文件的问题
在项目中我们会经常用到App.config文件,有的是自动生成的,比如引用webservice.wcf服务时生成:也有手动建立的配置文件直接默认名就为app.config.这些配置有的保存当前程序集用 ...
- Mysql 修改字段长度、修改列名、新增列、修改自增主键起始值
alter table 表名 modify column 字段名 类型; 例如 数据库中user表 name字段是varchar(30) 可以用 ) ; --修改字段长度 )--修改表列名 ); -- ...
- Yii2 Restful api搜索实现
- Sitecore CMS中创建模板
如何在Sitecore CMS中创建模板. 在/sitecore/templates选择应创建模板的文件夹中. 注意:在多站点项目中,通常会在模板所属的网站名称的/sitecore/templates ...
- 【impala学习之二】impala 使用
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 CM5.4 一.Impala shell 1.进入impal ...
- flask 操作数据库(分类)
数据库 数据库是大多数动态web程序的基础设施,只要你想把数据存下来,就离不开数据库. 这里所说的数据库指的是有存储数据的单个或多个文件组成的集合,它是一种容器,可以类比文文件柜.而人们通常使用数据库 ...
- python小练习:读入一个考试得分,判断这个分数是哪个等级,并输出,考虑异常场景
读入一个考试得分,判断这个分数是哪个等级,并输出. 等级:>=90 优 ,>=80且小于90 良,>=70 且小于80,中,>=60且<70及格 <60 不及格 ...
- JS神经网络deeplearn.js:浏览器端机器智能框架
JS神经网络deeplearn.js:浏览器端机器智能框架 通过 deeplearn.js,可以实现在浏览器中训练神经网络模型,也可在推理阶段运行预训练模型. deeplearn.js 以 TypeS ...
- js函数常见的写法以及调用方法
写在前面:本文详细的介绍了5中js函数常见的写法以及调用的方法,平时看别人代码的时候总是看到各种不同风格的js函数的写法.不明不白的,找了点资料,做了个总结,需要的小伙伴可以看看,做个参考.1.常规写 ...
- linux内核的双链表list_head、散列表hlist_head
一.双链表list_head 1.基本概念 linux内核提供的标准链表可用于将任何类型的数据结构彼此链接起来. 不是数据内嵌到链表中,而是把链表内嵌到数据对象中. 即:加入链表的数据结构必须包含一个 ...