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

被折叠的 条评论
为什么被折叠?



