docker容器操作

本文详细介绍了Docker容器的各种操作,包括如何创建、启动、命名、停止、查看、重启、导出和导入容器,以及如何进入和退出容器,强调了守护式容器的创建及其日志查看,提供了一些实用的操作示例。

一、环境说明

1、docker: 19.03.5

创建容器

1、docker create

docker create命令可以新建一个容器, 但是不启动容器。

2、示例

创建一个redis容器:

$ docker create redis
Unable to find image 'redis:latest' locally
latest: Pulling from library/redis
000eee12ec04: Pull complete 
5cc53381c195: Pull complete 
48bb7bcb5fbf: Pull complete 
ef8a890bb1c2: Pull complete 
32ada9c6fb0d: Pull complete 
76e034b0f296: Pull complete 
Digest: sha256:1eedfc017b0cd3e232878ce38bd9328518219802a8ef37fe34f58dcf591688ef
Status: Downloaded newer image for redis:latest
d7e87d4c19ba33f1508b66cf1de10b66b1688bc50a886c46de7f3f391e361dd3
root@iZwz94kwqu5mk9oxpv2m2tZ:~#

创建并启动容器

1、docker run

docker run命令可以新建并启动一个容器,可以使用docker run --help查看该命令的具体用法。

2、 示例

$ docker run -i -t ubuntu /bin/bash
root@034c4d3494bd:/# 

上面的操作启动了一个ubuntu容器。
(1)-i: --interactive, 保证容器的标准输入(stdin)是一直开启的。即在命令行可以输入。
(2)-t: --tty,分配一个伪tty终端(pseudo-tty)。 即出现root@034c4d3494bd:/#提示符,但是不可以输入。
(3) /bin/bash: 提供了一个shell。
(4)root@034c4d3494bd中,034c4d3494bd表示容器的ID。

3、说明

docker run 命令背后,docker在后台执行的操作如下“

(1)寻找镜像。检查本地是否存在镜像(如Ubuntu),如果不存在则到Docker Hub寻找,如果在Docker Hub找到就下载并保存到本地宿主机中。

(2)利用镜像创建并启动一个容器。该容器拥有自己的网络,IP地址,以及一个用来和宿主机进行通信的桥接网络接口。

(3)运行用户指定的命令。如: /bin/bash

给容器命名字

1、–name

在很多操作中,使用容器ID并不方便人们记忆与分辨容器,为了解决这种情况,可以使用 --name参数给容器命名。

2、示例

docker run --name sweeneys_container -i -t  ubuntu /bin/bash
root@1ff74ef6e620:/# 

3、说明

(1)命名规范

小写字母a-z, 大写字母A-Z, 数字0-9,下划线,圆点,中划线。用正在表达式表示为:

[a-zA-Z0-9_.-] 

(2)容器的名字具有唯一性。

退出容器

1、exit

可以使用 exit命令停止容器,返回到命令行提示符窗口。当然,也可以使用 Ctrl+D快捷键退出容器。

2、示例

root@034c4d3494bd:/# exit
exit
root@iZwz94kwqu5mk9oxpv2m2tZ:~# 

停止容器

1、docker stop

停止一个容器可以使用 docker stop 或者 docker container stop 命令。具体用法可以通过--help 命令查看。

2、示例

$ docker stop f8f8cbec08fa
f8f8cbec08fa

上面的操作实现了停止ID为 f8f8cbec08fa 的容器,并返回该被停止容器的ID。

查看容器

1、docker ps

虽然退出容器后容器停止了,但是容器还是存在的。可以使用 docker ps 或者 docker container ls 命令查看容器。具体用法可以通过--help 命令查看。

2、示例

(1)查看所有容器

$ root@iZwz94kwqu5mk9oxpv2m2tZ:~# docker ps -a
CONTAINER ID    IMAGE   COMMAND      CREATED  STATUS    PORTS   NAMES
f8f8cbec08fa    ubuntu  "/bin/bash"  9 hours  Exited...         youthful_diffie
4161fd2abd43    ubuntu  "/bin/bash"  9 hours  Exited...         reverent_williamson

(2)查看正在运行的容器

docker ps 
CONTAINER ID   IMAGE      COMMAND      CREATED      STATUS      PORTS          NAMES
root@iZwz94kwqu5mk9oxpv2m2tZ:~# 

3、docker inspect

除了使用 docker ps命令获取容器信息,还可以使用 docker inspect命令获得更多的容器信息。


启动已经停止的容器

1、docker start

使用 docker start 或者 docker container start 可以重新启动一个已经停止的容器。容器重新启动的时候会沿用 执行docker run命令时指定的参数来运行。

2、示例

前面通过 docker ps -a命令查看到容器所有的容器,选择其中一个容器(如ID为f8f8cbec08fa的容器)重新启动。

