容器技术Docker 容器操作大总结

Docker实战之容器操作:

新建容器:

docker create创建的容器处于停止状态,可以使用docker start命令启动Docker容器。

使用docker run命令,可以创建一个运行中的容器。

create命令与容器运行模式相关的选项:

-a,--attach=[]                                      是否绑定到标准输出、输入和错误

-a,--detach=true|false                              是否在后台运行容器,默认是否

--detach-keys=""                                    从attach模式退出的快捷键

--entrypoint=""                                     镜像存在入口指令时,覆盖为新的命令

--pxpose=[]                                         指定容器会暴露出来的端口或端口范围

--group-add=[]                                      运行容器的用户组

-i,--interactive=true|false                         保持标准输入打开,默认为false

--ipc=""                                            容器IPC命名空间,可以为其他容器或主机

--isolation="default"                               容器使用的隔离机制

--log-driver="json-file"                            指定容器的日志驱动类型,取值范围是:json-file/syslog/journald/gelf/fluentd/awslogs/splunk/etwlogs/gcplogs/none

--log-opt=[]                                        传递给日志驱动的选项

--net="bridge"                                      指定容器的网络模式,包括bridge/none/其他容器内网络/host的网络或某个现有的网络

--net-alias=[]                                      容器在网络中的别名

-P,--publish-all=true|false                         通过NAT机制将容器标记暴露的端口自动映射到本地主机的临时端口

-p,--public=[]                                      指定如何映射到本地主机端口

--pid=host                                          容器的PID命名空间

--userns=""                                         启用userns-remap时配置用户命名空间的模式

--uts=host                                          容器的UTS命名空间

--restart="no"                                      容器的重启策略,取值no/no-failure[:max-retry]/always/unless-stopped等

--rm=true|false                                     容器退出后是否自动删除,不能跟-d同时使用

-t,--tty=true|false                                 是否分配一个伪终端,默认是false

--tmpfs=[]                                          挂载临时文件系统到容器

-v|--volume[=[[HOST-DIR:]CONTAINER_DIR[:OPTIONS]]]  挂载主机上的文件卷到容器

--volume-driver=""                                  挂载文件卷的驱动类型

--volume-from=[]                                    从其他容器挂在卷

-w,--workdir=""                                     容器内的默认工作目录

create命令与容器环境和配置相关的选项:

--add-host=[]                                       在容器内添加一个主机名到IP地址的映射关系

--device=[]                                         映射物理机上的设备到容器

--dns-search=[]                                     DNS搜索域

--dns-opt=[]                                        自定义的DNS选项

--dns=[]                                            自定义的DNS服务器

-e,--env=[]                                         指定容器内环境变量

--env-file=[]                                       从文件中读取环境变量到容器中

-h,--hostname=""                                    指定容器内的主机名

--ip=""                                             指定容器的IPV4地址

--ipv6=""                                           指定容器的IPV6地址

--link=[<name or id>:alias]                         连接到其他容器

--mac-address=""                                    指定容器的MAC地址

--name=""                                           指定容器的别名

create命令与容器资源限制和安全保护相关的选项:

--blkio-weight=10~1000                              容器读写块设备的I/O性能权重,默认是0

--blkio-weight-device=[DEVICE_NAME_WEIGHT]          指定各个块设备的I/O性能权重

--cpu-shares=0                                      允许容器使用CPU资源的相对权重,默认一个容器能用满一个核心的CPU

--cap-add=[]                                        增加容器的Linux指定安全能力

--cap-drop=[]                                       移除容器的Linux指定安全性能

--cgroup-parnet=""                                  指定容器CGroups限制的创建路径

--cidfile=""                                        指定容器的进程ID号写到文件

--cpu-period=0                                      限制容器在CFS调度器下的CPU占用时间片

--cpuset-cpus=""                                    限制容器能使用哪些CPU核心

--cpuset-mems=""                                    NUMA架构下使用哪些核心的内存

--cpu-quota=0                                       限制容器在CFS调度器下的CPU额配

--device-read-bps=[]                                挂载设备的读吞吐率(以bps为单位)限制

--device-write-bps=[]                               挂载设备的写吞吐率(以bps为单位)限制

--device-read-iops=[]                               挂载设备的读速率(以每秒I/O次数为单位)限制

--device-write-iops=[]                              挂载设备的写速率(以每秒I/O次数为单位)限制

--kernel-memory=""                                  限制容器内使用内核的内存大小,单位可以是b/k/m/g

-m,--memory=""                                      限制容器内应用使用的内存,单位可以是b/k/m/g

--memory-reservation=""                             当系统中内存过低的时候,容器会被限制内存到给定的值,默认情况下等于内存限制值

--memory-swap="LIMIT"                               限制容器使用内存和交换分区的总大小

--oom-kill-disable=true|false                       内存耗尽的时候是否杀死容器

--oom-score-adj=""                                  调整容器的内存耗尽参数

