在上文Docker – 系统整洁之道 – 0中已经对Docker是什么,安装Docker以及怎么运行一个简单的容器有了初步了解,这篇文章介绍Docker的一些命令和Docker镜像的使用及操作。

一些Docker命令


Docker的命令按照使用一个容器的顺序进行。

docker info 查看Docker的信息

~  docker info
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 8
Server Version: 1.12.1
Storage Driver: aufs
Root Dir: /var/lib/docker/aufs
...

能查看到docker信息,说明docker是安装好的。

docker run 运行一个容器

~  docker run -it ubuntu
root@8eac2e6cf194:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@8eac2e6cf194:/#

由于在上文中已经运行过一次该条命令,所以ubuntu的镜像已经下载到了本地,此次运行就可以使用该镜像产生一个容器,在容器启动后,上过-it获取到命令行,运行命令ls

使用–name标志可以给容器定义一个名字,如

docker run –name this_is_first_ubunt_container -it ubuntu

就会创建一个名字叫做this_is_first_ubunt_container的ubuntu的容器。名字只能使用大小写字母,数字,下划线,原点和横线,即[a-zA-Z0-9_.-]。

关于docker run的帮助可以使用docker run --help获取。

docker ps 列出所有的容器

~  docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8eac2e6cf194 ubuntu "/bin/bash" 5 minutes ago Up 5 minutes modest_davinci

使用docker ps命令可以看到当前正在运行的容器有哪些,并给出了一些相应的属性。给命令增加参数-a就可以获取当前所有的容器,包括已经停止的,如下。

~  docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d0cc9a960f1 hello-world "/hello" About a minute ago Exited (0) About a minute ago small_roentgen
8eac2e6cf194 ubuntu "/bin/bash" 4 minutes ago Up 4 minutes modest_davinci

docker ps -n x,显示最后x个容器,不管容器正在运行还是停止。

docker start 重新启动已经停止的容器

docker start

docker start this_is_first_ubunt_container

docker attatch 附着容器

docker attach this_is_first_ubunt_container

docker stop 停止一个容器

~  docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d0cc9a960f1 hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago small_roentgen
8eac2e6cf194 ubuntu "/bin/bash" 8 minutes ago Up 8 minutes modest_davinci
~ docker stop 8eac2e6cf194
8eac2e6cf194
~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4d0cc9a960f1 hello-world "/hello" 4 minutes ago Exited (0) 4 minutes ago small_roentgen
8eac2e6cf194 ubuntu "/bin/bash" 8 minutes ago Exited (0) 5 seconds ago modest_davinci

前几个命令整体练习

创建一个有名字的container,停止它,启动它。

~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
03248ab5d03b tomcat:latest "catalina.sh run" 2 days ago Exited (0) 2 days ago tomcat
4d0cc9a960f1 hello-world "/hello" 4 days ago Exited (0) 4 days ago
~ docker run --name this_is_first_ubunt_container -it ubuntu
root@894b1f0fa739:/# whoami
root
root@894b1f0fa739:/# exit
exit
~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894b1f0fa739 ubuntu "/bin/bash" 21 seconds ago Exited (0) 14 seconds ago this_is_first_ubunt_container
03248ab5d03b tomcat:latest "catalina.sh run" 2 days ago Exited (0) 2 days ago tomcat
4d0cc9a960f1 hello-world "/hello" 4 days ago Exited (0) 4 days ago small_roentgen
~ docker start 894b1f0fa739
894b1f0fa739
~ docker attach 894b1f0fa739
root@894b1f0fa739:/# whoami
root
root@894b1f0fa739:/# exit
exit
~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
894b1f0fa739 ubuntu "/bin/bash" About a minute ago Exited (0) 8 seconds ago this_is_first_ubunt_container
03248ab5d03b tomcat:latest "catalina.sh run" 2 days ago Exited (0) 2 days ago tomcat
4d0cc9a960f1 hello-world "/hello" 4 days ago Exited (0) 4 days ago small_roentgen
~ docker start this_is_first_ubunt_container
this_is_first_ubunt_container
~ docker attach this_is_first_ubunt_container
root@894b1f0fa739:/# whoami
root
root@894b1f0fa739:/# exit
exit

