Docker入门,看懂这篇文章就够了

Docker

一、Docker是什么

  • Docker是一个容器化平台,它将应用程序及其所有依赖项以容器的形式打包在一起,以确保应用程序在任何环境(无论是开发环境、测试环境还是生产环境)中无缝运行。

  • Docker容器,将一个软件包在一个完整的文件系统中,其中包含运行所需的一切:代码、运行时、系统工具、系统库等任何可以安装在服务器上的东西。

  • 它都将始终运行相同的程序,无论软件的环境如何。

Docker 官网:https://www.docker.com

二、Docker的应用场景

  • Web 应用的自动化打包和发布。

  • 自动化测试和持续集成、发布。

  • 在服务型环境中部署和调整数据库或其他的后台应用。

  • 从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。

三、Docker 的优点

Docker 是一个用于开发,交付和运行应用程序的开放平台。Docker 使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助 Docker,您可以与管理应用程序相同的方式来管理基础架构。通过利用 Docker 的方法来快速交付,测试和部署代码,您可以大大减少编写代码和在生产环境中运行代码之间的延迟。

1、快速,一致地交付您的应用程序

Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。

容器非常适合持续集成和持续交付(CI / CD)工作流程,请考虑以下示例方案:

  • 您的开发人员在本地编写代码,并使用 Docker 容器与同事共享他们的工作。

  • 他们使用 Docker 将其应用程序推送到测试环境中,并执行自动或手动测试。

  • 当开发人员发现错误时,他们可以在开发环境中对其进行修复,然后将其重新部署到测试环境中,以进行测试和验证。

  • 测试完成后,将修补程序推送给生产环境,就像将更新的镜像推送到生产环境一样简单。

2、响应式部署和扩展

Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。

Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。

3、在同一硬件上运行更多工作负载

Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。

四、Docker 架构

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。

  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。

  • 仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

 

容器与镜像的关系类似于面向对象编程中的对象与类。

Docker 面向对象
容器 对象
镜像

Docker相关概念说明

