2.Docker基本操作

本章所講內容

  • Docker安裝
  • Docker基礎命令
  • Docker命令彙總
  • Docker鏡像管理
  • Docker容器管理
  • Docker文件日誌
  • Docker鏡像製作及發佈

2.Docker基本操作

實驗環境

[root@docker-node1 ~]# cat /etc/redhat-release 
CentOS Linux release 7.5.1804 (Core) 
[root@docker-node1 ~]# uname -r
3.10.0-862.el7.x86_64           #爲了更好的支持docker組件,至少使用3.10以上版本的kernel
[root@docker-node1 ~]# hostname
docker-node1.cn
Linux Kernel Cgroups and Namespaces         #Linux內核和資源控制和資源隔離
[root@docker-node1 ~]# ip a | grep 192.168.
inet 192.168.56.5/24 brd 192.168.56.255 scope global noprefixroute dynamic eth0

Docker 安裝

1.下載Docker yum源文件repo
[root@docker-node1 ~]# cd /etc/yum.repos.d/                 #該文件由清華大學開源鏡像站提供
[root@docker-node1 yum.repos.d]# wget https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo

2.替換repo文件內的下載路徑,原路徑爲Docker官方的下載路徑,須修改爲清華大學yum源的下載路徑
[root@docker-node1 yum.repos.d]# vim docker-ce.repo
把https://download.docker.com/全部替換爲https://mirrors.tuna.tsinghua.edu.cn/docker-ce/
vim裏面進入輸入模式:%s@https://download.docker.com/@https://mirrors.tuna.tsinghua.edu.cn/docker-ce/@

3.安裝Docker-ce(社區版本)
[root@docker-node1 /]# yum install docker-ce -y

4.修改pull images時的加速文件
Docker官方給了一個名叫 Docker cn,但因是國外的,網絡連接非常慢,再此寫爲了國內的加速,例如:阿里雲、網易、中國科技大學等
[root@docker-node1 /]# mkdir /etc/docker                   #/etc/docker在docker未啓動的時候是不存在的
[root@docker-node1 /]# vim /etc/docker/daemon.json         #創建該json加速文件,再此使用的是163的加速代理
{
 "registry-mirrors": ["http://hub-mirror.c.163.com"]        
}

Docker 基礎命令

[root@docker-node1 /]# systemctl start docker
[root@docker-node1 /]# systemctl enable docker
[root@docker-node1 /]# docker version                       #查看Docker版本信息
Client:                                                     #Docker Client版本信息
 Version:           18.06.1-ce                              #Docker版本爲18.06.1-ce爲社區版
 API version:       1.38                                    #API遠程管理版本爲1.38
 Go version:        go1.10.3                                #Go版本爲1.10.3
 Git commit:        e68fc7a
 Built:             Tue Aug 21 17:23:03 2018                #該版本發佈時間
 OS/Arch:           linux/amd64                             #系統信息
 Experimental:      false

Server:                                                     #Docker Server版本信息
 Engine:
  Version:          18.06.1-ce
  API version:      1.38 (minimum version 1.12)
  Go version:       go1.10.3
  Git commit:       e68fc7a
  Built:            Tue Aug 21 17:25:29 2018
  OS/Arch:          linux/amd64
  Experimental:     false
[root@docker-node1 /]# 
[root@docker-node1 /]# docker info              #查看docker系統的詳細信息
Containers: 0                                   #容器數量
 Running: 0                                     #正在運行的容器數
 Paused: 0                                      
 Stopped: 0                                     #停止的容器數量
Images: 0                                       #鏡像數量
Server Version: 18.06.1-ce                      #Docker Server版本信息
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
Logging Driver: json-file
Cgroup Driver: cgroupfs                         #Cgroups控制硬件資源系統
Plugins:                                        #插件
 Volume: local                                  #存儲卷插件
 Network: bridge host macvlan null overlay      #網絡插件
 Log: awslogs fluentd gcplogs gelf journald json-file logentries splunk syslog      #日誌插件
Swarm: inactive                                 #Docker Swarm管理工具狀態
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 468a545b9edcd5932818eb9de8e72413e616e86e        #
runc version: 69663f0bd4b60df09991c08812a60108003fa340
init version: fec3683
Security Options:
 seccomp
  Profile: default
