Docker容器操作的命令

##### 1.4Docker容器操作

Docker 容器和文件夹很类似,一个Docker容器包含了所有的某个应用运行所需要的环境。每一个 Docker 容器都是从 Docker  镜像创建的。Docker 容器可以运行、启动、停止、移动、删除、暂停(挂起)。每一个 Docker 容器都是独立和安全的应用平台,Docker 容器是  Docker 的运行一部分。

1、容器的创建与启动

命令格式:

docker create [选项] 镜像 运行的程序

常用选项:

-i    ------   让容器的输入保持打开状态

-t  -------   让Docker分配一个伪终端

-d-------后台运行

```

[root@docker2 ~]# docker create -it nickistre/centos-lamp /bin/bash

WARNING: IPv4 forwarding is disabled. Networking will not work.

d149428efbcb5f56b33057977a16f7daca79defcd86561e1b14120de55fe7505

```

它会在所有的镜像层之上增加一个可写层。这个可写层有运行在CPU上的进程,而且有两个不同的状态:运行态(Running)和退出态 (Exited)。这就是Docker容器。当我们使用docker  run启动容器,Docker容器就进入运行态,当我们停止Docker容器时,它就进入退出状态。

```

###查看容器的信息

[root@docker2 ~]# docker ps -a

CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES

d149428efbcb        nickistre/centos-lamp   "/bin/bash"         35 seconds ago      Created                                 infallible_noyce

```

docker ps -a命令的输出信息显示了容器的ID号、加载的镜像、运行的程序、创建时间、目前所处的状态、端口映射。其中状态一栏为空,表示当前的容器处于停止状态。

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

```

[root@docker2 ~]# docker start d149428efbcb

d149428efbcb

[root@docker1 ~]# docker ps

CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS                     NAMES

d149428efbcb        nickistre/centos-lamp   "/bin/bash"         2 minutes ago       Up 38 seconds       22/tcp, 80/tcp, 443/tcp   infallible_noyce



 

```

启动容器后,可以看到容器状态一栏变为up,表示容器已经处于启动状态。

如果用户想创建并启动容器,可以直接执行docker run命令,等同于先执行docker create命令,再执行docker start命令。

利用docker run命令创建容器时,Docker在后台的标准运行过程如下:

(1)检查本地是否存在指定的镜像。若镜像不存在,会从公共仓库下载。

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

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

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

(5)分配一个地址池中的IP地址给容器。

(6)执行用户指定的应用程序,执行完毕后容器被终止运行。

```

[root@docker1 ~]# docker ps -a | grep d149428efbcb

d149428efbcb        nickistre/centos-lamp   "/bin/bash"         8 minutes ago       Up 6 minutes        22/tcp, 80/tcp, 443/tcp   infallible_noyce

[root@docker2 ~]# docker run centos /usr/bin/bash -c ls /

Unable to find image 'centos:latest' locally

latest: Pulling from library/centos

a1d0c7532777: Pull complete

Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177

Status: Downloaded newer image for centos:latest

bin

dev

etc

home

lib

lib64

lost+found

media

mnt

opt

proc

root

run

sbin

srv

sys

tmp

usr

var

[root@docker2 ~]# docker ps -a

CONTAINER ID        IMAGE                   COMMAND                  CREATED              STATUS                          PORTS                     NAMES

08c5400ddcfc        centos                  "/usr/bin/bash -c ls…"   About a minute ago   Exited (0) About a minute ago                             zen_volhard

d149428efbcb        nickistre/centos-lamp   "/bin/bash"              12 minutes ago       Up 10 minutes                   22/tcp, 80/tcp, 443/tcp   infallible_noyce

```

查看容器的运行状态,可以看出,容器在执行"/usr/bin/bash -c ls"命令之后就停止了。

有时候需要在后台持续地运行一个容器,这就需要让Docker容器以守护进程的形式在后台运行。可以在docker run命令之后添加-d选项来实现,但是需要注意容器所运行的程序不能结束。

