首页 > 技术文章 > docker 基本命令

winyh 2020-12-24 16:28 原文

Docker 重启 systemlctl restart docker 

 

1.docker veriosn 
查看详细版本。

该命令用来检测客户端和服务端是否都已经成功运行,并且可以互相通信如果能成功获取来自客户端和服务端的响应,那么可以继续后面的操作。

 

2.docker --version 

查看版本号

 

3.docker image ls  (docker images)

查看镜像列表

 

4.docker rm <容器ID或容器名> 

删除容器

 

5.docker rmi <镜像ID或镜像名> 

删除镜像

 

6.docker ps

-s 查看容器大小

 

7.docker pull <镜像名称>

拉取镜像。如果使用 Linux,那么会拉取 ubuntu:latest 镜像;如果使用 Windows,则会拉取 microsoft/powershell:nanoserver 镜像

 

8.docker container run 容器启动

docker container run -it ubuntu:latest /bin/bash

docker container run 告诉 Docker daemon 启动新的容器。

ps -elf (容器内部运行ps命令查看当前正在运行的全部进程)

docker container run --rm golang go version (此操作包括从 Docker Hub 拉取 Golang 镜像,以容器方式启动,执行 go version 命令,并且输出 Go 的版本和主机 OS / CPU 架构信息)

 

-d 表示后台模式(可以替代 -t),告知容器在后台运行

-p 80:8080   -p 参数将 Docker 主机的端口映射到容器内

(将 Docker 主机的 80 端口映射到了容器内的 8080 端口。这意味着当有流量访问主机的 80 端口的时候,流量会直接映射到容器内的 8080 端口。之所以如此是因为当前使用的镜像,其 Web 服务监听了 8080 端口。这意味着容器启动时会运行一个 Web 服务,监听 8080 端口。)

 

(1)-it 参数告诉 Docker 开启容器的交互模式,可以将当前终端连接到容器的 Shell 终端之上。

(2)接下来,命令告诉 Docker,用户想基于 ubuntu:latest 镜像启动容器(如果用户使用 Windows,则是基于 microsoft/powershell:nanoserver 镜像)

(3)最后,命令告诉 Docker,用户想要在容器内部运行哪个进程。对于 Linux 示例来说是运行 Bash Shell

 

9.docker container ls 

查看系统内全部处于运行状态的容器。

-a

查看所有容器,包含处于停止状态的。

 

10.docker container exec

连接到允许中的容器

docker container exec -it  <容器id或容器名> bash

(exit 退出容器)

 

11.docker search <镜像名称>

搜索镜像

docker search alpine

--filter "is-official=true" 只返回官方镜像

 

12.docker image inspect

查看本地镜像分层。该命令完美展示了镜像的细节,包括镜像层数据和元数据

docker image inspect ubuntu:latest

 

13.docker image rm $(docker image ls -q) -f

可以看到 docker image ls -q 命令只返回了系统中本地拉取的全部镜像的 ID 列表。将这个列表作为参数传给 docker image rm会删除本地系统中的全部镜像。

 

14.docker container run <image> <app>

docker container run apline bash

指定了启动所需的镜像以及要运行的应用。

 

15.docker container start

容器启动

 

16.docker container stop

容器停止

 

17.$()

清理全部容器

 

18.docker container rm  <容器id>

删除停止运行的容器

 

19.docker container inspect <容器id>

显示容器的配置细节和运行时信息。该命令接收容器名称和容器 ID 作为主要参数

 

 

Alpine 操作系统是一个面向安全的轻型 Linux 发行版

 

容器和虚拟机都依赖于宿主机才能运行。宿主机可以是笔记本,是数据中心的物理服务器,也可以是公有云的某个实例。

 

每个容器看起来就像一个真实的操作系统,在其内部可以运行应用。但容器并不是完整的操作系统,所以其启动要远比虚拟机快

 

Hypervisor (虚拟机)是硬件虚拟化(Hardware Virtualization)——Hypervisor 将硬件物理资源划分为虚拟资源。

容器是操作系统虚拟化(OS Virtualization)——容器将系统资源划分为虚拟资源

 

 

 

docker 镜像:

(1) Docker 镜像理解为一个包含了 OS 文件系统和应用的对象。镜像包含了基础操作系统,以及应用程序运行所需的代码和依赖包。