Kernel Version: 3.10.0-862.el7.x86_64           #系統內核版本
Operating System: CentOS Linux 7 (Core)         #系統版本
OSType: linux                                   #系統類型
Architecture: x86_64                            #系統結構
CPUs: 1                                         #CPU數量
Total Memory: 974.6MiB                          #內存大小
Name: docker-node1.cn                           #主機名稱
ID: C5EI:6LOP:PZZB:H3OU:5JRP:QWXK:3XD6:ZOLZ:KYP3:45TH:H64X:3O5T
Docker Root Dir: /var/lib/docker                #Docker根目錄
Debug Mode (client): false                      #Docker Clinet的Debug模版狀態
Debug Mode (server): false                      #Docker Server的Debug模版狀態
Registry: https://index.docker.io/v1/           #Docker倉庫API地址
Labels:                                         #最新版本
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:                               #Docker倉庫鏡像加速地址
 http://hub-mirror.c.163.com/
Live Restore Enabled: false
[root@docker-node1 /]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
   Active: active (running) since 日 2018-10-14 14:53:17 CST; 14min ago
     Docs: https://docs.docker.com
 Main PID: 2916 (dockerd)
   CGroup: /system.slice/docker.service
           ├─2916 /usr/bin/dockerd
           └─2922 docker-containerd --config /var/run/docker/containerd/containerd.toml

10月 14 14:53:16 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:16.692061642+08:00" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc42017f090, CONNECTI...module=grpc
10月 14 14:53:16 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:16.692341578+08:00" level=info msg="pickfirstBalancer: HandleSubConnStateChange: 0xc42017f090, READY" module=grpc
10月 14 14:53:16 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:16.692355058+08:00" level=info msg="Loading containers: start."
10月 14 14:53:17 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:17.082057088+08:00" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.0/...IP address"
10月 14 14:53:17 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:17.260922450+08:00" level=info msg="Loading containers: done."
10月 14 14:53:17 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:17.282076401+08:00" level=info msg="Docker daemon" commit=e68fc7a graphdriver(s)=overlay2 version=18.06.1-ce
10月 14 14:53:17 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:17.282160723+08:00" level=info msg="Daemon has completed initialization"
10月 14 14:53:17 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:17.283470090+08:00" level=warning msg="Could not register builder git source: failed to find git binary...d in $PATH"
10月 14 14:53:17 docker-node1.cn dockerd[2916]: time="2018-10-14T14:53:17.288453326+08:00" level=info msg="API listen on /var/run/docker.sock"
10月 14 14:53:17 docker-node1.cn systemd[1]: Started Docker Application Container Engine.
Hint: Some lines were ellipsized, use -l to show in full.

[root@docker-node1 /]# ps -ef|grep docker
root       2916      1  0 14:53 ?        00:00:00 /usr/bin/dockerd
root       2922   2916  0 14:53 ?        00:00:03 docker-containerd --config /var/run/docker/containerd/containerd.toml
root       3097   2784  0 15:07 pts/0    00:00:00 grep --color=auto docker

[root@docker-node1 /]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:23:99:3d brd ff:ff:ff:ff:ff:ff
    inet 192.168.56.5/24 brd 192.168.56.255 scope global noprefixroute dynamic eth0
       valid_lft 1745sec preferred_lft 1745sec
    inet6 fd15:4ba5:5a2b:1008:f851:f8bb:7c36:f1d2/64 scope global noprefixroute dynamic 
       valid_lft 86371sec preferred_lft 14371sec
    inet6 fe80::e086:4982:4713:11c1/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:b0:20:51:2b brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0              #Docker啓動會自動創建一個網卡與物理地址是聯通的,該網卡被稱爲 nat橋,使用的是bridge網絡模式
   valid_lft forever preferred_lft forever
[root@docker-node1 /]# du -sh /var/lib/docker/*             #Docker的鏡像及一些數據都在此目錄下
16K /var/lib/docker/builder
56K /var/lib/docker/buildkit
24K /var/lib/docker/containerd
0   /var/lib/docker/containers
4.0K /var/lib/docker/image
32K /var/lib/docker/network
0   /var/lib/docker/overlay2
0   /var/lib/docker/plugins
0   /var/lib/docker/runtimes
0   /var/lib/docker/swarm
0   /var/lib/docker/tmp
0   /var/lib/docker/trust
24K /var/lib/docker/volumes

