0

Docker入门学习

 1 year ago
source link: https://blog.51cto.com/u_13753753/5725712
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Docker入门学习

精选 原创

雍州无名 2022-09-30 11:30:22 博主文章分类:docker ©著作权

文章标签 docker bash ubuntu 文章分类 其它 数据库 阅读数239

1.运行第一个docker容器

docker run -i -t ubuntu /bin/bash

参数说明:

-i, --interactive=false, 打开STDIN,用于控制台交互
-t, --tty=false, 分配tty设备,该可以支持终端登录,默认为false
-d, --detach=false, 指定容器运行于前台还是后台,默认为false

首先,docker run -it ubuntu 的意思是,为centos这个镜像创建一个容器, -i和-t这两个参数的作用是,为该docker创建一个伪终端,这样就可以进入到容器的交互模式?(也就是直接进入到容器里面)后面的/bin/bash的作用是表示载入容器后运行bash ,docker中必须要保持一个进程的运行,要不然整个容器启动后就会马上kill itself,这样当你使用docker ps 查看启动的容器时,就会发现你刚刚创建的那个容器并不在已启动的容器队列中。这个/bin/bash就表示启动容器后启动bash

Docker入门学习_ubuntu

2.使用第一个容器

现在我们已经以root用户登录到了新容器中,容器的id是21af97ac0b0b

hostname

Docker入门学习_bash_02

可以看到,容器的主机名就是该容器的id,我们再来看看/etc/hosts文件

Docker入门学习_bash_03

docker已经再hosts文件中为该容器的ip地址添加了一条主机配置项。再看看容器的网络配置情况,由于容器中没有ifconfig 命令,首先通过以下命令安装

apt-get update
apt install net-tools # ifconfig
apt install iputils-ping # ping
Docker入门学习_bash_04

可以看到lo的环回接口,还有ip为172.17.0.2的标准eth0网络接口,和普通宿主机是完全医院的。还可以查看容器中运行的进程

Docker入门学习_bash_05

如果需要编辑文件,需要安装vim软件

apt install vim

当所有工作都结束时,输入exit,就可以返回到Ubuntu宿主机的命令行提示符了。但是这个时候容器就停止运行了,只有在指定的/bin/bash命令处于运行状态的时候,我们的容器也才会相应地处于运行状态。一旦退出容器,/bin/bash命令也就结束了,这时容器也随之停止了运行。

但是容器仍然是存在的,我们可以使用以下命令来查看当前系统中容器的列表

docker ps -a

默认情况下,当执行docker ps命令时,只能看到正在运行的容器,如果指定-a标志,那么会列出所有的容器,包括正在运行和已经停止的。

docker ps -l

Docker入门学习_docker_06

从该命令的输出结果中我们可以看到关于这个容器的很多有用信息:id、用于创建该容器的镜像、容器最后执行的命令、创建时间以及容器的退出状态(在上面的例子中,退出状态是0,因为容器是通过正常的exit命令退出的)

3.容器命名

docker会为我们创建的每一个容器自动生成一个随机的名称。例如,上面创建的容器就被命名为sleepy_sutherland,如果想为容器指定一个名称,则可以使用--name标志来实现(容器命名必须唯一)

docker run --name my-ubuntu -i -t ubuntu /bin/bash

Docker入门学习_bash_07

4.重新启动已经停止的容器

名称为sleepy_sutherland的容器已经停止,可以使用以下命令启动(支持start、stop、restart)

docker start sleepy_sutherland

除了容器名称,也可以使用容器id来指定容器

docker start 21af97ac0b0b

5.附着到容器

当容器启动后,我们可以使用以下命令,重新附着到该容器的会话上

docker attach sleepy_sutherland
docker attach 21af97ac0b0b

如果退出容器的shell,容器也会随之停止运行

6.创建守护式容器

除了这些交互式运行的容器(interactive container),我们可以创建长期运行的容器。守护式容器(daemonized container)

没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器。

docker run --name daemon_dave -d ubuntu /bin/sh -c "while true;do echo hello workd; sleep 1; done"

上面docker run 命令使用了-d参数,因此docker会将容器放到后台运行,容器里运行了一个while循环,该循环会一直打印hello world,直到容器或其进程停止运行

7.容器内部都再干些什么

