创建容器的工作原理:
当利用docker run来创建容器时,Docker在后台运行的标准操作包括:检查本地是否存在指定的镜像,不存在就从公有仓库下载,利用镜像创建并启动一个容器分配一个文件系统,并在只读的镜像层外面挂在一层可读写层;从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去;从地址池配置一个ip地址给容器;执行用户指定的应用程序,执行完毕后容器被终止。
注:容器不是一个虚拟机,因为他就是一个进程,如果我们退出,这个进程就退出了。
创建容器的常用选项:
指令 描述
-i, --interactive 交互式
-t, --tty 分配一个伪终端
-d, --detach 运行容器到后台
-a, --attach list 附加到运行的容器
--dns list 设置DNS服务器
-e, --env list 设置环境变量
--env-file list 从文件读取环境变量
-p, --publish list 发布容器端口到主机
-P, --publish-all 发布容器所有EXPOSE的端口到宿主机随机端口
-h, --hostname string 设置容器主机名
--ip string 指定容器IP,只能用于自定义网络
--link list 添加连接到另一个容器
--network 连接容器到一个网络
--mount mount 挂载宿主机分区到容器
-v, --volume list 挂载宿主机目录到容器
--restart string 容器退出时重启策略,默认no[always|on-failure]
--add-host list 添加其他主机到容器中/etc/hosts
创建一个bs容器,并在后台运行。
[root@linux-docker01 ~]# docker container run -itd --name bs busybox
0490de553573ae9d30ca68a15a901e2b8c150528a11248c832ac36e42d5a41b4
进入到bs容器里面
[root@linux-docker01 ~]# docker container attach bs #如果退出不终止容器的话,按Ctrl+p+q即可
/ #
创建bs1容器并传入a变量
[root@linux-docker01 ~]# docker container run -itd -e a=123 --name bs1 busybox
d46fd062fd659f712b8128aa4706389317d32ed64b885b38efd8a068739bf655
[root@linux-docker01 ~]# docker exec -it bs1 sh
/ # echo $a
123
运行nginx01容器,并分配容器端口为80,与宿主机8080端口作为映射。
[root@linux-docker01 ~]# docker container run -itd -p 8080:80 --name nginx01 nginx
8b90babd6f7a2042bb1121ed11b048bbf9f382be31426f51f94aae8445b8c844
[root@linux-docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b90babd6f7a nginx "nginx -g 'daemon of…" 18 seconds ago Up 17 seconds 0.0.0.0:8080->80/tcp nginx01
资源限制命令:
指令 描述
-m,--memory 容器可以使用的最大内存量
--memory-swap 允许交换到磁盘的内存量
--memory-swappiness=<0-100> 容器使用SWAP分区交换的百分比(0-100,默认为-1)
--memory-reservation 内存软限制,Docker检测主机容器争用或内存不足时所激活的软限制,使用此选项,值必须设置低于—memory,以使其优先
--oom-kill-disable 当宿主机内存不足时,内核会杀死容器中的进程。建议设置了-memory选项再禁用OOM。如果没有设置,主机可能会耗尽内存
--cpus 限制容器可以使用多少可用的CPU资源
--cpuset-cpus 限制容器可以使用特定的CPU
--cpu-shares 此值设置为大于或小于默认1024值,以增加或减少容器的权重,并使其可以访问主机CPU周期的更大或更小比例
管理容器的常用选项:
指令 描述
ls 列出容器
inspect 显示一个或多个容器详细信息
attach 附加本地标准输入,输出和错误到一个运行的容器
exec 在运行容器中执行命令
commit 创建一个新镜像来自一个容器
cp 拷贝文件/文件夹到一个容器
logs 获取一个容器日志
port 列出或指定容器端口映射
stats 显示容器资源使用统计
top 显示一个容器运行的进程
update 更新一个或多个容器配置
stop/start 停止/启动一个或多个容器
rm 删除一个或多个容器
查看当前运行的容器
[root@linux-docker01 ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8b90babd6f7a nginx "nginx -g 'daemon of…" 3 days ago Up 3 days 0.0.0.0:8080->80/tcp nginx01
d46fd062fd65 busybox "sh" 3 days ago Up 3 days bs1
0490de553573 busybox "sh" 3 days ago Up 3 days bs
查看容器的详细信息
[root@linux-docker01 ~]# docker container inspect 0490de553573
使用attach命令进入容器时会卡住,是因为将当前linux标准的输入输出附加到nginx容器中,那么nginx容器中是运行有一个进程的,可以用top命令查看到nginx -g daemon off是运行在前台实时运行了。这是用attach命令附加标准的输入输出就会造成进程的堵塞,附加不进去,也一直就会等待。
[root@linux-docker01 ~]# docker attach nginx01
[root@linux-docker01 ~]# docker top nginx01
UID PID PPID C STIME TTY TIME CMD
root 12421 12409 0 14:55 pts/0 00:00:00 nginx: master process nginx -g daemon off;
101 12445 12421 0 14:55 pts/0 00:00:00 nginx: worker process
可以使用exec进入容器
[root@linux-docker01 ~]# docker exec -it nginx01 bash
拷贝宿主机的文件到容器中
[root@linux-docker01 ~]# docker container cp anaconda-ks.cfg bs1:/root
[root@linux-docker01 ~]# docker container exec bs1 ls /root/
anaconda-ks.cfg
查看容器的日志
[root@linux-docker01 ~]# docker logs 8b90babd6f7a
查看容器的端口
[root@linux-docker01 ~]# docker container port nginx01
80/tcp -> 0.0.0.0:8080
查看容器资源的实时利用率
[root@linux-docker01 ~]# docker stats nginx01
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8b90babd6f7a nginx01 0.00% 1.348MiB / 3.685GiB 0.04% 648B / 0B 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8b90babd6f7a nginx01 0.00% 1.348MiB / 3.685GiB 0.04% 648B / 0B 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8b90babd6f7a nginx01 0.00% 1.348MiB / 3.685GiB 0.04% 648B / 0B 0B / 0B 2
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
8b90babd6f7a nginx01 0.00% 1.348MiB / 3.685GiB 0.04% 648B / 0B 0B / 0B 2
删除所有的容器
[root@linux-docker01 ~]# docker rm -f $(docker ps -q -a)
- docker容器日志管理(清理)
原文:docker容器日志管理(清理) 前言 在使用docker容器时候,其日志的管理是我们不得不考虑的事情.因为docker容器的日志文件会占据大量的磁盘空间.下面介绍的就是对docker容器日志的 ...
- paas架构之docker——容器进程管理
1.docker进程管理 docker的进程管理命令ps的用法基本和ubuntu系统的用法一致 1.1. 查看docker进程 sudo docker ps –a 1.2. 附着到容器上 Sudo d ...
- Docker(七):Docker容器卷管理
1.使用容器卷的原因:Docker容器产生的数据,如果不通过commit生成新的镜像,数据会在容器删除后丢失.为了能持久化保存和共享容器的数据,Docker提出了两种管理数据的方式:数据卷和数据卷容器 ...
- 2. docker 容器的管理(创建、查看、启动、终止、删除)
一.创建 docker create:创建容器,处于停止状态. centos:latest:centos容器:最新版本(也可以指定具体的版本号). 本地有就使用本地镜像,没有则从远程镜像库拉取. 创建 ...
- docker容器日志管理
docker容器日志分为两类:docker引擎日志(Docker本身运行的日志)和容器日志(各个容器内产生的日志) 一.Docker引擎日志: Centos系统下的docker引擎日志一般给syste ...
- Docker容器日志管理最佳实践
目录 一 .Docker 引擎日志 二.容器日志 2.1.常用查看日志命令--docker logs 2.2 .Docker 日志 驱动 三. 生产环境中该如何储存容器中的日志 一.当是完全是标准输出 ...
- Docker 容器日志管理
Docker 日志分为两类: Docker 引擎日志(也就是 dockerd 运行时的日志), 容器的日志,容器内的服务产生的日志. 一 .Docker 引擎日志 Docker 引擎日志一般是交给了 ...
- 基于spring-boot和docker-java实现对docker容器的动态管理和监控[附完整源码下载]
(我是个封面) docker简介 Docker 是一个开源的应用容器引擎,和传统的虚拟机技术相比,Docker 容器性能开销极低,因此也广受开发者喜爱.随着基于docker的开发者越来越多,doc ...
- Docker 的 Web 管理工具 DockerFly
Dockerfly是基于 Docker1.12+ (Docker API 1.24+) 开发出Docker 管理工具,提供里最基本的基于 Docker 的管理功能,目的是能够方便广大Docker初学者 ...
随机推荐
- Django 的命令及简单例子
第一步:下载mysql驱动 cmd进入创建好的django项目目录:然后使用下面的命令创建一个项目testdj. sudo /usr/lib/python3/dist-packages/djang ...
- android 百度地图 定位获取位置失败 62错误
一切正常步骤进行但是还是没有获得定位,得到的坐标总是49E.xxxx,错误代码总是62 总是以为代码.或jar包.或还有什么权限没给.搞了好久,十分郁闷.在控制台上又没有什么具体的错误提示 经过无数次 ...
- MySQL单表多次查询和多表联合查询,哪个效率高?
很多高性能的应用都会对关联查询进行分解. 简单地,可以对每个表进行一次单表查询,然后将结果在应用程序中进行关联.例如,下面这个查询: select * from tag join tag_post o ...
- kali linux 使用笔记本快捷键调节音量
环境:kali 2018.3a(xface桌面版),自带PulseAudio控制音量. 以前在windows时笔记本是Fn+F1这些来调节音量的,装了kali后原来调节亮度.触控板的键还能用,唯独音量 ...
- IBase<T>
public interface IBase<T>//基类 { IEnumerable<T> SelectAll();//查询所有 T FindById(int ID);//根 ...
- 学习笔记74—函数argsort()
****************************************************** 如有谬误,请联系指正.转载请注明出处. 联系方式: e-mail: heyi9069@gm ...
- Jquery封装的Ajax
$.get方法 语法: $.get(url,data,function(e){ //e就是服务器返回的数据 },dataType); 四个参数: url: 请求的服务器地址 data: 发送给服务器的 ...
- spring配置JNDI(Java Naming and Directory Interface,Java命名和目录接口)数据源
1.在tomcat下的server.xml的 <GlobalNamingResources> </GlobalNamingResources>添加下面代码 <Resour ...
- JAVA写接口傻瓜(%)教程(五)
今天主要说一下在URL 中使用?传值的问题.在显式的使用get方法获取特点数据时,一般会通过?传递参数值,sevlert根据参数在数据库中对应的查找内容.所以,SQL语句需要拼接,要加上后面的参数.参 ...
- 采用Tensorflow内部函数直接对模型进行冻结
# enhance_raw.py # transform from single frame into multi-frame enhanced single raw from __future__ ...