Docker 命令彙總

Docker版本信息

docker info                         #查看Docker詳細信息
docker version                      #查看Docker版本信息

Docker本地鏡像管理命令

docker images                       #查看本地鏡像
docker save -o nginx.tar nginx      #把nginx鏡像導出爲nginx.tar,導出的鏡像必須以 .tar結尾
docker load --input nginx.tar | docker load < nginx.tar | docker import nginx.tar nginx  #導入鏡像的三種方法
docker rmi nginx                    #刪除本地鏡像,有時候可能會報錯是因爲該鏡像被容器使用,所以要刪除關聯的容器
docker history nginx                #查看Nginx鏡像的創建歷史
docker tag nginx nginx:v3           #給nginx鏡像加上標籤,以便分類

Docker鏡像倉庫

docker search <COMMAND>             #搜索鏡像
docker pull <COMMAND>               #下載鏡像
docker login -u user -p passwd      #登錄到鏡像倉庫地址,如果未指定,默認登錄到 Docker Hub
docker logout                       #登出該倉庫
docker push <自己鏡像倉庫名> nginx    #上傳本地鏡像nginx到鏡像倉庫中

Docker容器操作命令

docker ps [OPTIONS]                 #不加選項只顯示正在運行的容器
OPTIONS說明:
-a:顯示所有容器,包括未運行的
-f:根據條件過濾顯示內容
-l:顯示最近創建的容器
-n:列出最近創建的N個容器
-q:靜默模式,只顯示容器編號
-s:顯示總的文件大小
docker inspect [OPTIONS] nginx      #獲取容器|鏡像的元數據
OPTION說明:
-f:指定返回值的模版文件
-s:顯示總文件的大小
--type:爲指定類型返回JSON
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' centos       #獲取正在運行容器centos的IP地址
docker top centos                   #查看容器centos的進程信息
docker logs [OPTIONS] [容器名|容器ID]
[OPTIONS]說明:
-f:跟蹤日誌輸出
-t:顯示時間戳
--since:顯示某個開始時間的所有日誌
--tail:僅列出最新N條容器日誌
docker logs -f centos               #跟蹤容器centos的日誌輸出
docker wait centos                  #阻塞容器運行直到容器停止,然後打印出它的退出代碼!
docker export -o centos-`date +%Y-%m-%d`.tar centos         #導出centos鏡像
docker port [OPTIONS] [容器名]       #列出指定容器的端口映射
docker port nginx                   #查看容器nginx的端口影響情況

Docker生命週期管理命令

docker run [OPTIONS] IMAGE [容器名稱]
OPTIONS說明:
-a stdin:指定標準輸入輸出內容類型,可選STDIN|STDOUT|STDERR三項
-d:後臺運行容器,並返回容器ID
-P:將容器內的某端口映射到宿主機的任意端口
-p:將容器內的某端口指定映射到宿主機的某端口
-v:將宿主機的某目錄指定映射到容器的某目錄
-i:以交互式運行容器,通常與-t同時使用
-t:爲該容器分配一個僞終端,通常與-i同時使用
--name nginx:爲容器指定一個名稱爲nginx
--dns 8.8.8.8:指定容器使用的DNS服務器,默認不指定和宿主機一致
--dns-search example.com:指定容器DNS搜索域名,默認和宿主機一致
-h "localhost":指定容器的hostname
-e username=“ritchie”:設置環境變量
--env-file[]:從指令讀入環境變量
--cpuset="0-2" or --cpuset="0,1,2":綁定容器到指定CPU運行
-m:設置容器使用的內存最大值
--net="bridge":指定容器的網絡連接類型,支持bridge/host/none/container,四種類型
--link=[]:添加鏈接到另一容器
--expose=[]:開放一個端口或一組端口
[root@docker-node1 /]# docker run --name mycentos -d centos:latest                  #後臺啓動容器並起名爲mycentos
[root@docker-node1 /]# docker run -P -d centos:latest                               #使用鏡像centos啓動容器並將該容器的80端口隨機映射到宿主機的任意端口
[root@docker-node1 /]# docker run -p 80:80 -v /data:/data -d centos:latest          #使用鏡像centos啓動容器並將容器的80端口映射到宿主機的80端口,主機目錄的/data映射到容器的/data
[root@docker-node1 /]# docker run -p 127.0.0.1:80:8080/tcp centos bash              #使用鏡像centos啓動容器並將容器的8080端口綁定到本地主機的80端口
[root@docker-node1 /]# docker run -it centos:latest /bin/bash                       #使用鏡像centos以交互式啓動容器

