docker学习笔记2:容器操作
一、列出主机上已经创建的容器
docker ps -a
二、创建交互式容器
命令: docker run -i -t ubuntu /bin/bash
其中-i -t 表示创建一个提供交互式shell的容器。
ubuntu是镜像名,如果本地不存在,回到仓库中下载。
/bin/bash 是指定容器创建后立即执行的命令。
注意:每个容器都有一个唯一的ID,作为容器的标识。每个容器也有个唯一的名称,在用docker run命令创建时可以通过 --name 名称 来指定,如果不指定,系统会自动产生一个名称。
如: docker run --name mycontainer -i -t ubuntu /bin/bash
对于交互式容器,当退出shell后,容器会关闭。 后面可以通过命令重新启动容器。
三、启动/停止容器
如果一个容器已经停止,可以执行如下docker start命令重新启动容器,参数可以是容器的ID 或容器的名称。
docker start 3d72d0283dc8
执行后返回容器的ID
注意,如果指定的容器已经处于启动状态,上述命令只是返回容器ID,不会重新启动容器。
如果要想重启已经启动的容器,可以用 docker restart命令
如果要停止一个运行的容器,可以用 docker stop命令,kill命令也可停止容器,但这命令时强制立即停止容器。
四、附着到交互式容器上
当重新启动容器时,会沿用创建容器(docker run)命令时指定的参数来运行。如果创建容器时,指定了shell。
重启容器时,可以用 docker attach命令附着到容器上,当执行docker attach命令时(可能需要敲下回车键),就回到了容器的bash提示符,
这时就已经相当于在容器内部了的shell操作了。如果操作过程中,退出了shell。容器也会随之停止。
所以这种容器一般是完成特定任务的,不适合运行服务程序。
五、创建守护式容器
这种容器指容器可以长期一直运行,没有交互式会话,非常适合容器中运行后台应用程序和服务(如数据库服务、web服务器等)。
例子:
docker run --name mydaemon -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
上述语句利用-d标识创建了一个守护式容器,该容器启动了一个shell,循环打印一个信息,保证shell不退出。
可以通过docker logs命令来获取容器的日志
还可以通过 docker top 命令来查看容器内当前运行的进程信息。
六、与守护式容器交互
可以通过docker exec命令在容器内部额外启动新进程。
如在主机中,执行语句 docker exec -t -i mydaemon /bin/bash
则会出现一个shell会话(容器内的,不是主机的),这样就可以和容器进行交互了,可以完成自己想要的操作。
七、查看容器详细信息
利用docker logs 命令可以获取容器的日志信息。
利用docker inspect 命令可以查看容器更多的信息。 如ip地址等,这对守护容器还是很有意义的。
八、执行容器内命令
可以在docker主机上,执行 docker exec命令, 在容器内部启动新的进程。
比如:
docker exec -i -t 容器ID/NAME /bin/bash
上面命令表示在容器内打开一个shell交互式会话,参数 -i -t 是让这个shell能背主机捕捉到,可以在主机上操作该shell。通过这个命令,就可以对容器进行相关的操作了,如进行容器的配置、应用程序的配置等。
注意:这个方式和attach不同。attach绑定的shell退出后容器会退出。这种方式不会。
九、删除容器
命令:docker rm ID/NAME
注意,运行中的容器是无法被删除的。
注意:在利用docker run创建容器时,可以加上标识 --rm,会在容器运行完毕后,自动删除容器,相当于创建的是一个一次性容器。如:
docker run --rm .......
这个尤其在练习容器的操作使用时非常使用,省去了留下一堆垃圾容器需要人工清理的工作。
十、查看容器的内容改变信息
创建一个容器,会在容器的对应的镜像上增加一个可写层,镜像部分是只读的。通过 diff命令可以看出改变的信息。如:
xxx@ubuntu:~$ docker diff mysqldb
A /hello
C /root
A /root/.bash_history
A /root/.mysql_history
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
A /run/mysqld/mysqld.sock.lock
C /tmp
说明:每行代表一个变动的文件或目录。其中 A 表示新增、C表示被修改、D表示被删除(这个例子没有体现)。
十一、主机和容器之间的文件拷贝
很多场景下,我们需要从主机将文件拷贝到容器中,或从容器拷贝文件都主机。利用 cp命令即可,语法格式如下:
docker cp 主机路径 ID/NAME:容器路径 //这是从主机拷贝文件到容器
docker cp ID/NAME:容器路径 主机路径 //这是从容器拷贝文件到主机
十二、创建容器
我们上面的介绍都是用 docker run 创建容器,并在创建成功后立即启动该容器。
还有另外一个docker create命令,该命令使用格式同run命令,但它只创建容器,不会立即启动。要想运行容器,需要单独再执行启动命令。
需要注意的是,使用docker create创建守护容器时,不能带-d标识符。
实际上无论是 run ,还是create命令,都有大量可选的参数,我们这里只是介绍最基本的使用方式(也就是说使用尽量少的参数)。在实际生产环境中,往往会更加复杂。
十三、重命名容器
每个一个容器除了ID外,都有一个name(可以在创建时指定,也可以不指定,由系统自动分配)。
当容器创建后,也可以通过rename命令给容器重命名。重命名时,容器处于运行或停止状态都允许修改。
语法格式: docker rename oldname newname
这个命令还是挺有用的,当一个容器的name不适合时,就需要重新创建,只需修改名称即可。
docker学习笔记2:容器操作的更多相关文章
- Docker学习笔记——制作容器与容器概念
Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器 ...
- docker学习笔记:容器的网络设置
创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头. 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器 ...
- Docker学习笔记之-部署.Net Core 3.1项目到Docker容器,并使用Nginx反向代理(CentOS7)(一)
上一节演示如何安装Docker,链接:Docker学习笔记之-在CentOS中安装Docker 本节演示 将.net core 3.1 部署到docker容器当中,并使用 Nginx反向代理,部署平台 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- Docker学习(四): 操作容器
特别声明: 博文主要是学习过程中的知识整理,以便之后的查阅回顾.部分内容来源于网络(如有摘录未标注请指出).内容如有差错,也欢迎指正! =============系列文章============= 1 ...
- Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7)
前一节演示在docker中安装mssql,地址:Docker学习笔记之--安装mssql(Sql Server)并使用Navicat连接测试(环境:centos7) 本节演示 .Net Core项目容 ...
- Docker学习笔记之--.Net Core应用容器通过网桥连接Redis容器(环境:centos7)
上节演示通过应用容器连接sql server容器,连接:Docker学习笔记之--.Net Core项目容器连接mssql容器(环境:centos7) 本节演示安装 redis容器,通过网桥连接 先决 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- Docker学习笔记总结
Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/ 一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...
- docker学习笔记二:常用命令
docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...
随机推荐
- JAVA知识的相关积累--用于自己以后查找
基础: Properties类操作文件,主要是对配置文件的操作.java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容 ...
- 如何查看程序被哪个版本编译器编译的linux-gcc
如何查看程序被哪个版本编译器编译的linux-gcc http://bbs.csdn.net/topics/380000949 那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后 ...
- shell:监控进程运行状态并自动重启进程
#!/bin/sh MAXRSTCOUNT=; PROCTOGO=/mnt/hgfs/code/test/show #count is the counter of test started time ...
- 「Foundation」结构体
一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文 ...
- JavaScript 导学推荐
基本开始js学习的时候,可能会觉得很混乱,一开始都是从一些简单的表单验证还有拷贝别人效果代码,然后再慢慢去深入了解.我是觉得js是需要一定语言编程基础,我是觉得随着深入,JS的里面实在不算太好理解,个 ...
- bootstrap基础知识
Bootstrap是Twitter推出的一款简洁.直观.强悍的前端开发框架. Bootstrap基于 HTML.CSS.JAVASCRIPT.它由Twitter的设计师Mark Otto和Jacob ...
- c显示数字的LED(数字转LED)
实现这么一个函数:传入一个int值,在屏幕输出类似LED显示屏效果的字母拼图,例如: 输入1234567890,输出: 请注意每个字符的固定宽度和高度,两个数字间保留一个空格. 函数名:void LE ...
- OJ python答题结果"返回非零"
最近在OJ上用python答题,偶尔会遇到结果“放回非零”的情况(Non-zero Exit Code) 总结了以下,目前知道的是这些: 1. 在python2中用了input(),或在python3 ...
- iOS中的图像处理(三)——混合运算
有时候,单独对一张图像进行处理是很难或者根本达不到我们想要的效果的.一个好的滤镜效果的诞生,往往要经过很多复杂步骤.细致微调.图片应用效果观察以及很多图层叠加. 我在JSWidget上发现了一些常用混 ...
- 【LeetCode】【Python题解】Single Number & Maximum Depth of Binary Tree
今天做了三道LeetCode上的简单题目,每道题都是用c++和Python两种语言写的.由于c++版的代码网上比較多.所以就仅仅分享一下Python的代码吧,刚学完Python的基本的语法,做做Lee ...