Docker 容器操作命令

容器是镜像的一个运行实例,镜像是静态的只读文件,而容器带有运行时需要的可写文件层。如果认为虚拟机是模拟运行的一整套操作系统(包括内核、应用运行态环境和其他系统环境)和跑在上面的应用,那么Docker容器就是独立运行的一个(或一组)应用,以及它们必需的运行环境。

一、创建容器

  1. 新建容器

  使用docker create命令新建一个容器,-t选项让Docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。

$ docker create -it ubuntu:latest

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

  2. 启动容器

  使用docker start命令来启动一个已经创建的容器

$ docker start af 

  通过docker ps命令查看一个运行中的容器,ps -a 查看所有容器

  3. 新建并启动容器

  docker run 等价于先执行docker create命令,再执行docker start命令

$ docker run ubuntu:18.04 /bin/echo ‘Hello World‘

  当利用docker run来创建并启动容器时,Docker在后台运行的标准操作包括:

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

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

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

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

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

    6)执行用户指定的应用程序;

    7)执行完毕后容器被自动终止;

  命令执行后出错,会默认返回错误码,默认情况下,常见错误代码包括:

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

    2) 126:所指定命令无法执行,例如权限出错

    3) 127:容器内命令无法找到。

  4. 守护态运行

  添加-d参数来实现守护态形式运行,容器启动后会返回一个唯一的id,可以通过docker ps来查看容器信息。

$ docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

  要获取容器的输也信息,可以使用docker logs命令(ce5为容器id前缀):

$ docker logs ce5

二、终止容器

  可以使用docker stop来终止一个运行中的容器,该命令格式为docker stop [-t|--time[=10]] [CONTAINER...]

  首先向容器发送SIGTERM信号,等待一段超过时间(默认为10秒)后,再发送SIGKILL信号来终止容器(ce5为容器id前缀):

$ docker stop ce5

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

  此外,当Docker容器中指定的应用终结时,容器也会自动终止。对于只启动了一个终端的容器,用户通过exit命令或ctrl+d来退出终端时,所创建的容器立刻终止,处于stopped状态。docker restart命令会将一个运行态的容器先终止,然后再重新启动它。

三、进入容器

  在使用-d参数时,容器启动后会进入后台,用户无法看到容器中的信息,也无法进行操作。如果需要进入容器进行操作,有多种办法,包括使用官方的attach或exec命令,以及第三方的nsenter工具等。

  1. attach命令

  attach命令是Docker自带的命令,命令格式为:

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

  支持三个主要选项:

    1) --detach-keys=[=[]]:指定退出attach模式的快捷键序列,默认是CTRL-p CTRL-q;

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

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

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

  2. exec命令

  exec命令可以在窗口内直接执行任意命令。

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

  比较重要的参数有

    1) -i,--interactive=true|false:打开标准输入接受用户输入命令,默认为false;

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

    3)-t, --tty=true|false:分配伪终端,默认为false;

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

$ docker exec -it 243c32535da7 /bin/bash

  3. nsenter工具

  在util-linux软件包版本2.23+中包含nsenter工具。如果系统中的util-linux包没有该命令,可以按照下面的方法从源码安装:

$ cd /tmp; curl https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.gz | tar -zxf-;cd util-linux-2.24;
$ ./configure --without-ncurses
$ make nsenter && cp nsenter /usr/local/bin

  为了使用nsenter连接到容器,还需要找到容器进程的PID,可以通过下面的命令获取:

PID = $(docker inspect --format "{{.State.Pid}}" <container>)

  通过这个PID,就可以连接到这个容器:

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

四、删除容器

  使用docker rm命令为删除处于终止或退出状态的容器,命令格式为

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

  主要支持的选项包括

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

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

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

五、导入和导出容器

  1. 导出容器

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

  docker export [-o|--output[=""]] CONTAINER。其中,可以通过-o选项来指定导出的tar文件名,也可以直接通过重定向来实现

$ docker export -o hello1.tar a4d
$ docker export a4d > hello2.tar

  

  2. 导入容器

  导出的文件可以通过docker import命令导入变成镜像

  docker import [-c|--change[=[]]] [-m|-message[=MESAGE]] file|URL - [REPOSITORY[:TAG]]

  用户可以通过-c,--change=[]选项在导和的同时执行对容器进行修改的Dockerfile指令。

  

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

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

原文地址:https://www.cnblogs.com/zhaoshizi/p/10362402.html

时间: 2024-10-11 09:55:50

Docker 容器操作命令的相关文章

7、docker容器相关操作命令

