docker應用容器引擎

2020-08-10 17:32:49

1、簡介

Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協定開源。

Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。

容器是完全使用沙箱機制 機製,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。
在这里插入图片描述

1-1、docker優點

Docker 是一個用於開發,交付和執行應用程式的開放平臺。Docker 使您能夠將應用程式與基礎架構分開,從而可以快速交付軟體。藉助
Docker,您可以與管理應用程式相同的方式來管理基礎架構。通過利用 Docker
的方法來快速交付,測試和部署程式碼,您可以大大減少編寫程式碼和在生產環境中執行程式碼之間的延遲。

響應式部署和擴充套件

Docker 是基於容器的平臺,允許高度可移植的工作負載。Docker 容器可以在開發人員的本機上,數據中心的物理或虛擬機器上,雲服務上或混合環境中執行。
Docker 的可移植性和輕量級的特性,還可以使您輕鬆地完成動態管理的工作負擔,並根據業務需求指示,實時擴充套件或拆除應用程式和服務。

在同一硬體上執行更多工作負載

Docker輕巧快速。它爲基於虛擬機器管理程式的虛擬機器提供了可行、經濟、高效的替代方案,因此您可以利用更多的計算能力來實現業務目標。Docker
非常適合於高密度環境以及中小型部署,而您可以用更少的資源做更多的事情。

2、安裝、部署docker

2-1、安裝環境

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

  • CentOS 7
  • CentOS 8
  • 更高版本…

2-2、安裝步驟

2-2-1、使用官方指令碼進行安裝

安裝命令如下:

[root@localhost ~]# curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用國內 daocloud 一鍵安裝命令:

[root@localhost ~]# curl -sSL https://get.daocloud.io/docker | sh

2-2-2、手動安裝docker

2-2-2-1、解除安裝舊版本

較舊的 Docker 版本稱爲 docker 或 docker-engine 。如果已安裝這些程式,請解除安裝它們以及相關的依賴項。

[root@localhost ~]# yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

2-2-2-2、安裝 Docker Engine-Community

使用 Docker 倉庫進行安裝
在新主機上首次安裝 Docker Engine-Community 之前,需要設定 Docker 倉庫。之後,您可以從倉庫安裝和更新 Docker。
設定倉庫

[root@localhost ~]# yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

使用以下命令來替換國內yum源。
阿裡雲

[root@localhost ~]# yum-config-manager \
    --add-repo \
    http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

清華大學源

[root@localhost ~]# yum-config-manager \
    --add-repo \
    https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

安裝 Docker Engine-Community

 [root@localhost ~]# yum install docker-ce docker-ce-cli containerd.io

2-3、啓動docker

[root@localhost ~]# systemctl start docker

2-4、通過執行 hello-world 映像來驗證是否正確安裝了 Docker Engine-Community 。

執行時提示IPv4轉發已禁用、但安裝工作正常。

[root@localhost ~]# docker run hello-world
WARNING: IPv4 forwarding is disabled. Networking will not work.

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

解決方式:
第一步:在宿主機上執行echo 「net.ipv4.ip_forward=1」 >>/usr/lib/sysctl.d/00-system.conf
第二步:重新啓動network和docker服務
第三步:驗證是否成功

[root@localhost ~]# echo "net.ipv4.ip_forward=1" >>/usr/lib/sysctl.d/00-system.conf
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# systemctl restart network
[root@localhost ~]# docker run hello-world

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

問題解決 docker安裝完成

3、docker簡單應用

3-1、列印 Hello World

Docker 允許你在容器內執行應用程式, 使用 docker run 命令來在容器內執行一個應用程式。
輸出Hello world

[root@localhost ~]# docker run ubuntu /bin/echo "Hello World"
Hello World

各個參數解析:docker run ubuntu /bin/echo 「Hello World」

1、docker: Docker 的二進制執行檔案。
2、run: 與前面的 docker 組合來執行一個容器。
3、ubuntu 指定要執行的映象,Docker 首先從本地主機上查詢映象是否存在,如果不存在,Docker 就會從映象倉庫 Docker Hub 下載公共映象。
4、/bin/echo "Hello world": 在啓動的容器裡執行的命令

3-2、執行互動式的容器

我們通過 docker 的兩個參數 -i -t,讓 docker 執行的容器實現"對話"的能力:

[root@localhost ~]# docker run -i -t ubuntu /bin/bash
root@8f71d04e551e:/# 

各個參數解析:docker run -i -t

1、-t: 在新容器內指定一個僞終端或終端。
2、-i: 允許你對容器內的標準輸入 (STDIN) 進行互動。

注意第二行 root@8f71d04e551e:/#,此時我們已進入一個 ubuntu系統的容器
檢視當前系統的版本資訊和當前目錄下的檔案列表

root@8f71d04e551e:/# ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

可以通過執行 exit 命令或者使用 CTRL+D 來退出容器。

root@8f71d04e551e:/# exit
exit
[root@localhost ~]# 

3-3、啓動容器(後臺模式)

使用以下命令建立一個以進程方式執行的容器

[root@localhost ~]# docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

這個長字串叫做容器 ID,對每個容器來說都是唯一的,我們可以通過容器 ID 來檢視對應的容器發生了什麼。

首先,我們需要確認容器有在執行,可以通過 docker ps 來檢視:

[root@localhost ~]#  docker ps
CONTAINER ID        IMAGE                  COMMAND              ...  
5917eac21c36        ubuntu:15.10           "/bin/sh -c 'while t…"    ...

輸出詳情介紹:

CONTAINER ID: 容器 ID。

IMAGE: 使用的映象。

COMMAND: 啓動容器時執行的命令。

CREATED: 容器的建立時間。

STATUS: 容器狀態。

狀態有7種:
1、created(已建立)
2、restarting(重新啓動中)
3、running(執行中)
4、removing(遷移中)
5、paused(暫停)
6、exited(停止)
7、dead(死亡)

3-4、停止容器

使用 docker stop 命令來停止容器:

[root@localhost ~]#  docker stop 5917eac21c36

再次檢視docker後臺執行狀態

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

容器已經停止