Docker笔记(六):容器管理
原文地址:http://blog.jboost.cn/docker-6.html
容器是Docker中的另一核心概念,在Docker中,应用的运行都是在容器内进行的,容器则基于镜像创建。前面已对Docker镜像做了基本介绍,本文对Docker容器管理的相关内容做一个梳理。
1. 启动容器
启动容器的命令格式如下
docker run [OPTIONS] IMAGE-NAME [COMMAND] [ARG...]
其中OPTIONS部分可指定容器运行的一些可选项,常用选项包括:
- -d 将容器以后台进程(daemon)的形式运行
- -p 指定容器内应用暴露端口与主机端口的映射,如 -p 8080:80 表示将容器内80端口映射到主机的8080端口(主机端口在前,容器端口在后)
- -v 指定容器与主机的挂载目录映射,如 -v /var/log:/log 表示将容器的/log目录挂载到主机的/var/log目录(同样主机目录在前,容器目录在后),后续对容器的/log写操作实际作用于主机的/var/log目录
- -e 为容器设置环境变量
- -t 为容器启动一个伪终端(pseudo-tty)
- -i 让容器的标准输入保持打开,一般与 -t 配合使用,让容器启动后就打开一个可交互的命令行界面
- -w 指定容器的工作目录
COMMAND [ARG..] 部分就是容器需要运行的应用进程启动命令与参数,如果镜像中有通过 CMD, 或 ENTRYPOINT 指定了容器启动程序,则可省略。另外可通过 –name 指定容器的名称,以及 –restart 来指定重启策略,–restart有三种取值,代表容器支持的三种不同的重启策略
取值 | 描述 |
---|---|
always | 除非被docker stop 命令明确停止,否则一直尝试重启处于停止态的容器;如果Docker重启,也会自动启动容器 |
unless-stopped | 与always的区别是,停止态的容器不在Docker重启的时候被重启 |
on-failed | 在容器退出时返回值不为0的时候,重启容器;如果Docker重启,容器也会被启动,不管之前是否处于停止状态 |
以启动一个mysql数据库服务为例
docker run -d -p : --name mysql \
-v /home/devuser/apps/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /home/devuser/apps/mysql/logs:/var/log/mysql \
-v /home/devuser/apps/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=Passw0rd --restart=always mysql:5.7
上述命令启动了一个mysql容器服务,-d 表示以后台进程运行,执行命令后只返回一个容器ID,不会输出任何其它信息;-p 将容器暴露的端口3306映射到宿主机的3306端口,外部主机就可以通过宿主机IP与3306端口来访问mysql服务; –name 指定了容器名称为mysql; -v 将mysql的配置文件路径、日志路径、数据存储路径映射到了宿主机对应的路径目录;-e 设置了一个环节变量指定mysql root账号的密码;–restart 指定容器在异常退出时,包括Docker重启时,自动启动容器。
我们前面有提过,当我们执行CLI命令时,实际上是客户端(Docker Client)通过发送请求到Docker后台进程(Docker Daemon),由Docker后台进程来执行的,那么当我们执行上述docker run
命令的时候,Docker后台进程具体都干了些啥呢?一般来说,包括如下几个操作步骤
- 检测本地是否存在指定的镜像,如果不存在,就从公共仓库下载
- 利用镜像创建一个容器,并启动它
- 分配一个文件系统,并在只读的镜像层上面挂载一层可读写层(容器存储层)
- 从宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
- 从地址池配置一个 ip 地址给容器
- 执行用户指定的应用程序
- 执行应用程序完毕后容器被终止
2. 管理已有容器
一般对已有容器的管理包括如下几个操作:
- 查看运行中的容器
docker ps
或docker container ls
- 查看所有容器
docker ps -a
或docker container ls -a
- 停止运行
docker stop xxx
- 开始停止状态的容器
docker start xxx
- 重启运行状态的容器
docker restart xxx
- 删除停止状态的容器
docker rm xxx
- 强制删除容器(包括运行状态中)
docker rm -f xxx
- 删除所有停止状态的容器
docker container prune
其中xxx既可以是容器ID(短ID即可,只要与其它区分开来),也可以是容器名称。docker rm
之前必须要先docker stop
将容器置为停止状态,而docker rm -f
可以强制删除运行状态的容器,其背后是通过Linux/POSIX信号来实现的,docker rm -f
命令直接发出SIGKILL
信号,不会给容器内运行进程任何缓冲的时间,立即终止,而docker stop
命令却是先发送SIGTERM
信号,通知容器进程结束,会为进程预留一个清理并优雅停止的机会,如果一段时间后进程还没有终止,那么就会发送SIGKILL
信号,来终止进程的运行。
我们也可以像镜像操作中一样,组合使用命令来更方便地操作,如强制删除所有容器(慎用)
docker rm -f $(docker ps -aq)
3. 进入容器
容器在运行时指定 -d 选项时, 是以后台进程的形式运行的,如果我们需要进入容器查看或操作,可以通过docker exec
命令,docker exec
命令的格式如下
docker exec [OPTIONS] container-id COMMAND
OPTIONS常用的一般是 -t, -i,意义跟在docker run
选项中一样 —— 为容器启动一个伪终端(pseudo-tty),并保持标准输入打开,从而可以像Linux命令行一样进行交互, COMMAND一般为 bash
。
另外还有一个命令是docker attach xxx
,其中xxx是容器ID,但推荐使用docker exec
,因为docker attach
中当执行exit
退出容器时,容器也会随之终止,但docker exec
则不会。
如果不进入容器,也可以通过docker logs xxx
,xxx是容器ID,来查看容器的输出信息。
4. 导入导出容器
可以使用docker export
命令将一个容器的快照进行导出,如
docker export xxx > mycontainer.tar
其中xxx是容器ID,可以通过docker ps -a
查看,上述命令将容器的当前快照导出到了本地文件。
docker import
命令则可以将一个容器快照文件导入为镜像,如
cat mycontainer.tar | docker import - test/myimage:v1.
也可以通过URL来导入,如
docker import http://test.com/testimage.tgz test/myimage2:v1.0
由此可见,我们获取镜像又多了一个来源——从已有容器快照文件导入。
5. 总结
本文对容器的一些基本操作进行了介绍,需要注意的是如之前所说,容器应以无状态的形式运行,所有产生的数据应该通过挂载数据卷的方式写入宿主机文件目录,避免容器销毁时造成数据丢失;尽量使用docker stop
+ docker rm
的方式来替代docker rm -f
,使容器内运行程序“优雅”地退出。有时候可能遇到这样的场景,容器创建运行后,我们需要对运行的一些参数进行更新或添加,这时候该怎么操作。后文会对该场景进行介绍,欢迎关注。
我的个人博客地址:http://blog.jboost.cn
我的微信公众号:jboost-ksxy (一个不只有技术干货的公众号,欢迎关注,及时获取更新内容)
———————————————————————————————————————————————————————————————
Docker笔记(六):容器管理的更多相关文章
- Docker背后的容器管理——Libcontainer深度解析
Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcon ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
- Docker笔记--操作容器命令
Docker笔记--操作容器命令 创建容器 docker [container] create-- 创建容器,使用docker [container] create命令新建的容器处于停止状态,可以使用 ...
- Docker进阶之五:容器管理
容器管理 一.创建容器常用选项 docker container --help 指令 描述 资源限制指令 -i, --interactive 交互式 -m,--memory 容器可以使用的最大内存量 ...
- Docker镜像和容器管理(二)
Docker安装 Docker镜像管理 https://hub.docker.com/ 是公共的一个Docker镜像仓库,类似GitHub一样,上面有非常多的开源项目镜像. 可以直接在命令行搜索镜像 ...
- Docker 镜像与容器管理
镜像与容器简介 Docker的大部分操作都围绕着它的三大核心概念:镜像.容器.仓库而展开.因此,准确把握这三大核心概念对于掌握Docker技术尤为重要,在docker中,我们重点关注的就是镜像和容器了 ...
- Docker 与 Podman 容器管理的比较
翻译自 Paul Ferrill 2020年9月1日的文章<Compare Docker vs. Podman for container management> [1] Docker 和 ...
- Docker学习笔记四:Docker镜像、容器管理工具shipyard
一.拉取以下几种镜像: docker pull alpineshipyard/shipyarddocker pull swarm docker pull shipyard/shipyarddocker ...
- rancher1.X+docker+k8s搭建容器管理集群
一, 环境准备 服务器 Linux k8s-m -.el7.x86_64 #1 SMP Fri Apr 20 16:44:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Li ...
- 难部署的taiga,式微的circus——趋势从进程管理到容器管理,简单才是美
一直需要一个项目管理系统,一直没时间弄. taiga是github上搜project management star最多的项目,又是基于django用python写的后端,所以就用它: 但是,集中精力 ...
随机推荐
- MySql如何将一个表字段更新到另一个表字段
今天遇到这样一个需求: 有两张表,一张是专辑表,另一张是专辑下的图片表, 专辑表中有拍摄年\月,两个字段; 图片表中有实际拍摄日期的字段; 因为专辑表中这两个字段是后加入的,因此只能用一条sql语句将 ...
- Delphi 编写IC控件
编写控件的基本步骤 1.确定一个祖先类 2.创建一个组件单元 3.在新控件中添加属性.方法和事件 事件定义方法如下: type private FOnClick:TNotifyEvent ;//( 声 ...
- Linux下的软件安装
在线安装 APT:advanced packaging Tool,Debian及其派生的发行版的软件包管理工具,包含以apt-开头的多个工具,如apt-get,apt-cache,apt-cdrom ...
- 判断当前进程是否以管理员权限运行(AllocateAndInitializeSid后,用CheckTokenMembership与AdministratorsGroup进行比较,和Delphi的那个例子还有点不一样)
在Win7下(Vista以上的...)有时某些操作就是会让人郁闷 开启了UAC的话,得以管理员权限运行才不会出现Access is denied... 但是,程序又不是非得什么时候都用那破管理员权限的 ...
- Realm_King 之 .NET 打包详细教程(A)
最近一直在winform程序开发,听说身边的人不是很了解打包,给大家提供一点简单的打包,相信能看懂的... (一)右键解决方案: 在弹出"添加新项目"窗体中找到 其他项目类型=& ...
- Win7 访问 数据库 慢
不让TCP/IP调谐拖累网速 在Windows Server 2008工作环境中,下载访问网络中大容量的文件内容时,我们有时会感觉到网络连接速度非常缓慢,严重的时候还会出现不能访问的现象.遭遇这类故障 ...
- c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬 ...
- C语言实现常用查找算法——二分查找
#include<stdio.h> void insert_sort(int a[],int n); int binary_search(int a[],int x,int n); voi ...
- Linux常用实用命令
Linux是我们开发人员必不可少的系统,也是经常接触到的.然而,Linux命令比较多,有些不常用也难记住.那么,我们如何更高效的使用Linux命令,而又不必全面地学习呢?今天就给大家分享一下我在开发过 ...
- ZooKeeper学习之路(一)—— ZooKeeper简介及核心概念
一.Zookeeper简介 Zookeeper是一个开源的分布式协调服务,目前由Apache进行维护.Zookeeper可以用于实现分布式系统中常见的发布/订阅.负载均衡.命令服务.分布式协调/通知. ...