概念 说明
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板,比如 Ubuntu 系统。
Docker 容器(Container) 容器是独立运行的一个或一组应用,是镜像运行时的实体。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker SDK (https://docs.docker.com/develop/sdk/) 与 Docker 的守护进程通信。
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。Docker Hub(https://hub.docker.com) 提供了庞大的镜像集合供使用。 一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过 <仓库名>:<标签> 的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以 latest 作为默认标签。
Docker Machine Docker Machine是一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。

五、Docker安装

Docker 支持以下的 64 位 CentOS 版本:

  • CentOS 7

  • CentOS 8

  • 更高版本...

我是在阿里云服务器上安装Docker的,centos版本是7.3.1611。以此为示例进行安装。

如果不知道自己的版本,可使用

命令

cat /etc/redhat-release

输出:

[root@izbp10ppn76gf76g4zrw1sz ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
[root@izbp10ppn76gf76g4zrw1sz ~]# 

1、卸载旧版本

卸载旧版本

较旧的 Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。

$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2、添加yum源。

yum install epel-release –y
yum clean all
yum list

3、安装并运行Docker.

yum install docker-io –y
systemctl start docker

4、检查安装结果。

docker info

如果出现以下信息则安装成功。

[root@izbp10ppn76gf76g4zrw1sz ~]# docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.13.1
Storage Driver: overlay2
 Backing Filesystem: extfs
 Supports d_type: true
 Native Overlay Diff: false
Logging Driver: journald
Cgroup Driver: systemd
Plugins: 
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: e45dd70447fb72ee4e1f6989173aa6c5dd492d87 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
 seccomp
  WARNING: You're not using the default seccomp profile
  Profile: /etc/docker/seccomp.json
Kernel Version: 3.10.0-514.26.2.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 3
CPUs: 1
Total Memory: 1.796 GiB
Name: izbp10ppn76gf76g4zrw1sz
ID: TDG2:FWM5:OW7Y:RHWH:KXJ4:V7D3:ZSTM:2PXD:TZFE:G4FZ:6RCH:7YLI
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
Live Restore Enabled: false
Registries: docker.io (secure)

Docker 镜像加速

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:

  • Docker官方提供的中国镜像库:https://registry.docker-cn.com

  • 七牛云加速器:https://reg-mirror.qiniu.com

当配置某一个加速器地址之后,若发现拉取不到镜像,请切换到另一个加速器地址。国内各大云服务商均提供了 Docker 镜像加速服务,建议根据运行 Docker 的云平台选择对应的镜像加速服务。

 

我使用的是阿里云镜像加速

配置阿里云容器镜像服务参考:https://www.cnblogs.com/LUA123/p/11401962.html

 

 

六、Docker Hello World

一、Hello World

我们学习一门技术,入门都是以一个Hello orld案例开始的。

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

输出Hello world

命令

[root@izbp10ppn76gf76g4zrw1sz ~]# docker run centos /bin/echo "Hello World"

输出

Hello World

各个参数解析:

  • docker: Docker 的二进制执行文件。

  • run: 与前面的 docker 组合来运行一个容器。

  • centos 指定要运行的镜像,Docker 首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。如果带上标签,如centos:6.8则下载centos6.8版本。否则默认下载最新版。

  • /bin/echo "Hello world": 在启动的容器里执行的命令

以上命令完整的意思可以解释为:Docker 以 centos 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

2、运行交互式的容器

我们通过 docker 的两个参数 -i -t,让 docker 运行的容器实现"对话"的能力:

[root@izbp10ppn76gf76g4zrw1sz ~]# docker run -i -t centos /bin/bash
[root@4c4e39be9736 /]# 

各个参数解析:

  • -t: 在新容器内指定一个伪终端或终端。

  • -i: 允许你对容器内的标准输入 (STDIN) 进行交互

注意第二行[root@4c4e39be9736 /]# ,此时我们已进入一个 centos 系统的容器

我们尝试在容器中运行命令 cat /proc/versionls分别查看当前系统的版本信息和当前目录下的文件列表。

[root@izbp10ppn76gf76g4zrw1sz ~]# docker run -i -t centos /bin/bash
[root@7d096ba3d5a9 /]# ls
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@7d096ba3d5a9 /]# cat /proc/version
Linux version 3.10.0-514.26.2.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Tue Jul 4 15:04:05 UTC 2017
[root@7d096ba3d5a9 /]# 

我们可以通过运行 exit 命令或者使用 CTRL+D 来退出容器。

[root@7d096ba3d5a9 /]#   exit
exit
[root@izbp10ppn76gf76g4zrw1sz ~]# 

3、启动容器(后台模式)

使用以下命令创建一个以进程方式运行的容器。

[root@izbp10ppn76gf76g4zrw1sz ~]# docker run -d centos  /bin/sh -c "while true; do echo hello world; sleep 1; done"
1fe530c60394c1575e677d998d64b374debe0c1769b23810f20c0cb6b6f52f04
[root@izbp10ppn76gf76g4zrw1sz ~]# 
​

在输出中,我们没有看到期望的 "hello world",而是一串长字符

1fe530c60394c1575e677d998d64b374debe0c1769b23810f20c0cb6b6f52f04

这个长字符串叫做容器 ID,对每个容器来说都是唯一的,我们可以通过容器 ID 来查看对应的容器发生了什么。

首先,我们需要确认容器有在运行,可以通过 docker ps 来查看:

[root@izbp10ppn76gf76g4zrw1sz ~]# docker ps
CONTAINER ID      IMAGE      COMMAND      CREATED       STATUS        PORTS               NAMES
1fe530c60394      centos    "/bin/sh -c 'while..."   About a minute ago             Up 59 seconds 

输出详情介绍:

CONTAINER ID: 容器 ID。

IMAGE: 使用的镜像。

COMMAND: 启动容器时运行的命令。

CREATED: 容器的创建时间。

STATUS: 容器状态。

状态有7种:

  • created(已创建)

  • restarting(重启中)

  • running(运行中)

  • removing(迁移中)

  • paused(暂停)

  • exited(停止)

  • dead(死亡)

PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

在宿主主机内使用 docker logs 命令,查看容器内的标准输出:

docker logs+容器ID

[root@izbp10ppn76gf76g4zrw1sz ~]# docker logs 1fe530c60394
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
hello world
​

4、停止容器

我们使用 docker stop 命令来停止容器,再用docker ps 来查看当前运行的容器。发现已经停止了。

docker stop +容器ID

[root@izbp10ppn76gf76g4zrw1sz ~]# docker stop 1fe530c60394
1fe530c60394
[root@izbp10ppn76gf76g4zrw1sz ~]# docker ps 
CONTAINER ID      IMAGE       COMMAND        CREATED      STATUS       PORTS          NAMES
[root@izbp10ppn76gf76g4zrw1sz ~]# 
​

7、Docker容器使用

Docker 客户端

docker 客户端非常简单 ,我们可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。

示例

[root@izbp10ppn76gf76g4zrw1sz ~]# docker 
​
Usage:  docker COMMAND
​
A self-sufficient runtime for containers
​
Options:
      --config string      Location of client config files (default "/root/.docker")
  -D, --debug              Enable debug mode
      --help               Print usage
  -H, --host list          Daemon socket(s) to connect to (default [])
  -l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit
​
Management Commands:
  container   Manage containers
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  volume      Manage volumes
​
Commands:
  attach      Attach to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes
​
Run 'docker COMMAND --help' for more information on a command.
​

可以通过命令 docker command --help 更深入的了解指定的 Docker 命令使用方法。

例如我们要查看 docker stats 指令的具体使用方法:

[root@izbp10ppn76gf76g4zrw1sz ~]# docker stats --help
​
Usage:  docker stats [OPTIONS] [CONTAINER...]
​
Display a live stream of container(s) resource usage statistics
​
Options:
  -a, --all             Show all containers (default shows just running)
      --format string   Pretty-print images using a Go template
      --help            Print usage
      --no-stream       Disable streaming stats and only pull the first result
[root@izbp10ppn76gf76g4zrw1sz ~]# 
​

容器使用

获取镜像

如果我们本地没有 tomcat镜像,我们可以使用 docker pull 命令来载入 tomcat镜像:

$ docker pull tomcat

启动容器

以下命令使用 tomcat镜像启动一个容器,参数为以命令行模式进入该容器:

$ docker run -it tomcat /bin/bash

参数说明:

  • -i: 交互式操作。

  • -t: 终端。

  • tomcat: tomcat镜像。

  • /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。

要退出终端,直接输入 exit:

root@ed09e4490c57:/# exit

启动已停止运行的容器

查看所有的容器命令如下:

$ docker ps -a

复制你要启动的容器ID,使用docker start 启动一个容器。

$ docker start b750bbbcfd88 

后台运行

在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。

$ docker run -itd  centos /bin/bash

示例

[root@izbp10ppn76gf76g4zrw1sz ~]# docker run -itd -p7777:8080 mytomcat /bin/bash
00eabff7b8c47c248392be794f4c57037379c9e9158d082810a2546a032b1424
[root@izbp10ppn76gf76g4zrw1sz ~]# 

注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令** docker exec**(下面会介绍到)。

停止一个容器

停止容器的命令如下:

$ docker stop <容器 ID>

停止的容器可以通过 docker restart 重启:

$ docker restart <容器 ID>

进入容器

在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:

  • docker attach

  • docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止。


下面演示了docker exec

[root@izbp10ppn76gf76g4zrw1sz ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                    NAMES
00eabff7b8c4        mytomcat            "/bin/bash"         2 minutes ago       Up 2 minutes        0.0.0.0:7777->8080/tcp   kind_pare
[root@izbp10ppn76gf76g4zrw1sz ~]# docker exec -it 00eabff7b8c4 /bin/bash
root@00eabff7b8c4:/usr/local/tomcat# 
​

注意: 如果从这个容器退出,不会导致容器的停止,这就是为什么推荐大家使用 docker exec 的原因。

更多参数说明请使用 docker exec --help 命令查看。

导出和导入容器

导出容器

如果要导出本地某个容器,可以使用 docker export 命令。

$ docker export 1e560fca3906 > centos.tar

这样将导出容器快照到本地文件。

导入容器快照

可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 cetos.tar 导入到镜像 test/centos:v1

$ cat docker/centos.tar | docker import - test/cetos:v1

删除容器

删除容器使用 docker rm 命令:

$ docker rm -f 1e560fca3906

示例

[root@izbp10ppn76gf76g4zrw1sz ~]# docker rm 00eabff7b8c4
Error response from daemon: You cannot remove a running container 00eabff7b8c47c248392be794f4c57037379c9e9158d082810a2546a032b1424. Stop the container before attempting removal or use -f
[root@izbp10ppn76gf76g4zrw1sz ~]# docker rm -f 00eabff7b8c4
00eabff7b8c4
[root@izbp10ppn76gf76g4zrw1sz ~]# 

删除所有容器

[root@izbp10ppn76gf76g4zrw1sz ~]# docker rm -f $(docker ps -aq)
1fe530c60394
214d15cc8b99
7d096ba3d5a9
4c4e39be9736
1be0187b70f0
99f402af94c7
67963ba2bad3
8d84f6813795
52538d13ba35
865bbcf89479
​

Docker 镜像使用

当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载。

下面我们来学习:

  • 1、管理和使用本地 Docker 主机镜像

  • 2、创建镜像

列出镜像列表

我们可以使用 docker images 来列出本地主机上的镜像。

[root@izbp10ppn76gf76g4zrw1sz ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mytomcat            latest              189529250247        14 hours ago        584 MB
tomcat8             8.8                 59d81839d056        14 hours ago        534 MB
docker.io/tomcat    latest              4e7840b49fad        5 days ago          529 MB
docker.io/centos    latest              470671670cac        6 weeks ago         237 MB
[root@izbp10ppn76gf76g4zrw1sz ~]# 

各个选项说明:

  • REPOSITORY:表示镜像的仓库源

  • TAG:镜像的标签

  • IMAGE ID:镜像ID

  • CREATED:镜像创建时间

  • SIZE:镜像大小

同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如 ubuntu 仓库源里,有 15.10、14.04 等多个不同的版本,我们使用 REPOSITORY:TAG 来定义不同的镜像。

所以,我们如果要使用版本为8.8的tomcat8系统镜像来运行容器时,命令如下:

[root@izbp10ppn76gf76g4zrw1sz ~]# docker run -it -p7777:8080 tomcat8:8.8
Using CATALINA_BASE:   /usr/local/tomcat
Using CATALINA_HOME:   /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME:        /usr/local/openjdk-8

如果你不指定一个镜像的版本标签,例如你只使用 tomcat,docker 将默认使用 tomcat:latest 镜像。


获取一个新的镜像

当我们在本地主机上使用一个不存在的镜像时 Docker 就会自动下载这个镜像。如果我们想预先下载这个镜像,我们可以使用 docker pull 命令来下载它。

示例:

[root@izbp10ppn76gf76g4zrw1sz ~]# docker pull ubuntu:13.10
Trying to pull repository docker.io/library/ubuntu ... 
13.10: Pulling from docker.io/library/ubuntu
a3ed95caeb02: Pull complete 

下载完成后,我们可以直接使用这个镜像来运行容器。


查找镜像

我们可以从 Docker Hub 网站来搜索镜像,Docker Hub 网址为: https://hub.docker.com/

我们也可以使用 docker search 命令来搜索镜像。比如我们需要一个 httpd 的镜像来作为我们的 web 服务。我们可以通过 docker search 命令搜索 httpd 来寻找适合我们的镜像。

示例

[root@izbp10ppn76gf76g4zrw1sz ~]# docker search tomcat
INDEX       NAME         DESCRIPTION        STARS      OFFICIAL    AUTOMATED
docker.io   docker.io/tomcat   Apache Tomcat is an open source implementa...   2653      [OK]       
docker.io   docker.io/tomee    Apache TomEE is an all-Apache Java EE cert...   75        [OK]       
docker.io   docker.io/dordoka/tomcat  Ubuntu 14.04, Oracle JDK 8 and Tomcat 8 ba...   53   [OK]   

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建

 

删除镜像

docker rmi + 镜像名/镜像ID

[root@izbp10ppn76gf76g4zrw1sz ~]# docker rmi mytomcat
Untagged: mytomcat:latest
Deleted: sha256:189529250247fc2f07fd8946abf01997345c9dbcde3660848dd5a27c160e2e08
Deleted: sha256:95f8b839419c14ac221868ef294ec76f3c1de8b094eef7a5b6fc9582ef5184d0
[root@izbp10ppn76gf76g4zrw1sz ~]# 

创建镜像

当我们从 docker 镜像仓库中下载的镜像不能满足我们的需求时,我们可以通过以下两种方式对镜像进行更改。

  • 1、从已经创建的容器中更新镜像,并且提交这个镜像

  • 2、使用 Dockerfile 指令来创建一个新的镜像

更新镜像

更新镜像之前,我们需要使用镜像来创建一个容器。

runoob@runoob:~$ docker run -t -i ubuntu:15.10 /bin/bash
root@e218edb10161:/# 

在运行的容器内使用 apt-get update 命令进行更新。

在完成操作之后,输入 exit 命令来退出这个容器。

此时 ID 为 e218edb10161 的容器,是按我们的需求更改的容器。我们可以通过命令 docker commit 来提交容器副本。

runoob@runoob:~$ docker commit -m="描述信息" -a="作者" e218edb10161 runoob/ubuntu:v2
sha256:70bf1840fd7c0d2d8ef0a42a817eb29f854c1af8f7c59fc03ac7bdee9545aff8

各个参数说明:

  • -m: 提交的描述信息

  • -a: 指定镜像作者

  • e218edb10161:容器 ID

  • runoob/ubuntu:v2: 指定要创建的目标镜像名

部分常用命令

docker images 查看docker下的所有镜像

docker images -q 查看docker下所有镜像的IMAGE ID

docker search tomcat 搜索tomcat镜像

docker search --filter=stars=100 tomcat 过滤搜索 搜索stars大于100的tomcat

docker pull 拉取下载镜像

docker info 查看docker信息

docker rmi 删除镜像

docker rm 删除容器

docker ps 查看当前正在运行的容器

docker ps -a 查看所有运行过的容器

docker ps -n 3 查看最近三个运行过的容器

docker run -it 470671670cac 运行IMAGE ID为 的容器(交互式启动)

docker run -d centos

你可能感兴趣的:(docker)