Docker啓動|關閉|重啓命令

docker start centos
docker stop centos
docker restart centos

Docker kill命令

docker kill [OPTIONS] [容器]
OPTIONS說明:
-s:向容器發送一個信號
docker kill -s  KILL d96a8184c192 

Docker rm 命令

docker rm [OPTIONS] [容器]
OPTIONS說明:
-f:通過SLGKILL信號強制刪除一個運行中的容器
-l:移除容器間的網絡連接,而非容器本身
-v:刪除與容器無關的卷
docker rm -f centos

Docker pause/unpause命令

docker pause centos     #暫停centos容器中的所有進程
docker unpause centos   #恢復centos容器中的所有進程

Docker create 命令

docker create --name mycentos centos:latest     #創建一個新的容器但不啓動它

Docker exec 命令

docker exec [OPTIONS] [容器] [命令]
OPTIONS說明:
-d:分離模式,在後臺運行
-i:即使沒有附加也保持STDIN打開
-t:分配一個僞終端
docker exec -it mycentos /bin/sh /root/xuwl.sh          #在容器mycentos交互模式中運行容器中/root/xuwl.sh腳本
docker exec -it mycentos /bin/bash                      #在容器的mycentos中開啓一個交互模式的僞終端

Docker 鏡像管理

搜索鏡像

語法:docker search [image]

    docker search centos     

2.Docker基本操作

下載鏡像

語法:docker pull [image_NAME]

    [root@code-01 ~]# docker pull centos
    Using default tag: latest
    Trying to pull repository docker.io/library/centos ...
    latest: Pulling from docker.io/library/centos
    7dc0dca2b151: Pull complete
    Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
    Status: Downloaded newer image for docker.io/centos:latest

    [root@code-01 ~]# docker pull nginx
    Using default tag: latest
    Trying to pull repository docker.io/library/nginx ...
    latest: Pulling from docker.io/library/nginx
    be8881be8156: Pull complete
    32d9726baeef: Pull complete
    87e5e6f71297: Pull complete
    Digest: sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
    Status: Downloaded newer image for docker.io/nginx:latest

    [root@code-01 ~]# docker images             #列出本地所有鏡像
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/nginx     latest              c82521676580        3 days ago          109 MB
    docker.io/centos    latest              49f7960eb7e4        7 weeks ago         200 MB

鏡像導出

語法:docker save -o [image].tar [image]

-o:指定導出名稱,必須以 .tar結尾

image:指定需導出的鏡像名稱

    [root@code-01 ~]# docker save -o centos.tar centos
    [root@code-01 ~]# ls
    anaconda-ks.cfg  centos.tar

刪除本地鏡像

