笔记 Docker 常用命令

Docker 常用命令

Docker 帮助命令

Docker verison

Docker info

Docker –help

镜像命令

Docker images 列出本地主机上的镜像

参数options说明:

-a :列出本地所有的镜像(含中间映像层)

-q :只显示镜像ID

--digests:显示镜像的摘要信息

--no-trunc: 显示完整的镜像信息

REPOSITORY:镜像的仓库源

TAG:镜像的标签

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

Docker search 镜像xxx的名字 从hub.docker.com上查询镜像

Docker run [OPTIONS] IMAGE [COMMAND][ARG]

OPTIONS说明:

--name=”容器的新名字”:为容器指定一个名称

-d:后台运行容器,并返回容器ID,也即启动守护式容器

-i:以交互式运行容器,通常与-t同时使用

-t:为容器重新分配一个伪输入终端,通常与-i同时使用

-P:随机端口映射

-p:指定端口映射,有以下四种形式

Ip:hostPort:containerPort

Ip::containerPort

hostPort:containerPort

containerPort

重要

1.启动守护式容器:

使用镜像centos:lastest 以后台模式启动一个容器:docker run –d 镜像名称或ID

问题:然后用docker ps –a 进行查看,会发现容器已经退出

很重要的要说明的一点:Docker容器后台运行,就必须有一个前台进程

容器运行的命令如果不是那些一直挂起的命令(比如运行top,tail),就是会自动退出的。

这个是docker的机制问题,比如你的web容器,我们已nginx为例,正常情况下,我们配置的启动服务只需要启动响应的service即可。例如 service nginx start

但是这样做,nginx为后台进程模式运行,就导致docker前台没有运行的引用,这样的容器后台启动后,会立即自杀,因为他觉得没事可做了。所以,最佳的解决方案是将你要运行的程序以前台进程的形式运行。

2.查看容器日志

Docker logs –f –t –tail 容器ID或容器名称

-f :跟随最新的日志打印

-t:加入时间戳

--tail:数字,显示最后多少条日至

查看Linux下所有运行的进程 :ps –ef

  1. 查看容器内运行的进程(top命令为linux系统查看正在运行的进程)

Docker top 容器ID或容器名称

4.查看容器内部细节

Docker inspect 容器ID或容器名称

5.进入正在运行的容器并以命令行交互

Docker exec –it 容器ID bashShell

重新进入docker attach 容器Id

上述两个区别

attach 直接进入容器启动命令的终端,不会启动新的进程

exec 实在容器中打开新的终端,并且可以启动新的进程

6.从容器内拷贝文件到主机上

Docker cp 容器id:容器内路径 目的主机路径

例如:docker cp 23ffdfe76c82:/usr/local/tomcat/webapps /home/webapps

Docker ps [OPTIONS] 查看docker运行的容器

OPTIONS说明:

-a:列出当前所有正在运行的容器(up状态) + 历史上运行过的(Existed状态)

-l:显示最近创建的容器

-n:显示最近n个创建的容器。

-q:静默模式,只显示容器编号

--no-trunc:不截断输出

退出容器:

退出容器两种方式

Exit 容器停止退出

Ctrl + P + Q 容器不停止退出

启动容器:docker start 容器名称或容器id

重起容器: docker restart容器名称或容器id

停止容器:docker stop容器名称或容器id

强制停止容器:docker kill 容器名称或容器id

删除已停止的容器:docker rm 容器名称或容器id

强制删除未停止的容器:docker rm –f容器名称或容器id

一次性删除多个容器:

  1. Docker rm –f $(docker ps –a -q)

  1. Docker ps –a –q | xargs docker rm

Docker容器

Docker利用容器(container)独立运行的一个或一组应用。容器使用镜像创建的运行实例。

它可以被启动、停止、移动、删除。每个容器都是相互隔离的、保证安全的平台。

可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

Docker镜像

是什么?UnionFS(联合文件系统)

UnionFS:Union文件系统是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union文件系统是docker镜像的基础。镜像可以通过分成来进行集成,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。特性:一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录。

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件。

Docker镜像加载原理:

Docker的镜像实际上由一层一层文件系统组成,这种层级的文件系统UnionFS。

Bootfs(boot file system)主要包含bootloader和kernel,bootloader主要是引导加载kernel,Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们点形的linux/unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会写在bootfs。

Rootfs(root file system),在bootfs之上。包含的就是典型linux系统中的/dev,/proc,/bin,/etc等标准目录和文件。Rootfs就是各种不同的操作系统发行版,比如ubuntu,centos等等。

Docker 创建镜像

Docker commit 提交容器副本使之成为一个新的镜像

Docker commit –m=”提交的镜像的描述信息” –a=”作者” 容器ID 要创建的目标镜像名:[标签名]

例如:

[root@localhost containers]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

wbz/tomcat 1.1 3cef9aa8db46 18 minutes ago 654MB

wbz/tomat9.0.1 latest 6e82c74171ec 35 minutes ago 654MB

tomcat latest 040bdb29ab37 4 weeks ago 649MB

centos latest 300e315adb2f 2 months ago 209MB

[root@localhost containers]# docker run -d -p 9999:8080 --name mytomcat09 wbz/tomcat:1.1

Docker容器卷

Docker概念:将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求希望是持久化的

容器之间希望有可能共享数据

Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了

为了能保存数据在docker中我们使用卷

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File system 提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂载的数据卷

特点:1. 数据卷可在容器之间共享或重用数据

  1. 卷中的梗概可以直接生效

  1. 数据卷中的更改不会包含在镜像的更新中

  1. 数据卷的生命周期一直持续到没有容器使用它为止

Docker 添加卷的方法:

  1. 直接命令添加