守护式容器

上面创建的ubuntu是交互式运行的容器(interactive container),也可以创建一个长期运行的容器–守护式容器(daemonized container)。

~ docker run --name daemon_ubuntu -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"
e56ae29adaf1d27cf49e05bccda5a7214be458fecc2afb0ff7721f16af8e044c
~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e56ae29adaf1 ubuntu "/bin/sh -c 'while tr" About a minute ago Up About a minute daemon_ubuntu

docker logs 容器日志

~ docker logs daemon_ubuntu
hello world
hello world
hello world
hello world
... ~ docker logs --tail 0 -f daemon_ubuntu
hello world
hello world
hello world
hello world
hello world

docker top 容器进程

~ docker top daemon_ubuntu
PID USER TIME COMMAND
2792 root 0:00 /bin/sh -c while true;do echo hello world;sleep 1;done
3264 root 0:00 sleep 1

容器内运行进程

~ docker exec -d daemon_ubuntu touch /etc/new_config_file
~ docker exec -it daemon_ubuntu /bin/sh
# ls -l /etc | grep new
-rw-r--r-- 1 root root 0 Oct 13 02:21 new_config_file

docker inspect 容器详细信息

~  docker inspect daemon_ubuntu
# 获取容器运行状态
~ docker inspect --format='{{.State.Running}}' daemon_ubuntu
# 查看容器IP地址
~ docker inspect --format='{{.NetworkSettings.IPAddress}}' daemon_ubuntu

自动重启容器

docker run –restart=always –name daemon_ubuntu -d ubuntu /bin/sh -c “while true;do echo hello world;sleep 1;done”

–restart=always 无论容器的退出代码为何,都自动重启。

–restart=on-failure 当容器退出代码不为0时,自动重启。

–restart=on-failure:5 重启5次。

docker rm 删除容器

运行中的Docker容器是无法删除的。

# 删除所有容器
docker rm `docker ps -a -q`

Docker 镜像

docker images

Linux /var/lib/docker

Mac $HOME/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2

docker pull ubuntu:16.10 获取ubuntu仓库中tag为16.10的镜像。

docker pull -a ubuntu 获取ubuntu仓库中所有镜像。

docker images ubuntu 列出本地所有ubuntu仓库的镜像。

docker run 的时候如果没有指定镜像的版本,则拉取最新版本进行创建。

Docker Hub 中仓库分为两种,一种是用户仓库(user repository),这种是用户创建使用的的,命名方式为username/repositoryname,意义为用户名/仓库名;一种是顶层仓库(top-repository),由docker内部人员管理。

docker search 查找Docker Hub上公用可用镜像。

获取镜像时,格式其实可以看做 用户/仓库:标签。 由于很多仓库为官网所有,所有很多都变成了 仓库:标签,如上面写的 ubuntu:16.10,ubutnu仓库的tag为16.10的镜像。

构建镜像

docker commit

docker build 和 Dockerfile文件

一般来说,我们不是真正「创建」了一个镜像,而是基于一个已有的镜像,构建了一个新的镜像。

参考链接


  1. Docker 从入门到实践
  2. 第一本Docker书
  3. 一个比较详细的命令用法