$ docker start f8f8cbec08fa
f8f8cbec08fa
root@iZwz94kwqu5mk9oxpv2m2tZ:~#

查看正在运行的容器, 此时可以看到ID为f8f8cbec08fa已经启动:

$ docker ps 
CONTAINER ID  IMAGE   COMMAND      CREATED      STATUS   PORTS      NAMES
f8f8cbec08fa  ubuntu  "/bin/bash"  10...        Up...               youthful_diffie

创建守护式容器

1、守护进程(daemon)

什么是守护式容器?那么先来了解下什么是守护进程,根据维基百科的解释,简单的概括就是守护进程是一种特殊的进程,一直在后台运行的进程。同理,守护式容器(daemonized container)就是一直在后台运行的容器。相对于交互式容器(interactive container), 守护式容器没有交互式会话。

2、-d

使用-d参数可以创建一个守护式容器:

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

此时只返回容器的ID。

对比:如果我们创建的不是守护式容器,而是交互式容器(interactive contianer),那么结果如下:

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

3、获取容器日志(docker logs)

启动守护式容器后,如果我们想看容器在做什么,那么可以使用 docker logs命令或者 docker container logs命令获取容器日志。

$ docker logs 621a06e4f6e0
hello world
hello world
hello world

进入容器

如果有时候我们需要在新窗口进入到一个已经运行的容器中怎么办呢?那么可以使用 docker attach或者 docker exec命令实现。 具体用法使用--help命令查看。

1、docker attach

$ docker attach my_ubuntu
root@70b047cac908:/# 

2、docker exec

$ docker exec -it my_ubuntu1 /bin/bash
root@70b047cac908:/# 

3、attach vs exec

(1)在执行 exit 命令退出时,通过attach命令进入的容器会停止;而通过execc命令进入的容器不会停止。
(2)exec命令中,必须跟一个进入到容器中后执行的命令,如/bin/bash,而 attach命令则不需要。

导入和导出容器

1、导出(export)

不管容器处于什么状态,都可以使用 docker export命令导出一个已经创建的容器快照到一个文件。具体用法可用--help命令查看。

(1)语法一:

$ docker export -o /home/running_ubuntu.tar f1e2805db1c1

上面的操作实现:将ID为 f1e2805db1c1 的容器导出为 /home/ 目录下的 running_ubuntu.tar文件。

(2)语法二:

docker export my_ubuntu > /home/stopped_ubuntu.tar

上面的操作实现:将名字为 my_ubuntu 的容器导出为 /home/ 目录下的 stopped_ubuntu.tar文件。

2、导入( import)

可以使用 docker import命令将一个容器快照导入为 镜像。具体用法可用--help命令查看。

$ docker import /home/stopped_ubuntu.tar ubuntu
sha256:9bc7385e637ec72498670001907b40a89b81989fbcfe88df52dd09f44580f9f3

(1)ubuntu:仓库名。

然后列出所有的镜像,就可以看到刚才导入的镜像:

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
ubuntu              latest              9bc7385e637e        About a minute ago   64.2MB
ubuntu              16.04               56bab49eef2e        2 weeks ago          123MB
redis               latest              dcf9ec9265e0        3 weeks ago          98.2MB
ubuntu              <none>              775349758637        6 weeks ago          64.2MB
hello-world         latest              fce289e99eb9        11 months ago        1.84kB

ID为9bc7385e637e的镜像即为刚刚导入的。

删除容器

1、docker rm

可以使用 docker rm 或者 docker container rm命令删除一个已经停止的容器。可以添加 -f 标志来删除一个正在运行的容器。一次删除所有容器可以使用 ``命令。

2、示例

$ docker rm 1a2eed24763f
1a2eed24763f

3、说明

(1)一次性删除所有已停止的容器可以使用 docker container prune命令

$ docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
5e3108c8d1dd3fc140d0bc4abb870b85fe307406ee75209aa187fb80e62ba575
...
9d7b78af99465ef2fdeab4ddde715029ac3d2948a6e7129d1fa01bc470ddddc6

Total reclaimed space: 111B

(2) 一次性删除所有容器

$ docker rm -f $(docker ps -aq)

说明:-q参数返回容器id。

参考资料

ant to continue? [y/N] y
Deleted Containers:
5e3108c8d1dd3fc140d0bc4abb870b85fe307406ee75209aa187fb80e62ba575

9d7b78af99465ef2fdeab4ddde715029ac3d2948a6e7129d1fa01bc470ddddc6

Total reclaimed space: 111B


(2) 一次性删除所有容器

$ docker rm -f $(docker ps -aq)


说明:-q参数返回容器id。

# 参考资料

[1]docker官方文档,命令列表:https://docs.docker.com/reference/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值