《第一本Docker书》学习笔记——第3章 Docker入门
3.1 确保Docker已经就绪
查看docker是否正常工作:
sudo docker info
3.2 运行我们的第一个容器
现在,让我们尝试启动第一个Docker容器。我们可以使用docker run
命令创建容器。docker run
命令提供了Docker容器的创建到启动的功能,在本书中我们也会使用该命令来创建新容器。
代码清单3-2 运行我们的第一个容器
sudo docker run -i -t ubuntu /bin/bash
其中,-i
标志保证容器中STDIN时是开启的,尽管我们并没有附着到容器中。持久的标准输入是交互式shell的“半边天”,-t
标志则是另外的半边天,它告诉Docker为要创建的容器分配一个伪tty终端。这样,新创建的容器才能提供一个交互式shell。若要在命令行下创建一个我们能与之进行交互的容器,而不是一个运行后台服务的容器,则这两个参数(指 -i
和 -t
这两个参数)已经是最基本的参数了。
接下来我们是通过ubuntu
来表示使用ubuntu镜像。ubuntu镜像是一个常备镜像,也可以称为“基础”(base)镜像,它由Docker公司提供,保存在Docker Hub Registry上。可以以ubuntu基础镜像(以及类似的fedora、debian、centos等镜像)为基础,在选择的操作系统上构建自己的镜像。到目前为止,我们基于此基础景象启动了一个容器,并且没有对容器增加任何东西。
Docker在文件系统内会使用这个ubuntu镜像创建一个新容器。该容器拥有自己的网络、IP地址,以及一个用来和宿主机进行通信的桥接网络接口。最后,我们告诉Docker在新容器中要运行什么命令,在本例中我们在容器中运行/bin/bash
启动了一个Bash shell。
在容器创建完毕之后,Docker就会执行容器中的/bin/bash
命令,就像我们在命令行中看到的:
root@0d9624f5c022:/#
3.3 使用第一个容器
用户可以继续在容器中做任何事情。当所有的工作都结束了,输入exit
,就可以返回到Ubuntu宿主机的命令行提示符了。随着/bin/bash
的退出,容器也停止了运行!
但容器仍然是存在的,可以用docker ps -a
命令查看当前系统中容器的列表。
3.4 容器命名
使用--name
标志来给容器命令。
代码清单3-11 给容器命名
sudo docker run --name zifeiy_the_container -i -t ubuntu /bin/bash
如果要使用的容器名称已经存在,可以先用docker rm
命令删除已有的同名容器后,再来创建新的容器。
3.5 重新启动已经停止的容器
代码清单3-12 启动已经停止运行的容器
sudo docker start zifeiy_the_container
代码清单3-13 通过ID启动已经停止运行的容器
sudo docker start b12af0d40150
也可以使用docker restart
命令来重新启动一个容器。
类似的,Docker也提供了docker create
命令来创建一个容器,但是并不运行它。这让我们可以在自己的容器工作流中对其进行细粒度的控制。
3.6 附着到容器上
Docker容器重新启动的时候,会沿用docker run
命令时制定的参数来运行,因此我们的容器重新启动后会运行一个交互式会话shell。此外,也可以用docker attach
命令,重新附着到该容器的会话上。
代码清单3-14 附着到正在运行的容器
sudo docker attach zifeiy_the_container
(attach之前要确保容器时运行着的:you cannot attach to a stopped container, start it first
)
3.7 创建守护式容器
除了这些交互式运行的容器(interactive container),也可以创建长期运行的容器。守护式容器(daemonized container)没有交互式会话,非常适合运行应用程序和服务。大多数时候我们都需要以守护式来运行我们的容器。下面就来启动一个守护式容器:
代码清单3-17 创建长期运行的容器
sudo docker run --name daemon_zifeiy -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
代码清单3-18 查看正在运行的daemon_zifeiy容器
sudo docker logs daemon_zifeiy
我们也可以在命令后使用-f参数来监控Docker的日志,这与tail -f
命令费城相似:
代码清单3-20 跟踪守护式容器的日志
sudo docker logs -f daemon_zifeiy
其他参数:--tail 10
;
还可以使用-t
标志为每条日志加上时间戳:
代码清单3-21 跟踪守护式容器的最新日志
sudo docker logs -ft daemon_zifeiy
3.9 Docker日志驱动
通过--log-driver
选项来实现控制Docker守护进程和容器所用的日志驱动。可以在启动Docker守护进程或者执行docker run
命令时使用这个选项。
json-file
时默认的选项,json-file也为我们前面看到的docker logs
命令提供了基础。
其他可用的选项还包括syslog,该选项将禁用docker logs命令,并将所有容器的日志输出都重定向到Syslog。
还有一个选项是none,这个选项将会禁用所有容器中的日志,导致docker logs命令也被禁用。
代码清单3-22 在容器级别启动Syslog
sudo docker run --log-driver="syslog" --name daemon_zifeiy2 -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
3.10 查看容器内的进程
使用docker top
:
sudo docker top daemon_zifeiy
3.11 Docker统计信息
使用docker stats
:
sudo docker stats zifeiy_the_container
3.12 在容器内部运行进程
使用docker exec
,
加-d
参数可以运行一个后台任务;
加-t -i
参数可以运行一个交互式任务。
代码清单3-26 在容器中运行后台任务
sudo docker exec -d daemon_zifeiy touch /etc/new_config_file
代码清单3-27 在容器内运行交互命令
sudo docker exec -t -i daemon_zifeiy /bin/bash
3.13 停止守护式容器
使用docker stop
命令:
代码清单3-28 停止正在运行的Docker容器
sudo docker stop daemon_zifeiy
注意 docker stop命令会向Docker容器进程发送SIGTERM信号。如果想快速停止某个容器,也可以使用docker kill命令来向容器进行发送SIGKILL信号。 |
3.14 自动重启容器
如果由于某种错误而导致容器停止运行,还可以通过--restart
标志,让Docker自动重新启动该容器。--restart
标志会检查容器的退出代码,并据此来决定是否要重启容器。默认的行为是Docker不会重启容器。
代码清单3-30 自动重启容器
sudo docker run --restart=always --name daemon_zifeiy -d ubuntu /bin/sh "while true; do echo hello world; sleep 1; done"
在本例中,--restart
标志被设置为always
。无论容器的退出代码是什么,Docker都会自动重启该容器。除了always
,还可以将这个标志设为on-failure
,这样,只有当容器的退出代码为非0值的时候,才会自动重启。另外,on-failure
还接受一个可选的重启次数参数,如代码清单3-31所示。
代码清单3-31 为on-failure指定count参数
--restart=on-failure:5
这样,当容器退出代码为非0时,Docker会尝试自动重启该容器,最多重启5次。
3.15 深入容器
除了通过docker ps
命令获取容器的信息,还可以使用docker inspect
来获得更多的容器信息:
代码清单3-32 查看容器
sudo docker inspect daemon_zifeiy
docker inspect
命令会对容器进行详细的检查,然后返回其配置信息,包括名称、命令、网络配置以及很多有用的数据。
也可以用-f
或者--format
标志来选定查看结果:
代码清单3-33 有选择地获取容器信息
sudo docker inspect --format='{{ .State.Running }}' daemon_zifeiy
false
上面这条命令会返回容器的运行状态,示例中该状态为false。
我们还能回去其他有用的信息,如容器IP地址:
代码清单3-34 查看容器的IP地址
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' daemon_zifeiy
172.17.0.2
也可以同时指定多个容器,并显示每个容器的输出结果:
代码清单3-35 查看多个容器
$ sudo docker inspect --format '{{.Name}} {{.State.Running}}' \
daemon_zifeiy zifeiy_the_container
/daemon_zifeiy false
/zifeiy_the_container false
所有的Docker容器都保存在/var/lib/docker/containers
目录下。
3.16 删除容器
如果容器不再使用,可以使用docker rm
命令来删除它们:
代码清单3-36 删除容器
sudo docker rm 80430f8d0921
代码清单3-37 删除所有容器
sudo docker rm `sudo docker ps -a -q`
《第一本Docker书》学习笔记——第3章 Docker入门的更多相关文章
- 第一本docker书 学习笔记(二)
#安装docker的先决条件 运行64位CPU构架的计算机(docker目前不支持32位的cpu) 运行LUFSinux3.8或者更高版本内核 内核必须支持一种合适的存储驱动,例如: device M ...
- 第一本docker书 学习笔记(一)
Docker的核心组件: Docker客户端和服务端 Docker镜像 Registry Docker容器 # Docker客户端和服务端 docker 是一个 C/S架构程序.客户端只需要向dock ...
- Docker&K8S学习笔记(一)—— Docker安装
最近一年在工作上经常使用Docker与K8S,除了利用其打镜像,部署服务外,还基于Docker与K8S开发了一套CICD流水线平台,为了加深相关知识点的理解,所以从今天开始会定期更新学习笔记,本套学习 ...
- [HeadFist-HTMLCSS学习笔记][第七章CSS入门:加一点样式]
CSS入门 style元素设置CSS 基本格式 <style type="text/css"> body { background-color: #eaf3da; } ...
- 20145330《Java学习笔记》第一章课后练习8知识总结以及IDEA初次尝试
20145330<Java学习笔记>第一章课后练习8知识总结以及IDEA初次尝试 题目: 如果C:\workspace\Hello\src中有Main.java如下: package cc ...
- CSS3秘笈第三版涵盖HTML5学习笔记1~5章
第一部分----CSS基础知识 第1章,CSS需要的HTML HTML越简单,对搜索引擎越友好 div是块级元素,span是行内元素 <section>标签包含一组相关的内容,就像一本书中 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...
- JVM学习笔记-第六章-类文件结构
JVM学习笔记-第六章-类文件结构 6.3 Class类文件的结构 本章中,笔者只是通俗地将任意一个有效的类或接口锁应当满足的格式称为"Class文件格式",实际上它完全不需要以磁 ...
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
随机推荐
- Hbase表结构
1.Hbase表结构:可以看成map,里面有行键,行键是按照字母顺序排序.行键下面是列族,每个列族可以有不同数量的列甚至是没有列.每个列里面包含着不同时间版本的列的值. 行键:是按照字母的顺序排序的, ...
- 集成腾讯Bugly日志- Android(1)
Bugly 是腾讯公司为移动开发者开放的服务之一,这里主要指 Crash 监控.崩溃分析等质量跟踪服务. 一.登录BUGLY官网 1.登录BUGLY官网以后,选择新建产品,选择IOS或ADNROID平 ...
- LeetCode 321. Create Maximum Number
原题链接在这里:https://leetcode.com/problems/create-maximum-number/description/ 题目: Given two arrays of len ...
- P3674 小清新人渣的本愿 莫队+bitset
ennmm...bitset能过系列. 莫队+bitset \(\mathcal{O}(m\sqrt n + \frac{nm}{w})\) 维护一个正向的 bitset <N> mem ...
- YAML_09 脚本调用变量+触发器
ansible]# vim adhttp2.yml --- - hosts: cache remote_user: root vars: server: httpd tasks: ...
- learning java AWT Pannel
import java.awt.*; public class PanelTest { public static void main(String[] args) { var f = new Fra ...
- 计数器的原理,设计及verilog实现
若计数器由n个触发器组成,则计数器的位数为n,所能计数的最大模数为2的n次幂.以下为同步二进制加法计数器电路; 驱动方程:状态图 状态方程(此时的Q0,Q1为上一次状态值): 下例是同步4位2进制计数 ...
- Luogu3774 [CTSC2017]最长上升子序列 【Young表,根号分治】
题目链接:洛谷 推荐阅读:2019年集训队论文<浅谈杨氏矩阵在信息学竞赛中的应用> 首先我们来看一个东西,叫做Young表. 它是长一个阶梯状的东西(行长和列长都是递减的),并且每一行和每 ...
- 【一起来烧脑】读懂Promise知识体系
知识体系 Promise基础语法,如何处理错误,简单介绍异步函数 内容 错误处理的两种方式: reject('错误信息').then(null, message => {}) throw new ...
- linux 查看内存,free,ps,说明Buffers,Cached,SReclaimable
查看机器剩余内存free即可,百度就可以轻松查到,主要想说的 查所有进程占用内存情况并排序: ps aux | sort -nk5 k5代表根据RSS排序,k6代表VSZ排序. ----------- ...