现在我们已经有了一个在后台运行while循环的守护型容器,为了知道容器内部都在干什么,我们可以使用docker logs命令来获取容器的日志

docker logs daemon_dave
Docker入门学习_ubuntu_08

这里,我们可以看到while循环正在向日志里打印hello world。docker会输出最后几条日志项并返回。我们也可以在命令后使用-f参数来监控docker的日志,这与tail -f命令非常相似

docker logs -f daemon_dave

可以用以下命令获取日志的最后10行内容,命令如下

Docker入门学习_docker_09

跟踪某个容器的最新日志而不必读取整个日志文件,命令如下

docker logs --tail 0 -f daemon_dave
Docker入门学习_docker_10

使用-t标志为每条日志项加上时间戳,命令如下

docker logs -ft daemon_dave
Docker入门学习_docker_11

8.查看容器内的进程

docker top daemon_dave

Docker入门学习_ubuntu_12

9.在容器内部运行进程

docker exec -d daemon_dave touch /etc/new_config_file

上面例子中的命令会在daemon_dave容器内创建一个空文件。

也可以在daemon_dave容器中启动一个打开shell的交互式任务,命令如下

docker exec -t -i daemon_dave /bin/bash

和运行交互容器时一样,这里的-t和-i标志为我们执行的进程创建了TTY并捕捉STDIN。上面这个意思中,这条命令会在daemon_dave容器内创建一个新的bash会话,有了这个会话,我们可以在该容器中运行其他命令了。

10.停止守护式容器

docker stop daemon_dave

注意:docker stop命令会向docker容器进程发送SIGTERM信号,如果你想快速停止某个容器,也可以使用docker kill命令来向容器进程发送SIGKILL信号

要想查看已经停止

的容器的状态,则可以使用docker ps命令,还有一个很实用的命令,docker ps -n x ,该命令会显示最后x个容器,不论这些容器正在运行还是已经停止

docker ps -n 3

Docker入门学习_bash_13

11.自带重启容器

如果由于某种错误而导致容器停止运行,我们换可以通过--restart标志,让docker自动重新启动该容器,--restart标志会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是docker不会重启容器。

docker run --restart=always --name daemon_dave -d ubuntu /bin/sh -c "while true;do echo hello workd; sleep 1; done"

在本例中,--restart标志被设置为always。无论容器的退出代码是什么,docker都会自动重启该容器。除了always,可以将这个标志设为on-failure,这样,只有当容器的退出代码为非0值的时候才会自动重启。另外,on-failure还接受一个可选性的重启次数参数,如下

docker run --restart=on-failure:5 --name daemon_dave -d ubuntu /bin/sh -c "while true;do echo hello workd; sleep 1; done"

这样,当容器退出代码为非0时,docker会尝试自动重启该容器,最多重启5次

12.深入容器

docker inspect命令会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置以及很多有用的数据

docker inspect daemon_dave
Docker入门学习_bash_14

可以使用-f或者--format标志来选定查看结果,下面这条命令会返回容器的运行状态

docker inspect --format='{{ .State.Running }}' daemon_dave
Docker入门学习_docker_15

还可以获取容器的ip信息

docker inspect --format='{{ .NetworkSettings.IPAddress }}' daemon_dave

Docker入门学习_ubuntu_16

也可以同时指定多个容器,并显示每个容器的输出结果

docker inspect --format='{{.Name}} {{ .State.Running }}' daemon_dave my-ubuntu

Docker入门学习_docker_17

注意:除了查看容器,你还可以通过浏览/var/lib/docker目录来深入了解docker的工作原理。该目录存放着docker镜像、容器以及容器的配置。所有的容器都保存在/var/lib/docker/containers

13.删除容器

如果容器已经不再使用,可以使用docker rm命令来删除它们(需要注意的是,运行中的docker容器是无法删除的!你必须先通过docker stop或docker kill命令停止容器,才能将其删除)

docker rm daemon_dave3

目前,还没有办法一次删除所有容器,不过可以通过代码清单来删除全部容器

docker rm `docker ps -a -q`

上面docker ps命令会列出现有的全部容器,-a标志代表列出所有(all)容器,而-q标志则表示只需要返回容器id而不会返回容器的其他信息。这样我们就得到了容器id的列表,并传给了docker rm命令,从而达到删除所有容器的目。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK