欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker容器的使用

程序员文章站 2024-03-11 19:08:19
...

创建容器

使用Docker create 来创建容器

$ docker create ubuntu:18.04

使用该命令创建容器后,容器处于停止状态


启动容器

$ docker start Contain_ID

 

创建并启动容器

$ docker run ubutnu:18.04 /bin/echo "Hello,World"
Hello,World

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

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

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

>  分配一个文件系统给容器,并且制度的镜像蹭外面挂在一层可读写层

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

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

>  执行用户指定的应用程序执行完毕后容器被自动终止

终止容器

$ docker stop Contain_ID

重启容器将一个运行状态的容器先终止,再启动它

$ docker restart Contain_ID

 

进入容器

运行程序的时候,使用了-d参数,容器启动进入后台,用户无法看到容器中的信息,也无法进行操作。

这时候如果需要操作,有多种方法,包括官方的attach 或者exec 命令,以及第三方的 nsenter 工具等。

> attach 命令

[email protected]:~# docker attach stupefied_hopper
[email protected]:/# 

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

> exec 命令

Docker 从1.3.0 版本提供了一个更加方便的exec 命令,可以在容器内直接执行任意命令。

基本格式: docker exec [-d | --derach] [--detach-keys[=[]]] [-i | --interactive] [--privileged] [-t | --yyt] [-u | --user[=USER]] CONTAINER COMMAND [ARG]

比较重要的参数有:

-i , --interactive:打开标准输入接受用户输入明林,默认为false

--privileged=true | false:是否给执行命令最高权限,默认为flase

-t , --yyt=true |false:分配伪终端,默认为false

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

$ docker exec -it 6e6a32347a2c /bin/bash
root#6e6a32347a2c: /#

可以看到,一个bash 终端打开了,在不影响其它应用的前提下,用户可以轻易与容易进行交互

> 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 --formate "{{.State.Pid}}" <container>)

然后通过 nsenter 命令进入容器:

$ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
6e6a32347a2c        ubuntu:18.04        "/bin/bash"         16 hours ago        Exited (0) 24 minutes ago                       stupefied_hopper
$ PID=$(docker-pid 6e6a32347a2c)
10981
$ nsenter --target 10981 --mount --uts --ipc --net --pid

进一步可以在容器中查看用户和进程信息:

[email protected] :/# w

删除容器

可以使用 docker rm 命令来删除处于终止状态或者推出状态的容器

命令格式:docker rm [-f |-force] [-i | --link] [-v |--volumes] CONTAINER [CONTAINER]...

主要支持的选项包括

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

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

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

 

导入与导出容器

需要将容器从一个系统迁移到另一个系统,此时可以使用 Docker 的导入和导出功能。这也是 Docker 自身提供的一个重要特性

导出容器

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

格式: docker export [-o | --output[=""]] CONTAINER

其中可以使用-o来指定导出的tar的文件名:

$ docker export -o test.tsr Container_ID
#or
# docker export Container_ID > test.tar

之后可以将导出的tar文件传输到其他机器上,然后通过导入命令导入到系统中,从而实现容器的迁移

导入容器

导入的文件可以使用 docker impoer 命令导入变成镜像

命令格式:docekr import [-c | --change[=[]]] [-m|--message[=MESSAGE]] file |URL|-[REPOSITORY[:TAG]]

下面将导出的 test.tar 文件导出到系统中:

$ docker import test.tar - test/ubuntu:18.04

 

相关标签: 容器 Docker