天天看點

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

一、下載下傳安裝

官方rpm包下載下傳位址:

https://download.docker.com/linux/centos/7/x86_64/stable/Packages/

二進制下載下傳位址:

https://download.docker.com/

https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/

阿裡鏡像下載下傳位址:

https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/stable/Packages/

1.1 yum 安裝

[[email protected] ~]# rm -f  /etc/yum.repos.d/*
[[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
[[email protected] ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[[email protected] ~]# yum makecache
[[email protected] ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
[[email protected] ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[[email protected] ~]# sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
[[email protected] ~]# yum -y install docker-ce
[[email protected] ~]# docker --version
Docker version 20.10.8, build 3967b7d
           

1.2 二進制安裝

下載下傳并解壓安裝包

#下載下傳二進制包
[[email protected] ~]# cd /usr/local/src/
[[email protected] src]# wget https://mirrors.aliyun.com/docker-ce/linux/static/stable/x86_64/docker-18.09.9.tgz
[[email protected] src]# tar xf docker-18.09.9.tgz
[[email protected] src]# cd docker
[[email protected] docker]# ls
containerd  containerd-shim  ctr  docker  dockerd  docker-init  docker-proxy  runc
[[email protected] docker]# cp ./* /usr/bin/
           

建立啟動檔案

需要如下三個添加檔案

/lib/systemd/system/docker.service

/lib/systemd/system/docker.socket

/lib/systemd/system/containerd.service #18.06及之前的docker版本不需要此檔案

注:不同版本docker的啟動檔案不同,建議從其他已安裝好同版本docker的伺服器拷貝對應檔案,如下使用的是18.09.9版本的啟動檔案

/lib/systemd/system/docker.service

[[email protected] docker]# vim /lib/systemd/system/docker.service
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket

[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

           

/lib/systemd/system/docker.socket

[email protected]:~# vim /lib/systemd/system/docker.socket
[Unit]
Description=Docker Socket for the API
PartOf=docker.service

[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker

[Install]
WantedBy=sockets.target
           

/lib/systemd/system/containerd.service

[email protected]:~# vim /lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target

[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd

Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=1048576
TasksMax=infinity
OOMScoreAdjust=-999

[Install]
WantedBy=multi-user.target
           

啟動驗證

[[email protected] docker]# systemctl daemon-reload
[[email protected] docker]# systemctl start docker
[[email protected] docker]# systemctl enable docker
           
docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

1.3 ubuntu安裝docker

[email protected]:~# curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
[email protected]:~# add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
[email protected]:~# apt-get -y update
[email protected]:~# apt-get -y install docker-ce

#安裝指定版本
#檢視docker-ce版本
[email protected]:~# apt-cache madison docker-ce
[email protected]:~# apt-get -y install docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic

#啟動docker
[email protected]:~# systemctl start docker
[email protected]:~# systemctl enable docker

           

驗證docker服務啟動

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

驗證docker版本

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

檢視docker0網卡

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

1.4 驗證docker 資訊

[email protected]:~# docker info
Containers: 0 #目前主機運作的容器總數 
 Running: 0 #容器正在運作的數量
 Paused: 0 #容器暫停數量
 Stopped: 0 # 容器停止數量
Images: 0 #鏡像數量
Server Version: 18.09.9 #docker服務端版本
Storage Driver: overlay2 #存儲引擎
 Backing Filesystem: extfs #主控端檔案系統
 Supports d_type: true #是否支援d_type 
 Native Overlay Diff: true #是否支援差異資料存儲 
Logging Driver: json-file #日志類型
Cgroup Driver: cgroupfs #Cgroups類型
Plugins: #插件 
 Volume: local #卷 
 Network: bridge host macvlan null overlay # overlay誇主機通信 
 Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog  #日志類型 
Swarm: inactive  #是否支援swarm 
Runtimes: runc  #已安裝的容器運作時  
Default Runtime: runc #預設使用的容器運作時 
Init Binary: docker-init  #初始化容器的守護程序,即pid為1的程序 
containerd version: e25210fe30a0a703442421b0f60afac609f950a3 #版本
runc version: N/A  # runc版本 
init version: fec3683  #init版本 
Security Options:  #安全選項 
 apparmor #安全子產品
 seccomp #審計(操作)
  Profile: default  #預設的配置檔案 
Kernel Version: 4.15.0-55-generic #主控端核心版本
Operating System: Ubuntu 18.04.3 LTS #主控端作業系統 
OSType: linux #主控端作業系統類型
Architecture: x86_64 #主控端架構 
CPUs: 4 #主控端CPU數量
Total Memory: 3.83GiB #主控端總記憶體 
Name: docker-node1 #主控端hostname 
ID: H7Z5:LPWT:G4GE:P6RH:6POO:5SCV:UZ6D:ZRVX:KSES:QIRH:S7W6:SXWB #主控端ID 
Docker Root Dir: /var/lib/docker  #主控端資料儲存目錄 
Debug Mode (client): false #client端是否開啟debug 
Debug Mode (server): false  #server端是否開啟debug 
Registry: https://index.docker.io/v1/  #鏡像倉庫 
Labels:  #其他标簽 
Experimental: false #是否測試版 
Insecure Registries: #非安全的鏡像倉庫
 127.0.0.0/8
Live Restore Enabled: false  #是否開啟活動重新開機(重新開機docker-daemon不關閉容器) 
Product License: Community Engine  #産品許可資訊 

WARNING: No swap limit support  #系統警告資訊(沒有開啟swap資源限制) 
[email protected]:~#

           

1.5 解決不支援swap限制警告

[email protected]:~# vim /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
#添加cgroup_enable=memory swapaccount=1
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0  cgroup_enable=memory swapaccount=1"
[email protected]:~# update-grub
[email protected]:~# reboot
           

1.6 docker存儲引擎

目前docker的預設存儲引擎為overlay2,不同的存儲引擎需要相應的系統支援,如xfs格式需要磁盤分區的時候傳遞d-type檔案分層功能,即需要傳遞核心參數開啟格式化磁盤的時候的指定功能。

曆史更新資訊: https://github.com/moby/moby/blob/master/CHANGELOG.md

官方文檔關于存儲引擎的選擇文檔: https://docs.docker.com/storage/storagedriver/select-storage-driver/

存儲驅動類型:

AUFS(AnotherUnionFS)是一種Union FS,是檔案級的存儲驅動。所謂 UnionFS 就是把不同實體位置的目錄合并 mount到同一個目錄中。簡單來說就是支援将不同目錄挂載到同一個虛拟檔案系統下的檔案系統。這種檔案系統可以一層一層地疊加修改檔案。無論底下有多少層都是隻讀的,隻有最上層的檔案系統是可寫的。當需要修改一個檔案時,AUFS建立該檔案的一個副本,使用CoW将檔案從隻讀層複制到可寫層進行修改,結果也儲存在可寫層。在Docker中,底下的隻讀層就是image,可寫層就是Container,是Docker 18.06及更早版本的首選存儲驅動程式,在核心3.13上運作Ubuntu 14.04時不支援overlay2。

Overlay:一種Union FS檔案系統,Linux核心3.18後支援。

overlay2: Overlay的更新版,到目前為止,所有Linux發行版推薦使用的存儲類型。

devicemapper:是CentOS和RHEL的推薦存儲驅動程式,因為之前的核心版本不支援overlay2,但是目前較新版本的CentOS和RHEL現在已經支援overlay2,是以推薦使用overlay2。

ZFS(Sun-2005)/btrfs(Oracle-2007):目前沒有廣泛使用。

vfs:用于測試環境,适用于無法使用copy-on-write檔案系統的情況。 此存儲驅動程式的性能很差,通常不建議用于生産。

Docker官方推薦首選存儲引擎為overlay2,devicemapper存在使用空間方面的一些限制,雖然可以通過後期配置解決,但是官方依然推薦使用overlay2,以下是網上查到的部分資料:

https://www.cnblogs.com/youruncloud/p/5736718.html

如果docker資料目錄是一塊單獨的磁盤分區而且是xfs格式的,那麼需要在格式化的時候加上參數-n ftype=1,否則後期在啟動容器的時候會報錯不支援d-type。

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

1.7 docker服務程序

通過檢視docker程序,了解docker的運作及工作方式

1.7.1 檢視主控端程序樹

18.06以上docker版本,程序關系

#docker版本
[email protected]:~# docker version
Client:
 Version:           18.09.9
 API version:       1.39
 Go version:        go1.11.13
 Git commit:        039a7df9ba
 Built:             Wed Sep  4 16:57:28 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.9
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.11.13
  Git commit:       039a7df
  Built:            Wed Sep  4 16:19:38 2019
  OS/Arch:          linux/amd64
  Experimental:     false
           
docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

在建立容器的時候dockerd程序通過調用containerd程序建立容器

18.06及之前的docker版本,程序關系

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

1.7.2 檢視containerd程序關系

有四個程序:

dockerd:被client直接通路,其父程序為主控端的systemd守護程序。

docker-proxy:實作容器通信,其父程序為dockerd

containerd:被dockerd程序調用以實作與runc互動。

containerd-shim:真正運作容器的載體,其父程序為containerd。

1.8 docker 鏡像加速配置

國内下載下傳國外的鏡像有時候會很慢,是以可以更改docker配置檔案添加一個加速器,可以通過加速器達到加速下載下傳鏡像的目的。

1.8.1 擷取加速位址:

登入到阿裡雲 http://cr.console.aliyun.com,點選左側的鏡像加速器,将會得到一個專屬的加速位址,而且下面有使用配置說明:

docker《二》---Docker安裝及基礎指令介紹一、下載下傳安裝二、基礎指令介紹

按照阿裡雲的說明添加配置

[email protected]:~# sudo mkdir -p /etc/docker
[email protected]:~# sudo tee /etc/docker/daemon.json <<-'EOF'
> {
>   "registry-mirrors": ["https://bn3x0oxu.mirror.aliyuncs.com"]
> }
> EOF
{
  "registry-mirrors": ["https://bn3x0oxu.mirror.aliyuncs.com"]
}
[email protected]:~# systemctl daemon-reload
[email protected]:~# systemctl restart docker

           

二、基礎指令介紹

2.1 Docker鏡像管理指令

搜尋鏡像

在官方的docker 倉庫中搜尋指定名稱的docker鏡像

#不帶版本号搜尋鏡像
[email protected]:~# docker search nginx
#帶版本号搜尋鏡像
[email protected]:~# docker search nginx:1.21-alpine
           

下載下傳鏡像

docker pull 倉庫伺服器:端口/項目名稱/鏡像名稱:tag(版本)号

注:不帶版本号會拉取latest,也就是最新版本

[email protected]:~# docker pull nginx:1.21-alpine
1.21-alpine: Pulling from library/nginx
a0d0a0d46f8b: Pull complete
4dd4efe90939: Pull complete
c1368e94e1ec: Pull complete
3e72c40d0ff4: Pull complete
969825a5ca61: Pull complete
61074acc7dd2: Pull complete
Digest: sha256:686aac2769fd6e7bab67663fd38750c135b72d993d0bb0a942ab02ef647fc9c3
Status: Downloaded newer image for nginx:1.21-alpine

           

檢視本地鏡像

[email protected]:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.21-alpine         513f9a9d8748        5 days ago          22.9MB
nginx               latest              ad4c705f24d3        5 days ago          133MB

           

鏡像導出

可以将鏡像從本地導出問為一個壓縮檔案,然後複制到其他伺服器進行導入使用。

[email protected]:~# docker save nginx:1.21-alpine > nginx.tar
[email protected]:~# ls
nginx.tar
           

鏡像導入

[email protected]:~# docker load <nginx.tar
e2eb06d8af82: Loading layer [==================================================>]  5.865MB/5.865MB
e6d3cea19fef: Loading layer [==================================================>]  18.57MB/18.57MB
20d0effdf3a2: Loading layer [==================================================>]  3.072kB/3.072kB
311d8db33235: Loading layer [==================================================>]  4.096kB/4.096kB
b4b4e85910ea: Loading layer [==================================================>]  3.584kB/3.584kB
40403bebe4fd: Loading layer [==================================================>]  7.168kB/7.168kB
Loaded image: nginx:1.21-alpine

           

删除鏡像

[email protected]:~# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               1.21-alpine         513f9a9d8748        5 days ago          22.9MB
nginx               latest              ad4c705f24d3        5 days ago          133MB
[email protected]:~# docker rmi 513f9a9d8748
[email protected]:~# docker rmi nginx:1.21-alpine
#可以使用鏡像id或者名稱加版本号
           

2.2 容器操作基礎指令

指令格式:

docker run [選項] [鏡像名] [shell指令] [參數] 
-d 背景運作容器,并傳回容器ID
-i 以互動模式運作容器,通常與 -t 同時使用
-t 為容器重新配置設定一個僞輸入終端,通常與 -i 同時使用
-v 将主控端目錄挂載到容器
-P 随機端口映射,容器内部端口随機映射到主機的端口
-p 指定端口映射,格式為:主控端端口:容器端口
--rm 容器退出後自動删除容器
--name name 為容器指定一個名稱
--dns 8.8.8.8 指定容器使用的DNS伺服器,預設和宿主一緻
--dns-search example.com: 指定容器DNS搜尋域名,預設和宿主一緻
-h name 指定容器的hostname
-e name=value 設定環境變量
--env-file file 從指定檔案讀入環境變量
--link name 連結到另一個容器
           

2.2.1 啟動容器

[email protected]:~# docker  run  -it -d -p 80:80 --name nginx nginx:1.21-alpine
b0391ede9ac256a1402561b2794ad7607961c4604f21e3f8805186e5e8328cd6
           

2.2.2 建立并進入容器

通過在啟動容器的時候執行/bin/bash或/bin/sh 直接進入到容器

[email protected]:~# docker  run  -it  -p 80:80 --name nginx nginx:1.21-alpine /bin/sh
/ # ls

           

2.2.3 進入已建立的容器

前面是在建立容器的直接進入到容器,通過docker exec -it 容器id可以進入到已建立的容器内

2.2.4 檢視容器

通過docker ps可以檢視主控端運作的容器

#檢視運作的容器 
[email protected]:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
b0391ede9ac2        nginx:1.21-alpine   "/docker-entrypoint.…"   31 seconds ago      Up 30 seconds       0.0.0.0:80->80/tcp   nginx

#檢視所有容器
[email protected]:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                NAMES
c3c2cdf73e07        nginx:1.21-alpine   "/docker-entrypoint.…"   27 seconds ago      Exited (0) 2 seconds ago                        sad_dewdney
b0391ede9ac2        nginx:1.21-alpine   "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes               0.0.0.0:80->80/tcp   nginx
           

2.2.5 檢視容器日志

[email protected]:~# docker logs --tail=10 -f nginx
2021/09/15 08:30:46 [notice] 1#1: using the "epoll" event method
2021/09/15 08:30:46 [notice] 1#1: nginx/1.21.3
2021/09/15 08:30:46 [notice] 1#1: built by gcc 10.3.1 20210424 (Alpine 10.3.1_git20210424)
2021/09/15 08:30:46 [notice] 1#1: OS: Linux 4.15.0-55-generic
2021/09/15 08:30:46 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/09/15 08:30:46 [notice] 1#1: start worker processes
2021/09/15 08:30:46 [notice] 1#1: start worker process 31
2021/09/15 08:30:46 [notice] 1#1: start worker process 32
2021/09/15 08:30:46 [notice] 1#1: start worker process 33
2021/09/15 08:30:46 [notice] 1#1: start worker process 34
           

2.2.6 傳遞運作指令

容器需要有一個前台運作的程序才能保持容器的運作,通過傳遞運作參數是一種方式,另外也可以在建構鏡像的時候指定容器啟動時運作的前台指令

2.2.7 容器停止關閉及删除

[email protected]:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
12d069e72f20        nginx:1.21-alpine   "/docker-entrypoint.…"   3 minutes ago       Up 3 minutes        0.0.0.0:80->80/tcp   nginx
[email protected]:~# docker stop 12d069e72f20
12d069e72f20
[email protected]:~# docker start 12d069e72f20
12d069e72f20
[email protected]:~# docker rm -fv 12d069e72f20
12d069e72f20

           

2.2.8 強制關閉正在運作的容器

2.2.9 批量停止容器

2.2.10 批量删除已退出容器

繼續閱讀