Docker新手入门之三:Docker容器的基本使用
2018-02-20 20:20
555 查看
转载过程中,图片丢失,代码显示错乱。为了更好的学习内容,请访问原创版本:https://www.missshi.cn/api/view/blog/5a63279b0a745f6335000003Ps:初次访问由于js文件较大,请耐心等候(5s左右)
让我们来分析一下这条简单的命令吧:首先,我们给Docker执行的是
此外,我们指定了两个参数,分别是
Ps:通常
接下来,我们可以看到命令行中输入了
它是在告诉Docker基于哪个镜像来创建容器。
在我们指定某个镜像后,Docker首先会检查本地是否存在该镜像,如果没有找到该镜像,那么首先会连接到官方维护的Docker Hub Registry进行查找并下载。
最后的
命令完成后,我们将会看到我们进行了该容器内的shell:
总结一下,该命令最基本的运行格式如下:
该容器可以认为是一个完整的ubuntu系统,可以正常使用。
例如,我们可以试下如下命令:
此外,我们还可以安装一个软件包,以vim为例:
执行如下命令后,我们可以成功的安装完成vim。
当我们使用完成该容器后,可以使用
此时,容器会停止命令,同时我们回到了宿主机的命令行提示符。
Ps:此时,容器仅仅是停止运行,但是并没有被销毁。
我们可以使用如下命令查看当前系统中存在的容器:
其中,默认
从上表可以看出,我们可以通过
默认情况下,如果没有指定容器名称,系统将会自动随机生成一个唯一的名称。
当然,我们也可以直接来指定容器的名称,此时,使用
例如:
此时,我们将会创建一个容器名称为nianshi_test的容器。
一个合法的容器名称是只能由字母、数字、下划线、圆点和横线组成的。
Ps:容器名称必须是唯一的,如果我们试图创建两个同名的容器时将会失败。
容器名称是一个可以替代容器id的有利工具,合理利用容器名称可以大幅提高工作效率。
但是,此时我们并没有直接进入到交互式shell的环境。
需要再次执行如下命令才能进行到交互式shell的环境:
ps:有时在执行完该命令后,需要再次敲击一个回车才能看到交互式shell。
还有更多的时候,我们可以期望是创建一个长期运行的容器。对于此类容器,我们称之为守护式容器,它们没有交互式会话,非常适合应用程序和服务运行。
以下面的代码为例:
其中,我们可以看到在
而执行脚本的本身含义则表示每隔1s打印一个hello world,直到容器停止。
Docker本身提供了
该命令会输出最后几条日志并返回。
更为推荐的一种方式是添加
此外,我们还可以使用
假设我们现在已经启动了一个容器,名称为nianshi_test1,现在我们可以同时在利用该容器在启动别的进程:
示例如下:
那么我们就需要借助
Ps:默认情况下,Docker不会自动重启容器。
示例程序:
示例:
示例:
Ps:运行中的容器是无法直接删除的,需要先停止容器运行后才能将其删除。
更多更详细的内容,请访问原创网站:https://www.missshi.cn/api/view/blog/5a63279b0a745f6335000003Ps:初次访问由于js文件较大,请耐心等候(5s左右)
在之前的文章中,我们已经讲解了Docker的基本概念以及如何在各个平台下进行Docker的安装。
在接下来,我们将继续讲解Docker容器的基本使用。
查看Docker服务是否正常
执行如下命令后,我们可以看到Docker的一些基本信息,包括容器、镜像的数量,执行与存储驱动以及Docker的基本配置等。sudo docker info
# Containers: 1
# Running: 0
# Paused: 0
# Stopped: 1
# Images: 1
运行容器
接下来,我们将会使用docker run命令来创建容器。
sudo docker run -i -t ubuntu /bin/bash
让我们来分析一下这条简单的命令吧:首先,我们给Docker执行的是
docker run命令。
此外,我们指定了两个参数,分别是
-i和
-t。
-i参数用设置容器中的STDIN是开启的。
-t参数表示为创建的容器分配一个伪tty终端。
Ps:通常
-i和
-t两个参数会联合使用,也可以写作
-it。
接下来,我们可以看到命令行中输入了
ubuntu。
它是在告诉Docker基于哪个镜像来创建容器。
在我们指定某个镜像后,Docker首先会检查本地是否存在该镜像,如果没有找到该镜像,那么首先会连接到官方维护的Docker Hub Registry进行查找并下载。
最后的
/bin/bash则指定了该容器需要运行的命令。
命令完成后,我们将会看到我们进行了该容器内的shell:
root@41225bc38698:/#
总结一下,该命令最基本的运行格式如下:
sudo docker run -i -t 镜像名称 命令代码
使用容器
在执行完刚才的命令后,我们已经以root用户进入到了新容器中。该容器可以认为是一个完整的ubuntu系统,可以正常使用。
例如,我们可以试下如下命令:
root@41225bc38698:/#hostname
# 41225bc38698
root@41225bc38698:/#cat /etc/hosts
# 172.17.0.8 41225bc38698
# 127.0.0.1 localhost
# ::1 localhost ip6-localhost ip6-loopback
# fe00::0 ip6-localnet
# ff00::0 ip6-mcastprefix
# ff02::1 ip6-allnodes
# ff02::2 ip6-allrouters
此外,我们还可以安装一个软件包,以vim为例:
apt-get update && apt-get install vim
执行如下命令后,我们可以成功的安装完成vim。
当我们使用完成该容器后,可以使用
exit来退出容器。
此时,容器会停止命令,同时我们回到了宿主机的命令行提示符。
Ps:此时,容器仅仅是停止运行,但是并没有被销毁。
我们可以使用如下命令查看当前系统中存在的容器:
docker ps -a
其中,默认
docker ps命令会查询到所有正在运行的容器,添加参数
-a后,则无论是否在运行中,都会被查找到。
CONTAINER ID | IMAGE | COMMAND | CREATED | STATUS | PORTS | NAMES |
---|---|---|---|---|---|---|
41225bc38698 | ubuntu | “/bin/bash” | 20 minutes ago | Exited (0) 8 minutes ago | clever_engelbart | |
1222466ccb95 | ubuntu | “/bin/bash” | 5 days ago | Up 5 days | berserk_albattani |
docker ps命令可以查询到容器的很多有用信息,包括:ID、镜像、命令、创建时间、退出状态、端口以及容器名称等。
容器命名
我们已经提到了每个容器都有其对应的一个名称。默认情况下,如果没有指定容器名称,系统将会自动随机生成一个唯一的名称。
当然,我们也可以直接来指定容器的名称,此时,使用
--name 容器名来实现。
例如:
sudo docker run --name nianshi_test -i -t ubuntu /bin/bash
此时,我们将会创建一个容器名称为nianshi_test的容器。
一个合法的容器名称是只能由字母、数字、下划线、圆点和横线组成的。
Ps:容器名称必须是唯一的,如果我们试图创建两个同名的容器时将会失败。
容器名称是一个可以替代容器id的有利工具,合理利用容器名称可以大幅提高工作效率。
启动已停止的容器
当一个容器已经停止后,我们可以使用docker start命令来重新启动该容器。
# 根据容器名称启动
sudo docker start nianshi_test
# 根据容器id启动
sudo docker start 41225bc38698
进行容器内部命令行
在我们重新启动容器后,将会继续沿用之前docker run运行时的参数来运行。
但是,此时我们并没有直接进入到交互式shell的环境。
需要再次执行如下命令才能进行到交互式shell的环境:
sudo docker attach nianshi_test
ps:有时在执行完该命令后,需要再次敲击一个回车才能看到交互式shell。
创建守护式容器
在之前的内容中,我们主要讲解了如何创建一个交互式的环境。还有更多的时候,我们可以期望是创建一个长期运行的容器。对于此类容器,我们称之为守护式容器,它们没有交互式会话,非常适合应用程序和服务运行。
以下面的代码为例:
sudo docker run --name nianshi_test1 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
# 066762ca46506b0ed27aaeb266da6b662e38111604150a3448dc2adae7449b31
其中,我们可以看到在
docker run命令中,我们使用了
-d参数,表示将程序放在后台执行。
而执行脚本的本身含义则表示每隔1s打印一个hello world,直到容器停止。
查看容器日志
那么我们如何看这些守护式容器的日志呢?Docker本身提供了
docker logs用于日志查询。
sudo docker logs nianshi_test1
该命令会输出最后几条日志并返回。
更为推荐的一种方式是添加
-f参数,用于监控容器的日志,功能类似于
tail -f。
sudo docker logs -f nianshi_test1
此外,我们还可以使用
-t-参数来添加时间戳。
sudo docker logs -f -t nianshi_test1
# 2018-01-23T03:56:40.821800852Z hello world
# 2018-01-23T03:56:41.822581880Z hello world
查看容器内进程
除了查看容器的日志外,我们还可以查看容器的进程信息。docker top是用于查询容器内进行相关的信息。
docker top nianshi_test1
UID | PID | PPID | C | STIME | TTY | TIME | CMD |
---|---|---|---|---|---|---|---|
root | 24423 | 1263 | 0 | 11:50 | ? | 00:00:00 | /bin/sh -c while true; do echo hello world; sleep 1; done |
root | 25336 | 24423 | 0 | 11:58 | ? | 00:00:00 | sleep 1 |
在容器内运行进程
在Docker1.3版本以后,我们可以通过docker exec命令在容器内额外启动新进程。
假设我们现在已经启动了一个容器,名称为nianshi_test1,现在我们可以同时在利用该容器在启动别的进程:
sudo docker exec -it nianshi_test1 /bin/bash
停止守护式容器
如果想要停止一个守护式容器,那么我们可以使用docker stop命令来完成。
示例如下:
sudo docker stop nianshi_test1
自动重启容器
有时,我们期望由于某些意外错误而造成容器停止运行时,可以自动重启服务。那么我们就需要借助
--restart参数来实现了。
Ps:默认情况下,Docker不会自动重启容器。
示例程序:
# 任务情况下都自动重启
sudo docker run --restart=always --name nianshi_test2 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
# 退出代码不为0时,自动重启;且最多重启5次
sudo docker run --restart=on-failure:5 --name nianshi_test3 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看容器详细信息
有时,我们希望查看容器的一些详细信息时,可以使用docker inspect来获取。
示例:
sudo docker inspect nianshi_test1
# [{
# "Id": "41225bc38698733b6c1e0b2d3e98ce4b46a41406f4904917348080425bd96716",
# "Created": "2018-01-23T02:49:43.318333661Z",
# "Path": "/bin/bash",
# "Args": [],
# "State": {
# "Running": true,
# "Paused": false,
# "Restarting": false,
# "OOMKilled": true,
# "Dead": false,
# "Pid": 23357,
# "ExitCode": 0,
# "Error": "",
# "StartedAt": "2018-01-23T03:31:07.463860469Z",
# "FinishedAt": "2018-01-23T03:02:13.679114188Z"
# },
# "Image": "03ae2aa34a62c4ba72924b53d82cad6d5f84e106aa375ac2cabb8ba1047a3460",
# ...
删除容器
当一个容器已经使用完成且后续不会在继续使用时,我们可以使用docker rm命令来删除它们。
示例:
sudo docker rm nianshi_test
Ps:运行中的容器是无法直接删除的,需要先停止容器运行后才能将其删除。
更多更详细的内容,请访问原创网站:https://www.missshi.cn/api/view/blog/5a63279b0a745f6335000003Ps:初次访问由于js文件较大,请耐心等候(5s左右)
相关文章推荐
- DOCKER容器的基本使用(一)
- Docker 从入门到放弃(二)容器使用
- docker使用入门,以及保存容器状态
- Docker新手入门之六:Docker在生产环境中的使用实践
- Docker学习之Docker容器基本使用
- docker容器的基本使用
- 【Docker入门】使用Nginx反向代理最前端,多个Docker容器做后端。将多台服务器整合到一台服务器上
- 新手入门:Java数组特点及基本使用技巧
- Docker入门 - 004 Docker 容器使用
- Docker 使用方法总结之:容器的基本操作
- TensorFlow 教程 --新手入门--1.5 基本使用
- Docker新手入门:基本用法
- 4.22 初始git,git基本操作 -使用git入门新手
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
- Docker新手入门之五:Docker在真实应用中的使用实践
- Docker容器的基本使用
- Docker新手入门:基本用法
- mysql的入门基本使用(适合新手学习)
- Windows10下的docker安装与入门 (二)使用docker引擎在容器中运行镜像
- 新手入门:Javascript的使用技巧大全