(2) 如果拉取了如 nginx 或者 microsoft/iis 这样的应用容器,就会得到一个包含操作系统的镜像,并且在镜像中还包括了运行 Nginx 或 IIS 所需的代码。

(3) 镜像可以启动一个或多个容器。

(4) 镜像由多个层组成,每层叠加之后,从外部看来就如一个独立的对象。镜像内部是一个精简的操作系统(OS),同时还包含应用运行所必须的文件和依赖包.因为容器的设计初衷就是快速和小巧,所以镜像通常都比较小

(5) 镜像就像停止运行的容器(类)。实际上,可以停止某个容器的运行,并从中创建新的镜像。

(6) 镜像可以理解为一种构建时(build-time)结构,而容器可以理解为一种运行时(run-time)结构.

(7) 一旦容器从镜像启动后,二者之间就变成了互相依赖的关系,并且在镜像上启动的容器全部停止之前,镜像是无法被删除的.

(8) 通常 Docker 镜像中只有一个精简的Shell,甚至没有 Shell.

(9) 镜像中还不包含内核——容器都是共享所在 Docker 主机的内核。所以有时会说容器仅包含必要的操作系统(通常只有操作系统文件和文件系统对象)

(10) Docker 官方镜像 Alpine Linux 大约只有 4MB,可以说是 Docker 镜像小巧这一特点的比较典型的例子。但是,镜像更常见的状态是如 Ubuntu 官方的 Docker 镜像一般,大约有 110MB。这些镜像中都已裁剪掉大部分的无用内容.

(11) Linux Docker 主机本地镜像仓库通常位于 /var/lib/docker/<storage-driver>

(12) 想在 Docker 主机使用最新的 Ubuntu 镜像,需要拉取它。docker image pull  ubantu (执行后拉取的镜像已经存在于 Docker 主机本地仓库中)

(13) docker image pull <repository>:<tag>  在官方仓库定位一个镜像(镜像仓库可以配置, 默认为 Docker Hub)

(14) 过滤 docker image ls 的输出内容。docker image ls --filter dangling=true  那些没有标签的镜像被称为悬虚镜像,(dangling=false)在列表中展示为<none>:<none>

 

docker容器:

(1)容器即应用。

(2)容器是镜像的运行时实例。

 

Dockerfile:

(1) Dockerfile 是一个纯文本文件,其中描述了如何将应用构建到 Docker 镜像当中.

(2) Dockerfile 的每一行都代表一个用于构建镜像的指令

(3) docker image build 根据 Dockerfile 中的指令来创建新的镜像. (一定要在包含应用代码和 Dockerfile 的目录下执行这些命令)

Dockerfile

FROM alpine
LABEL maintainer="winyh@qq.com"
RUN apk add --update nodejs nodejs-npm
COPY . /src
WORKDIR /src
RUN npm install
EXPOSE 8080
ENTRYPOINT ["node", "./app.js"]

 

Docker 相关命令

 

构建上下文是指应用文件存放的位置,可能是本地 Docker 主机上的一个目录或一个远程的 Git 库。

Dockerfile 中的 FROM 指令用于指定要构建的镜像的基础镜像。它通常是 Dockerfile 中的第一条指令。

Dockerfile 中的 RUN 指令用于在镜像中执行命令,这会创建新的镜像层。每个 RUN 指令创建一个新的镜像层。

Dockerfile 中的 COPY 指令用于将文件作为一个新的层添加到镜像中。通常使用 COPY 指令将应用代码赋值到镜像中。

Dockerfile 中的 EXPOSE 指令用于记录应用所使用的网络端口。

Dockerfile 中的 ENTRYPOINT 指令用于指定镜像以容器方式启动后默认运行的程序。

其他的 Dockerfile 指令还有 LABEL、ENV、ONBUILD、HEALTHCHECK、CMD 等。

 

地址栏中输入容器运行所在的 Docker 主机的 DNS 名称或者 IP 地址,并在后面加上端口号 8080,然后就能看到下图所示的 Web 页面。

当成功将应用代码构建到了 Docker 镜像当中,然后以容器的方式启动该镜像,这个过程叫作“应用容器化”。

 

应用容器化:

  • 编写应用代码。
  • 创建一个 Dockerfile,其中包括当前应用的描述、依赖以及该如何运行这个应用。
  • 对该 Dockerfile 执行 docker image build 命令。
  • 等待 Docker 将应用程序构建到 Docker 镜像中

 

推荐阅读