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 鏡像加速服務,建議根據運行 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章