关注公众号,大家可以在公众号后台回复“博客园”,免费获得作者 Java 知识体系/面试必看资料。

上篇文章向读者介绍了一个 Nginx 的例子,对于 Nginx 这样一个容器而言,当它启动成功后,我们不可避免的需要对 Nginx 进行的配置进行修改,那么这个修改要如何完成呢?且看下文。

​本文是本系列第三篇,阅读前面文章有助于更好理解本文:


1.Docker 入门及安装[Docker 系列-1]

2.Docker 容器基本操作[Docker 系列-2]


依附容器

docker attach

依附容器这个主要是针对交互型容器而言的,该命令有一定的局限性,可以作为了解即可,真正工作中使用较少。

要是用 docker attach 命令,首先要确保容器已经启动,然后使用该命令才能进入到容器中。具体操作步骤如下:

  • 创建一个容器,然后启动:

  • 不要关闭当前窗口,再打开一个新的终端,执行 docker attach ubuntu :

此时就能进入到容器的命令行进行操作了。

如果容器已经关闭或者容器是一个后台容器,则该命令就无用武之地了。

由上面的操作大家可以看到,这个命令的局限性很大,使用场景也不多,因此大家作为一个了解即可。

容器内执行命令

如果容器在后台启动,则可以使用 dockerexec 在容器内执行命令。不同于 docker attach ,使用 dockerexec 即使用户从终端退出,容器也不会停止运行,而使用 docker attach 时,如果用户从终端退出,则容器会停止运行。如下图:

基于这样的特性, 我们以后在操作容器内部时,基本上都是通过 dockerexec 命令来实现。

查看容器信息

容器创建成功后,用户可以通过 docker inspect 命令查看容器的详细信息,这些详细信息包括容器的 id 、容器名、环境变量、运行命令、主机配置、网络配置以及数据卷配置等信息。执行部分结果如下图:

使用 format 参数可以只查看用户关心的数据,例如:

  • 查看容器运行状态

  • 查看容器ip地址

  • 查看容器名、容器id

  • 查看容器主机信息

容器的详细信息,在我们后边配置容器共享目录、容器网络时候非常有用,这个我们到后面再来详细介绍。

查看容器进程

使用 docker top 命令可以查看容器中正在运行的进程,首先确保容器已经启动,然后执行 docker top 命令,如下:

查看容器日志

交互型容器查看日志很方便,因为日志就直接在控制台打印出来了,但是对于后台型容器,如果要查看日志,则可以使用docker提供的 docker logs 命令来查看,如下:

如下图,首先启动一个不停打日志的容器,然后利用 docker logs 命令查看日志,但是默认情况下只能查看到历史日志,无法查看实时日志,使用 -f 参数后,就可以查看实时日志了。

使用 --tail 参数可以精确控制日志的输出行数, -t 参数则可以显示日志的输出时间。

该命令在执行的过程中,首先输出最近的三行日志,同时由于添加了 -f 参数,因此,还会有其他日志持续输出。同时,因为添加了 -t 参数,时间随同日志一起打印出来了。

docker 的一大优势就是可移植性,容器因此 docker 容器可以随意的进行导入导出操作。

容器导出

既然是容器,我们当然希望 Docker 也能够像 VMWare 那样方便的在不同系统之间拷贝,不过 Docker 并不像 VMWare 导出容器那样方便(事实上,VMWare 中不存在容器导出操作,直接拷贝安装目录即可),在 Docker 中,使用 export 命令可以导出容器,具体操作如下:

  • 创建一个容器,进行基本的配置操作

本案例中我首先创建一个 nginx 容器,然后启动,启动成功后,将本地一个 index.html 文件上传到容器中,修改 nginx 首页的显示内容。具体操作步骤如下:

  1. docker run -itd --name nginx -p 80:80 nginx

  2. vi ./blog/docker/index.html

  3. docker cp ./blog/docker/index.html nginx:/usr/share/nginx/html/

首先运行一个名为 nginx 的容器,然后在宿主机中编辑一个 index.html 文件,编辑完成后,将该文件上传到容器中。然后在浏览器中输入 http://localhost:80 可以看到如下结果:

容器已经修改成功了。

接下来通过 export 命令将容器导出,如下:

该命令将容器导入到 docker 目录下。导出成功之后,我们就可以随意传播这个导出文件了,可以发送给其他小伙伴去使用了,相对于 VMWare 中庞大的文件,这个导出文件非常小。一般可能只有几百兆,当然也看具体情况。

容器导入

其他小伙伴拿到这个文件,通过执行如下命令可以导入容器(如果自己重新导入,需要记得将 docker 中和 nginx 相关的容器和镜像删除):

容器导入成功后,就可以使用 docker run 命令运行了。运行成功之后,我们发现自己定制的 index.html 页面依然存在,说明这是我们自己的那个容器。

参考资料:

[1] 曾金龙,肖新华,刘清.Docker开发实践[M].北京:人民邮电出版社,2015.

 


密封线

我们在知识星球,欢迎你加入

前1000人,50元/年

长按二维码▽