```

[root@docker1 ~]# docker run -itd --name mycentos centos:7 /bin/bash

Unable to find image 'centos:7' locally

7: Pulling from library/centos

2d473b07cdd5: Pull complete

Digest: sha256:9d4bcbbb213dfd745b58be38b13b996ebb5ac315fe75711bd618426a630e0987

Status: Downloaded newer image for centos:7

76a2455cc7d58e6ca6e56483b6a32ebe710a14b34126b1508bbf01be342ac9c2

[root@docker2 ~]#docker execit -it mycentos /bin/bash

[root@docker2 ~]#yum repolist

[root@docker2 ~]# docker run -d centos /usr/bin/bash -c "while true;do echo hello;done"

1fe95e863cc797033d12bf86cf928b82ec8d20095dbfe79d60e0a7ad4a513de7

[root@docker2 ~]# docker ps -a

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                     PORTS                     NAMES

3ffda31384ac        centos                          "/usr/bin/bash -c 'w…"   15 seconds ago      Up 13 seconds                                        epic_ardinghelli

```

2、容器的运行与终止

docker stop

docker stop 容器的ID/名称

```

[root@docker2 ~]# docker stop 3ffda31384ac

3ffda31384ac

[root@docker2 ~]# docker ps -a

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                       PORTS                     NAMES

3ffda31384ac        centos                          "/usr/bin/bash -c 'w…"   2 minutes ago       Exited (137) 3 seconds ago                             epic_ardinghelli

```

可以看出容器处于Exited的终止状态

3、容器的进入

当需要进入容器进行相应操作时,可以使用docker exec命令

命令格式:

docker exec -it 容器ID/名称  /bin/bash

-i ---让容器的输入保持打开状态

-t---让Docker分配一个伪终端

```

[root@docker2 ~]# docker run -itd nginx /bin/bash

fac0c75a113209dfb1f20539ddc148d6d30ebbd8316877dbb32a341de642a3bd

[root@docker2 ~]# docker ps

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                     NAMES

fac0c75a1132        nginx                           "/docker-entrypoint.…"   3 seconds ago       Up 2 seconds        80/tcp                    boring_nobel

[root@docker2 ~]# docker exec -it fac0c75a1132 /bin/bash

root@fac0c75a1132:/# exit

exit

```

4、容器的导出与导入

用户可以将任何一个Docker容器从一台机器迁移到另一台机器。在迁移过程中,可以使用docker export命令将已经创建好的容器导出为文件,无论这个容器是处于运行状态还是停止状态。导出文件可以传输到其他容器,也可以通过相应的导入命令实现容器的迁移。

命令格式:

docker export 容器ID/名称  > 文件名

```

[root@docker2 ~]# docker ps -a

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS                        PORTS                     NAMES

fac0c75a1132        nginx                           "/docker-entrypoint.…"   5 minutes ago       Up 5 minutes                  80/tcp                    boring_nobel

[root@docker2 ~]# docker export fac0c75a1132 >nginxtar

[root@docker2 ~]# ls -l nginxtar

-rw-r--r-- 1 root root 144023040 Feb 18 14:02 nginxtar

```

将导出的文件从A机器复制到B机器,之后使用docker import命令导入镜像。

命令格式:

cat 文件名 |docker import - 生成的镜像名称:标签

```

[root@docker2 ~]# scp nginxtar 192.168.200.11:/root

[root@docker1 ~]# cat nginxtar |docker import - nginx:test

sha256:e8023767dfdc5ffc65d531a996259d32c6aee5cb491b6648887bc507d155fdcc

```

5、容器的删除

docker rm

命令格式:

docker rm 容器ID/名称

```

[root@docker2 ~]# docker ps

CONTAINER ID        IMAGE                           COMMAND                  CREATED             STATUS              PORTS                     NAMES

fac0c75a1132        nginx                           "/docker-entrypoint.…"   13 minutes ago      Up 13 minutes       80/tcp                    boring_nobel

[root@dokcer2 ~]# docker rm -f fac0c75a1132

fac0c75a1132

```

docker默认的存储目录在/var/lib/docker下,Docker的镜像、容器、日志等内容全部存储在此目录中,可以单独使用大容量的分区来存储这些内容。一般选择建立LVM逻辑卷,从而避免Docker运行过程中存储目录容量不足的问题。

你可能感兴趣的:(关于云计算,docker,容器,运维)