Docker基础-容器操作

1、创建容器

1.新建容器

  可以使用docker create命令新建一个容器。

[[email protected] ~]# docker create -it ubuntu:latest
ffc9099be315f1b94876410c7d74dcd20e311e735e638080dd477534c063a6d6
[[email protected]-node1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ffc9099be315        ubuntu:latest       "/bin/bash"         8 seconds ago       Created                                 optimistic_pare
[[email protected]-node1 ~]# 

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

2.启动容器

  使用docker start命令可以启动一个停止状态的容器。

[[email protected] ~]# docker start ffc9099be315
ffc9099be315
[[email protected]-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
ffc9099be315        ubuntu:latest       "/bin/bash"         About a minute ago   Up 8 seconds                            optimistic_pare
[[email protected]-node1 ~]# 

3.新建并启动容器

  除了可以用start命令来启动容器,也可以在新建的时候直接启动容器。使用docker run命令即可

[[email protected] ~]# docker run ubuntu:latest /bin/echo "Hello Docker"
Hello Docker
[[email protected]-node1 ~]#

  说明:

docker run启动容器时,docker在后台一共做了下面这些事:
    1.检查本地是否存在指定的镜像,不存在就从共有仓库下载;
    2.利用镜像创建一个容器,并启动该容器;
    3.分配一个文件系统给容器,并在只读的镜像层外面挂载一层可读写层;
    4.从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中;
    5.从网桥的地址池配置一个IP地址给容器;
    6.执行用户指定的应用程序;
    7.执行完毕后,容器被终止。

  docker run -it ubuntu:latest /bin/bash 可以启动一个bash终端,允许用户交互:
      -t参数:让docker分配一个伪终端绑定到标准输出
      -i参数:让伪终端的标准输入保持开启状态,接收用户输入,实现交互
      用exit命令或者ctrl + d命令退出容器4.守护态运行

4.守护态运行

  很多时候我们需要让容器在后台以守护态(Daemonized)形式运行。此时可以通过-d参数来实现。

[[email protected] ~]# docker run -d ubuntu:latest /bin/bash -c "while true;do echo hello docker;sleep 1;done"
3778a35ff4bcbf8cbd3934601e9ca2bfd33034f8a4cc69b6d76e0811c910e1e0
[[email protected]-node1 ~]# 

  可以通过docker logs [ID]查看容器的输出信息:

[[email protected] ~]# docker logs 3778a
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker
hello docker

2、终止容器

  可以使用docker stop命令来停止一个正在运行中的容器。命令格式为:docker stop [-t|--time[=10]] [CONTAINER...]
  执行了docker stop命令之后,docker首先会向容器发送SIGTERM信号,等待一段时间(默认10秒)后,再发送SIGKILL信号来终止容器。

[[email protected] ~]# docker stop 3778a  #执行该命令后,终端会等待10秒才会有终止容器的返回信息3778a
3778a
[[email protected]-node1 ~]#

  docker kill命令可以跳过SIGTERM信号,直接发送SIGKILL信号终止容器。

[[email protected] ~]# docker kill ffc    #该命令执行后,马上会返回终止容器的信息ffc
ffc
[[email protected]-node1 ~]# 

3、启动和重启容器

  docker start命令可以启动一个停止状态的容器。
  docker restart命令先会停止该容器,然后重新启动该容器。

4、进入容器

  在使用-d参数启动容器后,容器直接运行在后台,用户无法看到容器中的信息,也无法进行操作。
  要进入容器有多种方法,其中最常见的是官方的attach或exec命令还有第三方的nsenter工具。

1.attach命令

  attach是docker自带的命令,命令格式为:docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
  支持三个主要选项:

--detach-keys[=[]]        指定退出attach模式的快捷键序列,默认是CTRL -p CTRL -q
--no-stdin=true|false    是否关闭标准输入,默认是保持打开
--sig-proxy=true|false    是否代理收到的系统信号给应用进程,默认为true。

  举例如下:

[[email protected] ~]# docker run -itd centos:latest
b73595139275b9feaf077c6c537e89ecb16e19b399217b0cacc71bea164acf50
[[email protected]-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS           NAMES
b73595139275        centos:latest       "/bin/bash"         11 seconds ago      Up 9 seconds                      gifted_hypatia
[[email protected]-node1 ~]# docker attach gifted_hypatia
[[email protected] /]# pwd
/
[[email protected] /]# exit
exit
[[email protected]-node1 ~]# 

  使用attach命令并不是很方便,当多个窗口同时用attach命令连接到同一个容器的时候,所有窗口都会同步显示。无法独立操作。

2.exec命令

  docker从1.3.0版本开始提供了一个更加方便的命令exec,可以直接在容器内执行任意命令。命令格式为:
  docker exec [-d|--detach] [--detach-keys=[[]]] [-i|--iteractive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
  参数说明:

-i,--iteractive=true|false    打开标准输入接收用户输入的命令,默认为false
--privileged=true|false        是否给执行命令以最高权限,默认为false
-t,--tty=true|false            分配伪终端,默认为false
-u,--user=""                   执行命令的用户名或ID

  举例如下:

[[email protected] ~]# docker run -itd centos:latest
c50284d43c2a00e10a8f02eca97c9404bf3bccb6c9759e6196b74ad31ddb42fd
[[email protected]-node1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS           NAMES
c50284d43c2a        centos:latest       "/bin/bash"         3 seconds ago       Up 2 seconds                      relaxed_lamport
[[email protected]-node1 ~]# docker exec -it c5028 /bin/bash
[[email protected] /]# 

3.nsenter工具

  为了连接到docker的容器,还要先找出容器进程的PID,可以通过下面的命令获取:

PID=`docker inspect -f "{{.State.Pid}}" c50284d43c2a`   #c50284d43c2a为容器的ID号

  为了方便使用写了一个脚本docker-pid直接可以输出指定容器进程的PID号:

#!/bin/bash

PID=`docker inspect -f "{{.State.Pid}}" $1`
echo $PID
#使用方法:./docker-pid 容器ID或者容器名

  举例如下:

[[email protected] ~]# docker-pid 50284d43c2a
22375
[[email protected]-node1 ~]# nsenter --target 22375 --mount --uts --ipc --net --pid
[[email protected] /]# pwd
/
[[email protected] /]# ip a
-bash: ip: command not found
[[email protected] /]# 

4、删除容器

  使用docker rm命令删除处于退出或者终止状态的容器,命令格式为:docker rm [-f|--force] [-l|--link] [-v|--volumes] CONTAINER [CONTAINER...]
  参数说明:

-f,--force=false       是否强行终止并删除一个正在运行中的容器
-l,--link=false        删除容器的链接,但保留容器
-v,--volumes=false     删除容器挂载的数据卷

  举例如下:

[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
a6f06de9d30b        ubuntu:latest       "/bin/bash"         7 seconds ago       Exited (0) 5 seconds ago                       condescending_bassi
c50284d43c2a        centos:latest       "/bin/bash"         23 minutes ago      Up 23 minutes                                  relaxed_lamport
[[email protected]-node1 ~]# docker rm a6f06de9d30b
a6f06de9d30b
[[email protected]-node1 ~]# 

  docker rm只能删除退出或者终止状态的容器,并不能删除正在运行的容器,如果要删除正在运行的容器需要加-f参数

[[email protected] ~]# docker rm c50284d43c2a
Error response from daemon: You cannot remove a running container c50284d43c2a00e10a8f02eca97c9404bf3bccb6c9759e6196b74ad31ddb42fd. Stop the container before attempting removal or force remove
[[email protected]-node1 ~]#
[[email protected] ~]# docker rm -f c50284d43c2a
c50284d43c2a
[[email protected]-node1 ~]# 

5、导入和导出容器

  某些时候需要将容器从一个系统迁移到另一个容器,所以就需要将容器先导出,在新的系统导入。

1.导出容器

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

  参数说明:

-o,--output=""        指定打出的tar文件名,也可以直接重定向实现。

  举例如下:

[[email protected] ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
ca0f4155f3ff        centos:latest       "/bin/bash"         2 minutes ago       Up 2 minutes                                   nostalgic_golick
2b9d24d61777        ubuntu:latest       "/bin/bash"         2 minutes ago       Exited (0) 2 seconds ago                       gallant_agnesi
[[email protected]-node1 ~]# docker export -o test_for_run.tar ca0f
[[email protected] ~]# ls
anaconda-ks.cfg  docker-pid  test_for_run.tar  ubuntu-14.04-x86_64-minimal.tar.gz
[[email protected]-node1 ~]# docker export 2b9d > test_for_stop.tar
[[email protected] ~]# ls
anaconda-ks.cfg  docker-pid  test_for_run.tar  test_for_stop.tar  ubuntu-14.04-x86_64-minimal.tar.gz
[[email protected]-node1 ~]#

2.导入容器 

  导出的容器文件可以通过docker import导入变成镜像,命令格式为:
  docker import [-c|--change[=[]]] [-m|--message[=MESSAGE]] file|URL|- [RESPOSITORY[:TAG]]
  参数说明:

-c,--change=[]        在导入的同时执行对容器做出修改的Dockerfile指令。

  举例如下:

[[email protected] ~]# cat test_for_run.tar |docker import - test/ubuntu:0.2
sha256:0a3bc658748d0a73798b2db3316c56020697ed4f4407992b1327e4714b09f190
[[email protected]-node1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
test/ubuntu         0.2                 0a3bc658748d        7 seconds ago       197MB
test                0.1                 d751da3f9943        2 hours ago         221MB
ubuntu              16.04               20c44cd7596f        10 days ago         123MB
ubuntu              latest              20c44cd7596f        10 days ago         123MB
ubuntu              14.04               d6ed29ffda6b        10 days ago         221MB
staryjie/test       latest              d6ed29ffda6b        10 days ago         221MB
centos              latest              d123f4e55e12        3 weeks ago         197MB
[[email protected]-node1 ~]#
时间: 2024-10-12 23:06:13

Docker基础-容器操作的相关文章

005 docker的容器操作

一 . 概述 在前面的章节之中,我们可以从docker hub之中获取软件的镜像了,现在我们的主要任务就是 从镜像之中开启容器了. 总的来说,容器的启动要比docker 的敬相爱难过操作要麻烦一些,但是总体还是比较简单的. 二 . docker的容器操作 为了演示整个docker的容器操作,我们首先先下载一个tomcat算了,比较小,然后我们测试起来也比较方便. 细心的人已经看到了,我们下载一个tomcat竟然有120M,怎么比我们tomcat软件包大那么多呢? 其实,tomcat依赖了jdk,

docker 基础 之操作容器

启动容器 启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动. 新建并启动,所需要的命令主要为 docker run.例如,下面的命令输出一个 “Hello World”,之后终止容器. $ sudo docker run ubuntu:14.04 /bin/echo 'Hello world' Hello world 下面的命令则启动一个 bash 终端,允许用户进行交互. $ sudo docker run -t -i ubuntu:

docker基础知识 -- 操作容器(二)

实验环境 CentOS 7.5 容器 容器是镜像的运行实例.不同的是,镜像是静态的只读文件,而容器带有运行时需要的可写文件层:同时,容器中的应用进程处于运行状态. 进入容器 可使用以下命令进入容器: attach命令 docker container attach [OPTIONS] CONTAINER [root@kvm ~]# docker container attach --help Usage: docker container attach [OPTIONS] CONTAINER A

docker基础知识 -- 操作镜像

实验环境 CentOS 7.5 安装并启动docker yum install -y docker systemctl start docker 镜像 安装镜像 docker pull [OPTIONS] NAME[:TAG|@DIGEST] 注:对于Docker镜像来说,如果不显式地指定TAG,则默认会选择 latest标签,即下载仓库中最新版本的镜像. 从Docker Hub的CentOS仓库下载一个最新的CentOS操作系统的镜像. [[email protected] ~]# docke

Docker 基础入门

1.概念介绍 1.1 容器 1.1.1 介绍 容纳其它物品的工具,可以部分或完全封闭,被用于容纳.储存.运输物品.物体可以被放置在容器中,而容器则可以保护内容物. 1.1.2 要使用容器必须需要在内核级支持2中技术 namespaces 名称空间 Control Group(cgroups) 控制组 (1)为什么centos6 版本不能使用容器? 因为centos6 内核版本是2.6:容器需要一个user的名称空间,直到内核3.8版本才有:  namespace 系统调用参数  隔离内容  内核

Docker基础命令详解——镜像及容器操作

Docker基础命令详解--镜像及容器操作 前言 ? 上篇文章介绍了有关Docker的基础与Linux下docker的安装,本文主要讲解安装docker后的基础使用方法以及命令的介绍,主要是docker镜像操作及容器操作命令. ? 当然,docker的相关命令非常多,可以使用docker help命令查看对应目录以及相关提示命令. Docker镜像操作命令 [[email protected] ~]# which docker /usr/bin/docker 1.镜像搜索:docker sear

Docker 之 Docker基础操作

第1章 Docker基础操作 1.1 常用的命令 0) 安装Docker 环境 yum -y install docker 1)   指定 IP,DNS 网络位启动Docker容器 a)  docker -bip 192.168.6.233/28-dns 8.8.8.8 -g /data/docker/  -d 2)   在线pull image 镜像到本地 a)     Docker pull centos 3)   启动容器 a)     Docker run –i –t centos/bi

Docker 基础概念科普 和 常用操作介绍

Docker 基础概念 Docker是什么? Docker的思想来自于集装箱,集装箱解决了:在一艘大船上,可以把货物规整的摆放起来.并且各种各样的货物被集装箱标准化了,集装箱和集装箱之间不会互相影响.那么我就不需要专门运送瓷器的船和专门运送化学物品的船了.只要这些货物在集装箱里封装的好好的,那我就可以用一艘大船把他们都运走. 不同的应用程序可能会有不同的应用环境,比如.net开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都安装在一个服务器上就要调试很久,而且很麻烦,还会造成

Docker的安装、镜像操作、容器操作及资源控制

Docker概述 Docker是在linux容器里运行应用的开源工具,是一种轻量级的虚拟机.Docker包含三大核心概念,分别是:镜像.容器和仓库.Docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的.可移植的.自给自足的容器.通过这种容器打包应用程序,意味着简化了重新部署.调试这些琐碎的重复工作.极大地提高了工作效率. Docker容器与传统虚拟化的比较 特性 Docker容器 虚拟机 启动速度 秒级 分钟级 计算能力消耗 几乎无 消耗50% 性能 接近原生 弱于 单机系统支