1. 程式人生 > 實用技巧 >2. Docker基礎用法

2. Docker基礎用法

Docker 架構

docker 是C/S架構的軟體,無論是client端還是Server端都是由 docker 一個程式提供,這個程式有很多子程式。

docker daemon 就是其中一個子程式,當執行 docker daemon 時,主機就執行成一個守護程序伺服器,它可以監聽在某個套接字上,為了安全,預設只提供 Unix sock 檔案的套接字。

docker 支援三種類型套接字:

  1. ipv4套接字
  2. ipv6套接字
  3. Unix sock套接字

DOCKER_HOSTS 是真正執行容器的主機,Container : 容器,Images: 映象

Clicent -> DOCKER_HOST 使用 https協議

DOCKER_HOST -> Registry 使用https協議

docker 有企業版和社群版之分:

  • docker-ce 社群版
  • docker-ee 企業版

倉庫

一個 docker registry 上有三種功能:

  1. 提供映象儲存的倉庫
  2. 提供使用者來獲取映象的時的認證
  3. 所有映象索引搜尋

一般來說,一個應用程式作為一個倉庫。而通過 映象名:標籤 的形式來描述一個具體的映象檔案。

如果在獲取映象時,只給出了映象名而沒有提供標籤,則獲取最新的映象檔案(latest 會指向倉庫中最新的版本),一個映象有多個標籤。docker 映象是隻讀檔案,不允許任何修改。

倉庫就是用來存放映象的, 映象和容器的關係,容器是基於映象建立的,就像程序和程式的關係。
映象是靜態的不會執行。容器是有生命週期的,類似與程序。

任何一個 resfull風格的API都是可以進行增刪改查的,docker也不例外

images、containers、networks、volumes、plugins 都是可以進行增刪改查的。

安裝和使用docker

安裝docker要求:

  • 64 bits CPU
  • Linux Kernel 3.10+
  • Linux Kernel cgroups and namespaces

為了更好的支援docker 推薦使用 Centos7

安裝docker-ce

#wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#yum install docker-ce -y
#rpm -ql docker-ce
/usr/bin/docker-init
/usr/bin/docker-proxy
/usr/bin/dockerd
/usr/lib/systemd/system/docker.service
/usr/lib/systemd/system/docker.socket

=== docker 加速 ===
#mkdir /etc/docker
#vim /etc/docker/daemon.json
{
    "registry-mirrors": [
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com"
    ]
}
#systemctl start docker
可通過 docker info  檢視是否生效

檢視docker版本

#docker version
Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:03:45 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:02:21 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

檢視docker詳細資訊

#docker info

常用操作命令

常見示例:

=== 下載映象到本地 ===
#docker pull nginx:alpine

=== 檢視映象 ===
#docker images

=== 檢視docker關於容器的操作 ===
#docker container --help

=== 檢視docker網路 ===
#docker network ls

=== 啟動一個最基本的容器 ===
#docker run --name b1 -it busybox:latest

=== 檢視容器b1的詳細資訊 ===
#docker inspect b1

=== 啟動停止的容器 ===
#docker start -ai b1

=== 啟動容器並執行在後臺 ===
#docker run --name web1 -d nginx:alpine

=== 繞過容器邊界進入容器 ===
#docker exec -it kvstor1 /bin/sh

=== 檢視容器日誌 ===
#docker logs web1

docker 容器狀態轉換各常用命令

docker0 是 nat 橋接模式。

一個容器只是為了執行一個程式,在容器中的程式不能跑在後臺,否則一啟動容器就終止。

因為docker容器僅在它的程序(PID為1)執行時,會保持執行。如果1號程序退出了, docker容器也就退出了。