Docker -- 系统整洁之道 -- 1的更多相关文章

  1. Docker -- 系统整洁之道 -- 0

    在我的小 rmbp 256G的硬盘里,实在是装不下100多个G的虚拟机了,所以想把一些东西迁移到这两年很火的Docker下,Docker以前也有过一两次,只是按着别人给的用法用的,具体的一些细节并没有 ...

  2. <读书笔记> 代码整洁之道

    概述      1.本文档的内容主要来源于书籍<代码整洁之道>作者Robert C.Martin,属于读书笔记. 2.软件质量,不仅依赖于架构和项目管理,而且与代码质量紧密相关,本书提出一 ...

  3. <代码整洁之道>、<java与模式>、<head first设计模式>读书笔记集合

    一.前言                                                                                       几个月前的看书笔记 ...

  4. 免费电子书:C#代码整洁之道

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:<Clean Code(代码整洁之道)>是一本经典的著作,那么对于编写整洁 ...

  5. 2015年第11本:代码整洁之道Clean Code

    前一段时间一直在看英文小说,在读到<Before I fall>这本书时,读了40%多实在看不下去了,受不了美国人啰啰嗦嗦的写作风格,还是读IT专业书吧. 从5月9日开始看<代码整洁 ...

  6. 学习笔记——Ubuntu下使用Docker包部署禅道任务管理系统

    写此文目的:利用搭建禅道环境联系Docker基本使用方法,加深对Docker容器的理解,Ubuntu下面才能原生运行Docker,因此选择了Ubuntu 1.下载禅道开源版 wget http://d ...

  7. Programming好文解读系列(—)——代码整洁之道

    注:初入职场,作为一个程序员,要融入项目组的编程风格,渐渐地觉得系统地研究下如何写出整洁而高效的代码还是很有必要的.与在学校时写代码的情况不同,实现某个功能是不难的,需要下功夫的地方在于如何做一些防御 ...

  8. 《代码整洁之道》ch5~ch9读书笔记 PB16110698(~3.15) 第二周

    <代码整洁之道>ch5~ch9读书笔记 本周我阅读了本书的第5~9章节,进一步了解整洁代码需要注意的几个方面:格式.对象与数据结构.错误处理.边界测试.单元测试和类的规范.以下我将分别记录 ...

  9. 《代码整洁之道 中文版》高清 PDF 电子书下载

    代码整洁之道.PDF 下载 代码整洁之道.PDF 中文版 高清 PDF  电子书下载 代码整洁之道下载  点我下载 作者简介  · · · · · · Robert C. Martin,Object ...

随机推荐

  1. camke 参数

    cmake -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \   -DMYSQL_DATADIR=/application/mysql-5.5.32 ...

  2. Docker学习总结(8)——利用Docker开启持续交付之路

    持续交付即Continuous Delivery,简称CD,随着DevOps的流行正越来越被传统企业所重视.持续交付讲求以短周期.小细粒度,自动化的方式频繁的交付软件,在这个过 程中要求开发.测试.用 ...

  3. [React] Refactor a Stateful List Component to a Functional Component with React PowerPlug

    In this lesson we'll look at React PowerPlug's <List /> component by refactoring a normal clas ...

  4. 严重: 文档无效: 找不到语法。 at (null:2:19)

    1.错误描写叙述 严重: 文档无效: 找不到语法. at (null:2:19) org.xml.sax.SAXParseException; systemId: file:/D:/MyEclipse ...

  5. mysql-幻读及其例子

    第一步建表并插入5条记录:  接下来我们看下大部分mysql所说的幻读现象: 事务1(开启事务查询发现没有记录6准备插入):  事务2(开启事务,发现没有记录6插入,并提交事务):  事务1:查询发现 ...

  6. &lt;九度 OJ&gt;题目1545:奇怪的连通图

    题目描写叙述: 已知一个无向带权图,求最小整数k.使仅使用权值小于等于k的边,节点1能够与节点n连通. 输入: 输入包括多组測试用例.每组測试用例的开头为一个整数n(1 <= n <= 1 ...

  7. tomcat和nginx相互结合的优化调整

    在工作中遇到这样的情况 Tomcat为后台 nginx为反向代理 需要往后台导入数据,由于处理时间过长,导致访问时出现504和500  通过修改tomcat中maxParameterCount=&qu ...

  8. java 类和对象1

    编写一个Java应用程序,该程序中有3个类:Lader.Circle和主类A.具体要求如下:Lader类具有类型为double的上底.下底.高.面积属性,具有返回面积的功能,包括一个构造方法对上底.下 ...

  9. CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法

    CentOS 7.4 ifconfig, ip/ss, nmcli, nmtui, 配置文件 修改ip信息用法 CentOS 7.4 中, 网卡命名方式发生改变, 可预测功能命名: 网卡简要名称组成格 ...

  10. SCO Openserver、SCO Unix、SCO UnixWare、Solaris几者到底是什么关系,有什么相同或不同?

    Unix操作系统的历史漫长而曲折,它的第一个版本是1969年由Ken Thompson在AT&T贝尔实验室实现的,运行在一台DEC PDP-7计算机上.这个系统非常粗糙,与现代Unix相差很远 ...