密封线


Java 极客技术公众号,是由一群热爱 Java 开发的技术人组建成立,专注分享原创、高质量的 Java 文章。如果您觉得我们的文章还不错,请帮忙赞赏、在看、转发支持,鼓励我们分享出更好的文章。

Docker 容器高级操作[Docker 系列-3]的更多相关文章

  1. Docker容器技术-优化Docker镜像

    一.优化Docker镜像 1.降低部署时间 一个大的Docker应用是如何影响在新Docker宿主机上的部署时间. (1)编写Dockerfile创建一个大Docker镜像 [root@bogon ~ ...

  2. 解决Docker容器 iptables问题---docker: Error response from daemon: driver failed programming external connectivity on endpoint quizzical_thompson

    一.问题现象 最近在研究Docker容器日志管理时,启动容器出现iptables相关报错,具体问题如下 运行容器 [root@node-11 ~]# docker run -d -p 24224:24 ...

  3. docker容器的操作

    容器操作 1.查看本地容器 docker ps -a # 查看所有容器 docker ps # 查看所有正在运行的容器 2.容器的创建与启动 方法一:两步完成(强烈推荐方法)(1)创建 docker ...

  4. docker容器管理操作

    Docker容器的四种状态: 运行 已暂停 重新启动 已退出 1.容器的创建 容器创建:就是将镜像加载到容器的过程. 创建容器时如果没有指定容器名称,系统会自动创建一个名称. 新创建的容器默认处于停止 ...

  5. Docker 容器镜像操作

    1.停止所有的container,这样才能够删除其中的images:docker stop $(docker ps -a -q)如果想要删除所有container的话再加一个指令: docker rm ...

  6. Docker容器化【Docker镜像与容器相关命令】

    # Docker 学习目标: 掌握Docker基础知识,能够理解Docker镜像与容器的概念 完成Docker安装与启动 掌握Docker镜像与容器相关命令 掌握Tomcat Nginx 等软件的常用 ...

  7. Docker 容器编排利器 Docker Compose

    Compose 简介 通过前面几篇文章的学习,我们可以通过 Dockerfile 文件让用户很方便的定义一个单独的应用容器.然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况,例如 ...

  8. 在docker容器中调用docker命令

    宿主容器均为CentOS7.6.1810 docker run -it --rm \ -v /usr/bin/docker:/usr/bin/docker \ -v /var/run/docker.s ...

  9. Docker SDK api操作Docker

    下载包 go get "github.com/docker/docker/api/types" go get "github.com/docker/docker/clie ...

随机推荐

  1. Linux下,非Docker启动Elasticsearch 6.3.0,安装ik分词器插件,以及使用Kibana测试Elasticsearch,

    Linux下,非Docker启动Elasticsearch 6.3.0 查看java版本,需要1.8版本 java -version yum -y install java 创建用户,因为elasti ...

  2. vue-cli的服务代理

    vue-cli的默认端口是8080,如果我们的请求如下 我们就可以将地址改成

  3. 借助URLOS快速安装Discuz论坛

    ### 简介 Discuz!是个可免费下载的PHP网络论坛程序,简称DZ,由戴志康所创立,当前最新版本是Discuz! X3.4.前身为Crossday Bulletin,最初改自XMBForum,尔 ...

  4. 设计模式-状态模式(State)

    状态模式是行为模式的一种,状态模式允许改变对象内部状态来改变对象的行为. 角色和职责: 1.上下文(Context)-Order:    拥有内部的状态 2.状态接口(Status)-State: 一 ...

  5. 源码阅读 - java.util.concurrent (四)CyclicBarrier

    CyclicBarrier是一个用于线程同步的辅助类,它允许一组线程等待彼此,直到所有线程都到达集合点,然后执行某个设定的任务. 举个例子:几个人约定了某个地方集中,然后一起出发去旅行.每个参与的人就 ...

  6. django实战仿慕课网在线视频网站(完成了85%以上的功能已上传github:https://github.com/huwei86/mxonline):

    1. 前台功能模块 基本模块:登录 注册 找回密码 / 全局搜索 / 个人中心, 课程功能:课程管理 / 讲师管理 / 授课机构管理  热门推荐 相关课程推荐 用户操作管理:用户收藏 / 课程评论   ...

  7. c++快速排序算法

    c++快速排序算法 题目描述 利用快速排序算法将读入的NN个数从小到大排序后输出. 快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成.(C++选 ...

  8. Linux命令学习-history命令

    Linux中,history命令的作用是显示历史记录和执行过的命令. 查看历史所有命令执行记录 history 查看最近的13条历史执行命令 history 13 执行历史记录中,序号为123的命令 ...

  9. 在rman恢复中incarnation的概念

    摘要 本文主要介绍incarnation的由来,在rman恢复中的作用,以及相关rman恢复的注意事项. 概念说明 从10g开始,incarnation被引入,用于跨越resetlogs进行恢复,由此 ...

  10. 一个简单的使用mock技术进行测试的例子

    Account: public class Account { private String acountId; private long balance; public Account(String ...