命令: docker run –it –v /宿主机绝对路径目录:/容器内目录 镜像名

docker run -it -p 8888:8080 -v /home/webapps/:/usr/local/tomcat/webapps --name tomcatV tomcat

容器内目录带权限

Docker run –it –v /宿主机绝对路径:/容器内目录:ro 镜像名

2. docker file 添加

DockerFile编写步骤

  1. 手动编写一个dockerfile文件,必须要符合dockerfile的规范

  1. 使用dockerfile命令执行这个文件,生成一个自定义的镜像

  1. Run

Dockerfile是什么?

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本

Dockerfile内容基础知识

  1. 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数

  1. 指令按照从上到下,顺序执行

  1. [#]表示注释

  1. 每条指令都会创建一个新的镜像层,并对镜像进行提交

Docker执行dockfile的大致流程

  1. Docker从基础镜像运行一个容器

  1. 执行一条指令并对容器做出修改

  1. 执行类似docker commit的操作提交一个新的镜像层

  1. Docker再基于刚刚提交的镜像运行一个新容器

  1. 执行dockerfile中的下一条指令直到所有指令都执行完成

从应用软件的角度来看,Dockerfile、docker镜像与docker容器分别代表软件的三个不同阶段:

  1. Dockerfile是软件的原材料

  1. Docker镜像是软件的交付品

  1. Docker容器则可以认为是软件的运行态

Dockerfile面向开发,docker镜像成为交付标准,docker容器则涉及部署与运维,三者缺一不可,合力充当docker体系的基石

  1. Dockerfile,需要定义一个Dockerfile,dockerfile定义了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时环境、动态链接库、操作系统的发行版、服务进程和内核进程(当应用进程需要和系统服务和内核进程打交道,这是需要考虑如何设计namespace的权限控制)等等;

  1. Docker镜像,在用dockerfile定义一个文件后,docker build时会产生一个docker镜像,当运行docker镜像时,会真正开始提供服务;

  1. Docker容器,容器是直接提供服务的

Dockerfile体系结构(保留字指令)

  1. FROM 基础镜像,当前新镜像是基于那个镜像的

  1. MAINTAINER 镜像维护者的姓名和邮箱地址

  1. RUN 容器构建时需要运行的命令

  1. EXPOSE 当前容器对外暴露出的端口

  1. WORKDIR 指定在创建容器后,终端默认登陆近来的工作目录,一个落脚点,默认为根目录

  1. ENV 用来在构建镜像过程中设置环境变量

例如:ENV MY_PATH /usr/mytest

这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其他指令中直接使用这些环境变量,

比如:WORKDIR $MY_PATH ,此时docker run命令执行后,登陆默认目录变为/usr/mytest

  1. ADD 将宿主机目录下的文件拷贝进镜像,且ADD命令会自动处理URL和解压tar压缩包

  1. COPY 类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路经>的文件/目录复制到新的一层的镜像内的<目标路径>位置

例如:COPY src dest 或 COPY [“src”,”dest”]

  1. VOLUME 容器数据卷,用于数据保存和持久化工作

  1. CMD

1.指定一个容器启动时要运行的命令

CMD容器启动命令

CMD指令的格式和RUM相似,也是两种格式:

. shell格式:CMD <命令>

. exec 格式:CMD [“可执行文件”,”参数1”,“参数2”…]

. 参数列表格式:

2.Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换

  1. ENTRYPOINT

  1. 指定一个容器启动时要运行的命令

  1. ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数

  1. ONBUILD

当构建一个被继承的dockerfile时运行命令,父镜像在被自己成后,父镜像的onbuild被触发

案例:

Base镜像(scratch): docker hub 中99%的镜像都是通过在base镜像中安装和配置需要的软件构建出来的

自定义镜像mycentos:

  1. 编写

. hub默认Centos镜像什么情况

. 准备编写dockerfile文件

. mycentos内容dockerfile

  1. 构建

docker build –f dockerfile文件的路径 –t 新镜像名字:TAG .

注意:会看到TAG后面有一个 [.] 表示当前目录

  1. 运行

Docker run –it 新镜像名字:TAG

  1. 列出镜像的变更历史

Docker history 镜像名

docker build 命令后"."

我们在使用 docker build 命令去构建镜像时,往往会看到命令最后会有一个 . 号。

docker build -t xxxxx .

那么这里的 . 号代表什么意思呢?

在我们学习对 . 号的理解有所偏差,以为是用来指定 Dockerfile 文件所在的位置的,但其实 -f 参数才是用来指定 Dockerfile 的路径的,那么 . 号究竟是用来做什么的呢?

Docker 在运行时分为 Docker引擎(服务端守护进程) 以及 客户端工具,我们日常使用各种 docker 命令,其实就是在使用客户端工具与 Docker 引擎 进行交互。

那么当我们使用 docker build 命令来构建镜像时,这个构建过程其实是在 Docker引擎 中完成的,而不是在本机环境。

那么如果在 Dockerfile 中使用了一些 COPY 等指令来操作文件,如何让 Docker引擎 获取到这些文件呢?

这里就有了一个镜像构建上下文的概念,当构建的时候,由用户指定构建镜像的上下文路径,而 docker build 会将这个路径下所有的文件都打包上传给 Docker 引擎,引擎内将这些内容展开后,就能获取到所有指定上下文中的文件了。

比如说 dockerfile 中的 COPY ./package.json /project,其实拷贝的并不是本机目录下的 package.json 文件,而是 docker引擎 中展开的构建上下文中的文件,所以如果拷贝的文件超出了构建上下文的范围,Docker引擎 是找不到那些文件的。

所以 docker build 最后的 . 号,其实是在指定镜像构建过程中的上下文环境的目录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值