docker知识整理(备份)
概念:
镜像:Docker 镜像类似于虚拟机镜像,可以将它理解为一个只读的模板 。镜像是创建 Docker 容器的基础。通过版本管理和增量的文件系统, Docker 提供了一套十分简单的机制来创建和更新现有的镜像。镜像文件 一 般由若干层(layer)组成。多个镜像共用一个层时,本地只会存储该层的一份内容,以解决空间。
容器: Docker 容器类似于一个轻量级的沙箱, Docker 利用容器来运行和隔离应用 。容器是从镜像创建的应用运行实例 。 它可以启动、开始、停止 、 删除,而这些容器都是彼此相互隔离、互不可见的 。可以把容器看作一个简易版的 Linux 系统环境(包括 root 用户权限、进程空间、用户空间和网 络空间等)以及运行在其中的应用程序打包而成的盒子 。
镜像和容器的关系:镜像自身是只读的 。 容器从镜像启动的时候,会在镜像的最上层创建一个可写层 。
仓库:Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。
仓库注册服务器是存放仓库的地方。每个仓库集中存放多个某一类镜像,这些镜像通过不同的标签( tag )来进行区分。例如仓库注册服务器存放了ubuntu和centos两个仓库,ubuntu仓库中又存放了16.04和18.04版的ubuntu镜像。
CentOS 7 安装docker :
#卸载旧版本
yum remove docker{,-{common,selinux,logrotate,client{,-latest},latest{,-logrotate},engine{,-selinux}}}
#安装必要系统工具
yum install yum-utils device-mapper-persistent-data lvm2
#添加软件源信息
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum缓存
yum makecache fast
#安装docker社区版
yum install docker-ce
#启动docker服务
systemctl start docker
#测试hello world
docker run hello-world
Debian上安装Docker
下面命令全部以root用户执行: 更新可用软件包列表:
# apt update 安装必备包 :
# apt install curl apt-transport-https ca-certificates gnupg2 software-properties-common 添加docker的gpg秘钥:
# curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add - 添加apt源:
# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable" 为刚添加的源更新可用包列表:
# apt update 确认一下docker-ce的安装来源为docker官方的源,而非debian的源:
apt-cache policy docker-ce 确认好来源后,执行apt install安装docker-ce
apt install docker-ce 查看docker状态,服务处于running状态:
systemctl status docker
镜像加速(例如使用163):
/etc/docker/daemon.json改成
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
然后重启docker: systemctl daemon-reload; systemctl restart docker
docker命令 -- 镜像操作:
获取镜像(pull): docker pull [OPTIONS] NAME[:TAG|@DIGEST] //NAME是仓库名称/或镜像名。不指定镜像tag就会默认使用latest,latest会跟踪镜像的最新变化,往往是不稳定的。option部分参考docker <命令> --help,下同
例如 docker pull ubuntu:18.04 //等效于docker pull registry.hub.docker.com/ubuntu:18.04
查看镜像(images/image ls/inspect):
docker images 或 docker image ls
例如 docker images --filter=dangling=true //列出没有被使用的镜像
例如 docker images --format='{{.ID}} {{.Repository}}' //仅查看ID和仓库
查看镜像详情: docker inspect 仓库名:标签 docker inspect ubuntu:18.04 //help上的提示是Return low-level information on Docker objects
例如 docker inspect ubuntu:18.04
例如 docker inspect -f '{{.ID}}' centos:latest
打标签(tag): docker tag ubuntu:latest myubuntu:lates //类似软链接概念
镜像历史(history),列出各层创建信息: docker history ubuntu: 18. 04 //如果信息过长被阶段,可以添加参数 --no-trunc
搜索镜像(search): docker search --filter=is-official=true --limit=30 nginx //默认输出25个,所以这里使用--limit来限制
删除镜像(rmi/image rm): docker rmi -no-prune ubuntu:latest //-no-prune不要清理未带标签的父镜像。
清理镜像(image prune)清理临时和未用的镜像文件: docker image prune //-a, -all: 删除所有无用镜像, 不光是临时镜像; -filter filter: 只清理符合给定过滤器的镜像;
创建镜像:
基于已有容器创建,例如对容器的/tmp目录新增一个文件后(使用Dockerfile创建,另开一文):
执行:docker commit -m "ThisIsComment" -a "ThisIsAuthorName" ae012c07115e test1:latest
再执行:docker history test1:latest
//回显
IMAGE CREATED CREATED BY SIZE COMMENT
7e3d6c953ff8 49 seconds ago /bin/bash 467kB ThisIsComment
1e1148e4cc2c 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:6f877549795f4798a… 202MB
导出镜像到tar(save): docker save -o ubuntu_18.04.tar ubuntu:18.04
从tar导入镜像(load):docker load -i ubuntu_18.04.tar 或 docker load < ubuntu_18.04.tar
上传镜像(push): docker push [OPTIONS] NAME[:TAG]
docker命令 -- 容器操作:
从镜像创建容器(create): docker create [OPTIONS] IMAGE [COMMAND] [ARG...] //option相当多
启动容器(start):docker start [OPTIONS] CONTAINER [CONTAINER...] //比较有用的选项: -a 连接stdout/stderr,转发信号 -i 连接stdin
新建并启动容器(run): docker run [OPTIONS] IMAGE [COMMAND] [ARG...] //option也相当多,更多选项参考man docker-run或docker run --help。
比较重要的选项有:
-d表示守护进程方式运行。
--net=<bridge、none、container、 host、network命令> #bridge是容器内网络接口桥接到宿主的docker0; none就是不配置容器的网络(隔离的网络栈); container:共享已存在容器的网络和端口资源,
两个容器可以使用lo网口通讯(--net=container:容器名或id); host是指使用宿主机的网络(比较危险);
该命令做了:如果镜像没有就从公有仓库下载,然后用镜像创建容器,分配文件系统,并在只读镜像外层挂上可读写层,从宿主的网桥接口中桥接一个虚拟接口到容器中,并分配ip地址,执行应用程序然后终止。
查看容器输出(logs): docker logs [OPTIONS] CONTAINER //即使容器已经运行完毕了,但还是可以通过该命令来查看输出。选项支持按照时间来查看输出
暂停、解除暂停容器(pause/unpause): docker pause CONTAINER [CONTAINER...] / docker unpause CONTAINER [CONTAINER...]
停止容器(stop):docker stop [OPTIONS] CONTAINER [CONTAINER...] //先发SIGTERM,默认10秒后发SIGKILL信号。
先停再启容器(restart):docker restart [OPTIONS] CONTAINER [CONTAINER...]
移除所有停止状态的容器(container prune): docker container prune [OPTIONS]
向容器发信号(kill): docker kill [OPTIONS] CONTAINER [CONTAINER...] //默认是SIGKILL信号
进入容器(attach): docker attach [OPTIONS] CONTAINER //--detach-keys[=[]]: 指定退出 attach 模式的快捷键序列, 默认是 CTRL-p CTRL-q; --no-stdin=trueifalse :是否关闭标准输入,默认是保持打开; --sig-proxy=truelfalse :是否代理收到的系统信号给应用进程,默认为 true
在运行的容器中执行命令(exec): docker exec [OPTIONS] CONTAINER COMMAND [ARG...] //可以指定环境变量,交互,tty、工作目录等
删除容器(rm):docker rm [OPTIONS] CONTAINER [CONTAINER...]
导出容器到stdout(export),不管它是否正在运行: docker export [OPTIONS] CONTAINER //重要选项 -o tar文件路径
复制文件或目录到(cp): docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|- 或 docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH //这里的-号表示stdin或stdout, 例如: tar -zcf - /tmp/a.txt |docker cp - ae012c07115e:/tmp
查看容器(container inspect/top/stats): 例如:docker container stats [OPTIONS] [CONTAINER...] //查看容器统计,如cpu、内存、存储、网络等
查看变更(diff): docker diff <容器名> //查看文件增删改
查看端口映射(port): docker port CONTAINER [PRIVATE_PORT[/PROTO]]
更新配置(update): docker update [OPTIONS] CONTAINER [CONTAINER...] //限制容器的cpu使用率,绑定cpu核,限制内存使用率等
其他命令,不详细描述了:
管理命令有:
builder Manage builds
config Manage Docker configs
container Manage containers
engine Manage the docker engine
image Manage images
network Manage networks
node Manage Swarm nodes
plugin Manage plugins
secret Manage Docker secrets
service Manage services
stack Manage Docker stacks
swarm Manage Swarm
system Manage Docker
trust Manage trust on Docker images
volume Manage volumes
# 例如上面很多命令其实是省略的写法,比如docker create其实对应的是docker container create
数据卷、数据卷容器:
数据卷: docker volume create -d local test //创建一个普通数据卷,创建完成后,就可以看到/var/lib/docker/volumes/下多了个test目录,volume子命令有很多其他的命令,使用docker volume --help 查看
数据卷容器:执行 docker run -it -v /TestVol --name cos1 centos:latest //创建了一个带数据卷的容器 cos1,里面执行df会发现有 /TestVol这个挂载点
docker run -it --volumes-from=cos1 --name cos2 centos:latest //指定分区来源为上面的容器
在任意一个容器执行: cd /tmp/TestVol; touch aaa 然后就可以在另一个容器中发现 ls -l /TestVol 会多出aaa这个文件
如果删除了挂载的容器(包括 dbdata 、 db 工和 db2 ),数据卷并不会被自动删除 。 如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用 docker rm -v 命令来指定同时删除关联的容器 。//这点有疑问
绑定数据卷: docker run -d -P --name web --mount type=bind,source=/webapp,destination=/opt/webapp training/webapp python app.py
上面命令注释: type有bind、volume、tmpfs三类。bind就是映射到宿主的某个绝对路径,volume就是上面通过docker volume create创建的普通数据卷,tmpfs就是临时的内存数据卷
上述命令等同于使用旧的 -v 标记可以在容器内创建一个数据卷 docker run - d -P --name web -v /webapp:/opt/webapp training/webapp python app.py
只读挂载: docker run -d -P --name web -v /webapp:/opt/webapp:ro training/webapp python app.py //同理rw就是读写挂载
端口映射:
-p 宿主机IP:宿主机端口:容器端口 //注意,宿主机IP和宿主机Port都可以省略。 例如 -p 80 是省略宿主机的IP和port,-p 192.168.1.1::80 省略了宿主机的port。默认协议是tcp,如果需要指定udp,要这样写: -p 33:22/udp
或者-P 自动映射随机端口
例如:run -d -p 8000:80 nginx:latest //其他机器访问http://宿主机IP地址:8000/ 即可看到nginx欢迎页
容器互联:
例子: docker run -d --name c1 -it centos:latest /bin/bash
docker run -d --name c2 --link c1 -it centos:latest /bin/bash //然后我们在c2里面的/etc/hosts就看到了 ip和c1的映射关系(c1中没有c2 IP和c2的映射)。如果不用--link 那么可以就通过容器内的ip来连通了
搭建私人仓库: 使用 registry 镜像创建私高仓库,具体自己百度
docker知识整理(备份)的更多相关文章
- ORACLE FLASHBACK DATABASE 知识整理
1.知识储备 1) 只有SYSDBA有权执行,闪回前一定要记录当前SCN 2) 需要停机,并要求处于ARCHIVELOG模式中 3) 闪回日志不能被复用和归档,是自动管理的.RVWR ...
- ORACLE DATABASE 10G FALSHBACK 知识整理
1.知识储备 1) 当出现介质损坏时(如数据文件丢失),任何闪回方法都毫无用处,只能执行标准的备份.还原与恢复. 2.SCN记录方法 SQL>variable x_scn number; ...
- 【OGG】OGG基础知识整理
[OGG]OGG基础知识整理 一.GoldenGate介绍 GoldenGate软件是一种基于日志的结构化数据复制软件.GoldenGate 能够实现大量交易数据的实时捕捉.变换和投递,实现源数据库与 ...
- Linux系统基础知识整理
一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰的介绍,使得哪些刚接触Linux的小伙伴可以快速入门,也方便自己以后进行复习查阅. 二.基本知识整理 1.Linux文件 ...
- Linux系统基础知识整理(一)
本文来自于: https://www.cnblogs.com/hafiz/p/6686187.html#4196989 一.说明 本篇文章,我将结合自己的实践以及简介,来对linux系统做一个直观清晰 ...
- kafka知识整理
title: kafka知识整理 date: 2019-06-18 10:59:46 categories: MQ tags: kafka --- 转载自:https://www.cnblogs.co ...
- js事件(Event)知识整理
事件(Event)知识整理,本文由网上资料整理而来,需要的朋友可以参考下 鼠标事件 鼠标移动到目标元素上的那一刻,首先触发mouseover 之后如果光标继续在元素上移动,则不断触发mousemo ...
- Kali Linux渗透基础知识整理(四):维持访问
Kali Linux渗透基础知识整理系列文章回顾 维持访问 在获得了目标系统的访问权之后,攻击者需要进一步维持这一访问权限.使用木马程序.后门程序和rootkit来达到这一目的.维持访问是一种艺术形式 ...
- Kali Linux渗透基础知识整理(二)漏洞扫描
Kali Linux渗透基础知识整理系列文章回顾 漏洞扫描 网络流量 Nmap Hping3 Nessus whatweb DirBuster joomscan WPScan 网络流量 网络流量就是网 ...
- wifi基础知识整理
转自 :http://blog.chinaunix.net/uid-9525959-id-3326047.html WIFI基本知识整理 这里对wifi的802.11协议中比较常见的知识做一个基本的总 ...
随机推荐
- ABP vNext系列文章04---DynamicClient动态代理
一.动态代理在ABP系统中的应用 1.它主要在做什么事件 之前开发系统想要在后台调用别的服务都是用HttpClient发起请求,在abp vnext中不需要我们这样做了, 你只要知道服务调用的接口方法 ...
- 【6】opencv采用映射技术实现鱼眼镜头校正和鱼眼镜头还原全景图。
相关文章: [1]windows下安装OpenCV(4.3)+VS2017安装+opencv_contrib4.3.0配置 [2]Visual Studio 2017同时配置OpenCV2.4 以及O ...
- 3.1 Windows驱动开发:内核远程堆分配与销毁
在开始学习内核内存读写篇之前,我们先来实现一个简单的内存分配销毁堆的功能,在内核空间内用户依然可以动态的申请与销毁一段可控的堆空间,一般而言内核中提供了ZwAllocateVirtualMemory这 ...
- Linux进程间通信 [补档-2023-07-27]
Linux进程间通信 10-1 简介 在Linux下,进程之间相互独立,每个进程都有自己不同的用户地址空间.任何一个进程的全局变量在另 一个进程中都看不到,所以进程和进程之间不能相互访问.如果非要 ...
- Dash 2.15版本新特性介绍
本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/dash-master 大家好我是费老师,Dash不久前发布了其2.15.0版本,新增了一些实用的特性 ...
- require 与 import
common.js 模块化规范 app.js 文件: // require 在代码执行阶段才会调用引入文件,编译(预解析)时不会执行,所以下面会报错 // console.log(dep); Re ...
- 使用了未经检查或不安全的操作。 有关详细信息, 请使用 -Xlint:unchecked 重新编译
- ASP.NET Core分布式项目实战(oauth2 + oidc 实现 server部分)--学习笔记
任务15:oauth2 + oidc 实现 server部分 基于之前快速入门的项目(MvcCookieAuthSample): https://www.cnblogs.com/MingsonZhen ...
- 借助 .NET 开源库 Sdcb.DashScope 调用阿里云灵积通义千问 API
在昨天的博文中,我们通过 Semantic Kernel 调用了自己部署的通义千问开源大模型,但是自己部署通义千问对服务器的配置要求很高,即使使用抢占式按量实例,每次使用时启动服务器,使用完关闭服务器 ...
- qwb2023落荒而逃版
前言 qwb2023 .12.15 被打废了,N1决赛和qwb,有一个pwn可以做的但是已经在做misc看都不看--无语了. Pyjail ! It's myFILTER !!!|SOLVED|N1n ...