語法:docker rmi [REPOSITORY|IMAGE ID]

    [root@code-01 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/nginx     latest              c82521676580        3 days ago          109 MB
    docker.io/centos    latest              49f7960eb7e4        7 weeks ago         200 MB
    [root@code-01 ~]# docker rmi 49f7960eb7e4
    Untagged: docker.io/centos:latest
    Deleted: sha256:49f7960eb7e4cb46f1a02c1f8174c6fac07ebf1eb6d8deffbcb5c695f1c9edd5
    Deleted: sha256:bcc97fbfc9e1a709f0eb78c1da59caeb65f43dc32cd5deeb12b8c1784e5b8237
    [root@code-01 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker.io/nginx     latest              c82521676580        3 days ago          109 MB
    [root@code-01 ~]# docker rmi nginx
    Untagged: nginx:latest
    Untagged: docker.io/nginx@sha256:d85914d547a6c92faa39ce7058bd7529baacab7e0cd4255442b04577c4d1f424
    Deleted: sha256:c82521676580c4850bb8f0d72e47390a50d60c8ffe44d623ce57be521bca9869
    Deleted: sha256:2c1f65d17acf8759019a5eb86cc20fb8f8a7e84d2b541b795c1579c4f202a458
    Deleted: sha256:8f222b457ca67d7e68c3a8101d6509ab89d1aad6d399bf5b3c93494bbf876407
    Deleted: sha256:cdb3f9544e4c61d45da1ea44f7d92386639a052c620d1550376f22f5b46981af
    [root@code-01 ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

鏡像導入

1.語法:docker load --input [image].tar

2.語法:docker load < [image].tar

    [root@code-01 ~]# docker load --input centos.tar
    bcc97fbfc9e1: Loading layer [==================================================>] 208.2 MB/208.2 MB
    Loaded image: docker.io/centos:latest
    [root@code-01 ~]# docker load < nginx.tar
    cdb3f9544e4c: Loading layer [==================================================>] 58.44 MB/58.44 MB
    a8c4aeeaa045: Loading layer [==================================================>] 54.24 MB/54.24 MB
    08d25fa0442e: Loading layer [==================================================>] 3.584 kB/3.584 kB
    Loaded image: docker.io/nginx:latest

Docker 容器管理

創建容器

語法:docker run --name [CONTAINER NAME] -t -i -d [image]

    [root@code-01 ~]# docker run --name dockerc -t -i -d centos /bin/bash
    e968c0137775150c72299b8b6370a83db1cb0b4e62533f2f2447205c6a1c810d
    [root@code-01 ~]# docker run --name dockerd -t -i -d centos /bin/bash
    11f3e96045013c5e9e96a1e7b58772275b2446cc18c9c52207e96a5b1f7ada15
    [root@code-01 ~]# docker run --name nginx -t -i -d nginx /bin/bash
    398defba777bba256f856f50de7e2e64a6eda915180c062bc51130b4a36f2372
    [root@code-01 ~]# docker ps -a                                  #查看所有容器(包含沉睡/退出狀態的容器)
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    398defba777b        nginx               "/bin/bash"         3 seconds ago        Up 3 seconds        80/tcp              nginx
    11f3e9604501        centos              "/bin/bash"         18 seconds ago       Up 17 seconds                           dockerd
    e968c0137775        centos              "/bin/bash"         About a minute ago   Up About a minute                       dockerc

啓動關閉容器

    [root@code-01 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
    398defba777b        nginx               "/bin/bash"         3 seconds ago        Up 3 seconds        80/tcp              nginx
    11f3e9604501        centos              "/bin/bash"         18 seconds ago       Up 17 seconds                           dockerd
    e968c0137775        centos              "/bin/bash"         About a minute ago   Up About a minute                       dockerc
    [root@code-01 ~]# docker restart dockerc
    dockerc
    [root@code-01 ~]# docker stop dockerd
    dockerd
    [root@code-01 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
    398defba777b        nginx               "/bin/bash"         10 minutes ago      Up 10 minutes                80/tcp              nginx
    11f3e9604501        centos              "/bin/bash"         10 minutes ago      Exited (137) 2 seconds ago                       dockerd
    e968c0137775        centos              "/bin/bash"         11 minutes ago      Up 22 seconds                                    dockerc
    [root@code-01 ~]# docker start dockerd
    dockerd
    [root@code-01 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    398defba777b        nginx               "/bin/bash"         10 minutes ago      Up 10 minutes       80/tcp              nginx
    11f3e9604501        centos              "/bin/bash"         11 minutes ago      Up 4 seconds                            dockerd
    e968c0137775        centos              "/bin/bash"         11 minutes ago      Up 41 seconds                           dockerc

殺死容器

語法:docker kill [ NAMES | CONTAINER ID ]

    [root@code-01 ~]# docker kill nginx
    nginx
    [root@code-01 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
    398defba777b        nginx               "/bin/bash"         14 minutes ago      Exited (137) 2 seconds ago                       nginx
    11f3e9604501        centos              "/bin/bash"         14 minutes ago      Up 3 minutes                                     dockerd
    e968c0137775        centos              "/bin/bash"         15 minutes ago      Up 4 minutes                                     dockerc
    [root@code-01 ~]# docker kill 11f3e9604501
    11f3e9604501
    [root@code-01 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
    398defba777b        nginx               "/bin/bash"         14 minutes ago      Exited (137) 16 seconds ago                       nginx
    11f3e9604501        centos              "/bin/bash"         14 minutes ago      Exited (137) 3 seconds ago                        dockerd
    e968c0137775        centos              "/bin/bash"         15 minutes ago      Up 4 minutes                                      dockerc

刪除容器

語法:docker rm [ NAMES | CONTAINER ID ]

語法:docker rm -f [ NAMES | CONTAINER ID ]

    [root@code-01 ~]# docker rm nginx               # rm可以刪除未在運行的容器
    nginx
    [root@code-01 ~]# docker rm dockerc             # 使用rm刪除正在運行的容器時,報錯如下
    Error response from daemon: You cannot remove a running container e968c0137775150c72299b8b6370a83db1cb0b4e62533f2f2447205c6a1c810d. Stop the container before attempting removal or use -f
    [root@code-01 ~]# docker rm -f dockerc          #使用 rm -f來強制刪除此容器
    dockerc
    [root@code-01 ~]# docker ps -a                  #查看所有容器只剩下了一個
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         19 minutes ago      Exited (137) 4 minutes ago                       dockerd

進入容器

三種方式如下:

語法:docker attach [image]

語法:docker exec -it [ NAMES | CONTAINER ID ] /bin/bash

語法:nsenter工具

注:以上三種方式 nsenter工具用的最爲廣泛,attach生產中的大忌

    [root@code-01 ~]# docker ps -a                      #查看容器dockerd,結果並未在運行
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                        PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         44 minutes ago      Exited (137) 29 minutes ago                       dockerd
    [root@code-01 ~]# docker start dockerd              #開啓容器dockerd
    dockerd
    [root@code-01 ~]# docker ps -a                      #已開啓
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         44 minutes ago      Up 13 seconds                           dockerd
    [root@code-01 ~]# docker attach dockerd             #使用attach命令進入此容器
    [root@11f3e9604501 /]# ps aux                       #已登錄到該容器,並查看該容器進程
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.1  0.1  11820  1876 ?        Ss   11:16   0:00 /bin/bash
    root         13  0.0  0.1  51708  1712 ?        R+   11:16   0:00 ps aux
    [root@11f3e9604501 /]# exit                         #退出dockerd容器
    exit
    [root@code-01 ~]# docker ps -a                      #dockerd容器跟隨着attach命令的退出而停止運行
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         44 minutes ago      Exited (0) 1 second ago                       dockerd
    [root@code-01 ~]# docker ps -a
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                    PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         44 minutes ago      Exited (0) 1 second ago                       dockerd
    [root@code-01 ~]# docker exec -it dockerd /bin/bash         #進入該容器因爲未啓動而報一下錯誤
    Error response from daemon: Container 11f3e96045013c5e9e96a1e7b58772275b2446cc18c9c52207e96a5b1f7ada15 is not running
    [root@code-01 ~]# docker start dockerd
    dockerd
    [root@code-01 ~]# docker exec -it dockerd /bin/bash         #進入該容器
    [root@11f3e9604501 /]# ps -aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.1  0.1  11820  1676 ?        Ss+  11:22   0:00 /bin/bash
    root         13  0.2  0.1  11820  1896 ?        Ss   11:22   0:00 /bin/bash
    root         25  0.0  0.1  51708  1712 ?        R+   11:22   0:00 ps -aux
    [root@11f3e9604501 /]# exit             
    exit
    [root@code-01 ~]# docker ps -a                              #dockerd容器並沒有因爲終端退出而關閉自身
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         50 minutes ago      Up 16 seconds                           dockerd
    [root@code-01 ~]# docker exec dockerd ps -aux               #還可以在容器外操作命令來查看容器內
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1  11820  1676 ?        Ss+  11:22   0:00 /bin/bash
    root         30  0.0  0.1  51708  1708 ?        Rs   11:25   0:00 ps -aux
    [root@code-01 ~]# yum install util-linux -y             #nsenter工具是依賴在util-linux軟件包內
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
     * epel: mirrors.ustc.edu.cn
    Package util-linux-2.23.2-52.el7.x86_64 already installed and latest version
    Nothing to do
    [root@code-01 ~]# docker inspect -f "{{ .State.Pid}}" dockerd   #dockerd是容器名字,每一個容器都有.State.Pid
    14835
    [root@code-01 ~]# nsenter -t 14835 -m -u -i -n -p
    解釋nsenter指令中進程id之後的參數的含義:
    * –t:target參數是指定進程ID 
    * –m:mount參數是進去到mount namespace中 
    * –u:uts參數是進入到uts namespace中 
    * –i:ipc參數是進入到System V IPC namaspace中 
    * –n:net參數是進入到network namespace中 
    * –p:pid參數是進入到pid namespace中 
    * –u:user參數是進入到user namespace中
    [root@11f3e9604501 /]# ps aux           # -bash是nsenter所產生的進程,就算是我退出容器,因爲 -bash還在運行,容器也不會自行退出
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.0  0.1  11820  1676 ?        Ss+  11:22   0:00 /bin/bash
    root         34  0.2  0.1  15252  1980 ?        S    11:28   0:00 -bash
    root         47  0.0  0.1  55140  1856 ?        R+   11:28   0:00 ps aux
    [root@11f3e9604501 /]# exit
    logout
    [root@code-01 ~]# docker ps -a          #容器運行正常
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    11f3e9604501        centos              "/bin/bash"         56 minutes ago      Up 6 minutes                            dockerd

    編寫進入容器腳本
    [root@code-01 ~]# cat docker.sh
    #!/bin/bash
    # Use nsenter to access docker
    docker_in(){
      NAME_ID=$1
      PID=$(docker inspect -f "{{ .State.Pid }}" $NAME_ID)
      nsenter -t $PID -m -u -i -n -p
    }
    docker_in $1

容器日誌查看

語法:docker logs [ NAMES | CONTAINER ID ]

    [root@code-01 ~]# docker logs dockerd
    [root@11f3e9604501 /]# ps aux
    USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root          1  0.1  0.1  11820  1876 ?        Ss   11:16   0:00 /bin/bash
    root         13  0.0  0.1  51708  1712 ?        R+   11:16   0:00 ps aux
    [root@11f3e9604501 /]# exit
    exit
    [root@code-01 ~]#

Docker 文件日誌

    Docker的日誌文件默認寫入到/var/log/messages內

    Docker的配置文件(CentOS7) 
    [root@code-01 ~]# cat /usr/lib/systemd/system/docker.service
    [Unit]
    Description=Docker Application Container Engine
    Documentation=http://docs.docker.com
    After=network.target rhel-push-plugin.socket registries.service
    Wants=docker-storage-setup.service
    Requires=docker-cleanup.timer

    [Service]
    Type=notify
    NotifyAccess=all
    EnvironmentFile=-/run/containers/registries.conf
    EnvironmentFile=-/etc/sysconfig/docker
    EnvironmentFile=-/etc/sysconfig/docker-storage
    EnvironmentFile=-/etc/sysconfig/docker-network
    Environment=GOTRACEBACK=crash
    Environment=DOCKER_HTTP_HOST_COMPAT=1
    Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
    ExecStart=/usr/bin/dockerd-current \
              --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
              --default-runtime=docker-runc \
              --exec-opt native.cgroupdriver=systemd \
              --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
              --init-path=/usr/libexec/docker/docker-init-current \
              --seccomp-profile=/etc/docker/seccomp.json \
              $OPTIONS \
              $DOCKER_STORAGE_OPTIONS \
              $DOCKER_NETWORK_OPTIONS \
              $ADD_REGISTRY \
              $BLOCK_REGISTRY \
              $INSECURE_REGISTRY \
              $REGISTRIES
    ExecReload=/bin/kill -s HUP $MAINPID
    LimitNOFILE=1048576
    LimitNPROC=1048576
    LimitCORE=infinity
    TimeoutStartSec=0
    Restart=on-abnormal
    KillMode=process

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