--pids-limit=""                                     限制容器的PID个数

--privileged=true|false                             是否给容器以高权限,这个意味着容器内应用将不受权限下限制,一般不推荐使用

--read-only=true|false                              是否让容器内的文件系统只读

--security-opt=[]                                   指定一些安全参数,包括权限、安全能力、apparmor

--stop-signal-SIGTERM                               指定停止容器的系统信号

--shm-size=""                                       /dev/shm的大小

--sig-proxy=true|false                              是否代理收到的信号给应用,默认是true,不能代理SIGCHLD

--memory-swappiness="0~100"                         调整容器内存交换区参数

-u,--user=""                                        指定在容器内执行命令的用户信息

--ulimit=[]                                         通过ulimit来限制最大文件数,最大进程数

其他常用参数:

-l,--label=[]                                       以键值对的方式指定容器的标签信息

--label-file=[]                                     从文件中读取标签信息

docker run来启动容器的时候Docker在后台运行的标准操作包括:

1。检查本地是否存在指定的镜像,不存在就从公有仓库下载。

2.利用镜像创建一个容器,并启动该容器。

3.分配一个文件系统给容器,并在只读的镜像层外边挂载一层可读写层。

4.从宿主机配置的网桥接口中桥接一个虚拟接口到容器中。

5.从网桥的地址池配置一个IP地址给容器

6.执行用户指定的应用程序

对于创建的容器,当使用exit命令退出之后,容器就会自动处于退出状态。

默认情况下,常见的错误代码:

125:Docker daemon执行出错,指定了不支持的Docker命令参数

126:所指定命令无法运行,例如权限不足

127:容器内命令无法找到

命令执行出错,会默认返回错误码。

Docker守护态运行:通过-d参数来实现。

终止容器:

docker stop [-t|--time[=10]] [CONTAINER...]

首先向容器发送SIGTERM信号,等待一段时间(默认10秒)后,在发送SIGKILL信号终止容器。

docker kill命令会直接发送SIGKILL信号来强行终止容器。

进入Docker容器:

docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER

支持子选项的作用:

--detach-keys[=[]]:退出attach模式的快捷键序列,默认是CTRL+P,CTRL+Q或CTRL+P+Q

--no-stdin=true|false:是否关闭标准输入,默认是保持打开的

--sig-proxy=true|false:是否代理收到的系统信号给应用程序,默认为true

40d5d3816472175538f48f506eb7aa74019ef643c50a1351cc830f96a1a66217

[email protected]:~# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

40d5d3816472        centos              "/bin/bash"         6 seconds ago       Up 4 seconds                            vigilant_noether

[email protected]:~# docker attach vigilant_noether

[[email protected] /]# ls

anaconda-post.log  bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

当多个窗口同时用attach命令连接同一个容器的时候,所有窗口都会同步显示。当某个窗口因为命令阻塞时,其他窗口也是无法执行操作的。

docker exec [-d|detach] [--detach-keys[=[]]] [-i|interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]

支持子选项的作用:

-i,--interactive=true|false:打开标准输入接受用户输入的命令,默认是false

--privileged=true|false:是否执行命令以高权限,默认是false

-t,--tty=true|false:分配伪终端,默认是false

-u,--user="":执行命令的用户名或ID

nsenter工具:

[email protected]:~# apt-get install util-linux

nsenter --target $PID --mount --uts --ipc --net --pid

删除容器:

docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]

-f,--force=false:是否强行终止并删除一个运行中的容器

-l,--link=false:删除容器的连接,但是保留容器

-v,--volumes=false:删除容器挂载的数据卷

当添加-f参数的时候,Docker会先发送SIGKILL信号给容器,终止其中的应用,之后强行删除。

导出容器:

导出容器指的是导出一个已经创建的文件,不管此时这个容器是否处于运行状态,可以使用docker export命令:

docker export [-o|--output[=""]] CONTAINER

-o选项指定tar包的文件名或者使用>重定向。

[email protected]:~# docker ps

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

40d5d3816472        centos              "/bin/bash"         27 minutes ago      Up 4 seconds                            vigilant_noether

[email protected]:~# docker export >MyCentOS:6.0.tar 40d5d3816472

[email protected]:~# ll

drwxr-xr-x 16 doc  doc       4096 11月 29 22:00 ./

drwxr-xr-x  3 root root      4096 11月 27 21:52 ../

-rw-r--r--  1 root root 204790272 11月 29 22:00 MyCentOS:6.0.tar

导入容器:

docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|url - [REGISTRY[:TAG]]

可以通过-c选项在导入的同时对容器执行Dockerfile指令。

实际上,既可以使用docker load命令来导入镜像库存储文件到本地镜像库,也可以使用docker import命令来导入一个容器快照到本地镜像库。

两者的区别在于容器快照将会丢弃所有的历史记录和元数据信息,而镜像存储文件将保存完整记录,体积也会更大。此外从容器快照文件导入时,也可以重新指定标签等元数据。