首先我们要说明一点:容器是由镜像创建来的,也就是说有镜像才能有容器 1.新建并启动容器docker run [OPTIONS] IMAGE [COMMAND] [ARG...]OPTION说明(常用):有些是一个减号,有些是两个减号--name="新容器的名字":为容器指定一个名称-d :后台运行容器,并返回容器ID,即启动守护式容器-i: 以交互模式运行容器,通常与-t同时使用-t: 为容器重新分配一个伪输入终端,通常与-i同时使用-P:大写的P,随机端口映射-p:小写的p,指定端口

Docker 网络之pipework 工具(2)将Docker容器配置到本地网络环境中

为了使本地网络中的机器和Docker容器更方便的通信,我们经常会有将Docker容器配置到和主机同一网段的需求.这个需求其实很容易实现,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.下面我们来操作一下,我主机A地址为192.168.1.107/24,网关为192.168.1.1,需要给Docker容器的地址配置为192.168.1.150/24.在主机A上做如下操作:安装pipework下载地址:wgethttps://github.com/jpetazz

docker容器互联并且暴露真实网络

在bridge模式下,连在同一网桥上的容器可以相互通信(若出于安全考虑,也可以禁止它们之间通信,方法是在DOCKER_OPTS变量中设置--icc=false,这样只有使用--link才能使两个容器通信). 多台物理主机之间的容器互联(暴露容器到真实网络中) docker  默认的桥接网卡是 docker0 .它只会在本机桥接所有的容器网卡,举例来说容器的虚拟网卡在主机上看一般叫做 vethxxx,而 docker 只是把所有这些网卡桥接在一起 pipework工作原理分析那么容器到底发生了哪些

使用pipework将Docker容器桥接到本地网络环境中

在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了.pipework工具来实现这一需求 1.安装pipework 2.宿主机配置桥接网络(可以省略) 3.给容器添加桥接地址 实验环境: 宿主机:10.207.0.99/24 网关:10.207.0.0.1 容器test:10.207.0.236/24 1.安装pipework [[email protected

安装使用NVIDIA-Docker-- 可使用GPU的Docker容器

nvidia-docker是一个可以使用GPU的docker,nvidia-docker是在docker上做了一层封装,通过nvidia-docker-plugin,然后调用到docker上,其最终实现的还是在docker的启动命令上携带一些必要的参数.因此在安装nvidia-docker之前,还是需要安装docker的. docker一般都是使用基于CPU的应用,而如果是GPU的话,就需要安装特有的硬件环境,比如需要安装nvidia driver.所以docker容器并不直接支持Nvidia

Docker 常用操作命令

一. docker安装  方式1 本地安装: 1)下载docker安装文件: 2)执行安装命令  yum localinstall *: 3)安装完之后 重启 systemctl restart docker.service: 4)确认docker 是否安装完成, 通过 docker version 去看: 5)docker-compose 文件统一放在/usr/local/bin/ 下面,通过命令chmod +x docker-compose 给compose文件赋予可执行权限: 二.常用Do

Ubuntu系统利用docker容器发布简单的应用

我的电脑装的是ubuntu系统,所以以ubuntu为例来写 由于后边涉及到程序的可移植性验证,我们先在docker hub上注册一个账号(注册地址),记住用户名! (全文直接附命令,由于我没有配置docker获得root权限,所以涉及到的docker操作命令前都要加sudo,觉得不方便的话可以再百度找找怎么办) 首先看你的ubuntu系统是否支持Docker(一般高于3.10即可) uname -r 一  前期准备 1.获取docker安装包 wget -qO- https://get.dock

关于自动化部署之docker容器的折腾小记

docker的英文本意是码头工人,也就是搬运工,这种搬运工搬运的是集装箱(Container),集装箱里面装的可不是商品货物,而是任意类型的App,Docker把App(叫Payload)装在Container内,通过Linux Container技术的包装将App变成一种标准化的.可移植的.自管理的组件,这种组件可以在你的latop上开发.调试.运行,最终非常方便和一致地运行在production环境下. 具体什么是docker,你们自己找资料吧,应该好理解.   可以说是个运维的利器,可以把

Docker容器基本知识

一.Docker 简介 1.1什么是Docker 简单的说Docker是一个构建在LXC之上的,基于进程容器(Processcontainer)的轻量级VM解决方案: 1.2为什么要用Docker而不是用虚拟机 在公司中的一个很大的用途就是可以保证线下的开发环境.测试环境和线上的生产环境一致.当年在 Baidu 经常碰到这样的事情,开发把东西做好了给测试去测,一般会给一坨代码和一个介绍上线步骤的上线单.结果代码在测试机跑不起来,开发就跑来跑去看问题,一会儿啊这个配置文件忘了提交了,一会儿啊这个上