时间: 2024-08-07 19:27:54

容器技术Docker 容器操作大总结的相关文章

从搬家到容器技术docker应用场景解析

小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 话说小史已经接受了A厂的offer,这不,已经在公司附近租好了房子,准备搬家过去住了. 家里的东西真是多呀,小史的很多家具都是组装起来的,现在都已经拆散放到吕老师的车上了. 就这样,吕老师开车带着小史一起去了公司附近的新住址. 开了一个多小时,终于到了新住址.一进房间,小史就忙着把心爱的电脑桌拼起来. 但是电脑桌拆起来快,装起来可不好装,几十个组件,一百多个螺丝钉,小史装了一下午,最后还发现

虚拟化技术—docker容器—安装篇

核心概念 1. 镜像 是一个只读的模板类似于安装系统用到的那个iso文件我们通过镜像来完成各种应用的部署. 2. docker容器 镜像类似于操作系统而容器类似于虚拟机本身.它可以被启动.开始.停止.删除等操作每个容器都是相互隔离的. 3. docker仓库 存放镜像的一个场所仓库分为公开仓库和私有仓库. 最大的公开仓库是Docker hubhub.docker.com国内公开仓库http://dockerpool.com/ 一.安装 centos6 上安装(6.5之前版本需要升级一下 yum

虚拟化技术—docker容器—网络模式

Docker作为目前最火的轻量级容器技术,有很多令人称道的功能,如Docker的镜像管理.然而,Docker同样有着很多不完善的地方,网络方面就是Docker比较薄弱的部分.因此,我们有必要深入了解Docker的网络知识,以满足更高的网络需求.这里先介绍Docker自身的4种网络工作方式. 1. Docker的4种网络模式 我们在使用docker run创建Docker容器时,可以用--net选项指定容器的网络模式,Docker有以下4种网络模式: § host模式,使用--net=host指定

虚拟化技术—docker容器—PIPEWORK解读与实践

本文通过3个样例 -- 将Docker容器配置到本地网络环境中.单主机Docker容器的VLAN划分.多主机Docker容器的VLAN划分,演示了如何使用pipework帮助我们进行复杂的网络设置,以及pipework是如何工作的. 1.pipework的使用以及源码分析 Docker自身的网络功能比较简单,不能满足很多复杂的应用场景.因此,有很多开源项目用来改善Docker的网络功能,如pipework.weave.flannel等.这里,就先介绍一下pipework的使用和工作原理. pip

虚拟化技术—docker容器—管理篇

一.我们怎么更方便的进去已经start的容器呢? nsenter:可以通过这个命令进去docker的images里 首先获取一个容器的id: docker inspect --format " {{.State.Pid}}" centos_with_nettools 获取一个id 10592 nsenter --target 10592 --mount --yts --ipc --net 这样就进去了,当然这样很麻烦,所以可以写一个脚本: cat in.sh CNAME=$1 CPID

虚拟化技术—docker容器—Dockerfile篇

什么是Dockerfile? 按照平时,我们都需要先让一个容器跑起来,然后进去搭建制定自己的服务,那有没有更简洁的方法呢?Dockerfile就是为了更方便的制定容器的. 首先先看Dockerfile里的一些定义,这里从网上截了个图,比较形象: 创建目录: 要先把需要的软件包放在同一个目录下 编写Dockerfile,这里要特别提醒,Dockerfile编写需要非常注意空格!!! vim Dockerfile 添加: # This is My first Dockerfile # Version

虚拟化技术—docker容器—web UI篇

docker官方提供了一个web UI界面管理容器和镜像,名为:shipyard 先修改一下配置文件 vim /etc/sysconfig/docker 添加: other_args="-H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock" 注:centos7使用OPTIONS="-H tcp://0.0.0.0:235 -H unix:///var/run/docker.sock" 重启: /etc/init.d/

Docker容器技术的核心原理

目录 1 前言 2 docker容器技术 2.1 隔离:Namespace 2.2 限制:Cgroup 2.3 rootfs 2.4 镜像分层 3 docker容器与虚拟机的对比 1 前言 上图是百度的虚拟机和Docker容器的对比图,看着好像都差不多.那么虚拟机技术都这么成熟了,为什么Docker会火起来呢,Docker对比虚拟机等传统技术有什么优势?Docker又是通过什么方式来实现容器的一致性呢?这篇文章我们就通过探究Docker的核心原理,来侧面回答这个疑问. 2 docker容器技术

第三篇:Docker容器架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建. Docker Daemon是docker最核心的守护进程,也就是Server端,Server端可以部署在远程,也可以部署在本地,因为Server端与客户端(Docker Client)是通过Rest API进行通信. docker CLI 实现容器和镜像的管理,为用户提供统一的操作界面,这个 客户端提供一个只读的镜像,然后通过镜像可以创建一个或