天天看點

Docker入門

1.測試docker是否存在

  • sudo docker info

    傳回docker的基本資訊

$ sudo docker info
//出現一下内容
Containers: 2
 Running: 0
 Paused: 0
 Stopped: 2
Images: 1
...
           

2.運作第一個容器

$ sudo docker run -i -t ubuntu /bin/bash
//開始下載下傳容器并運作
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
473ede7ed136: Pull complete 
c46b5fa4d940: Pull complete 
93ae3df89c92: Pull complete 
6b1eed27cade: Pull complete 
Digest: sha256:29934af957c53004d7fb6340139880d23fb1952505a15d69a03af0d1418878cb
Status: Downloaded newer image for ubuntu:latest
root@363ed45619ae:/# 
           
  • 注意 可通過 docker help 或者 man docker-run 來擷取 docker的指令清單
  • 解析:

    sudo docker run -i -t ubuntu /bin/bash

    其中-i 标志保證容器中STDIN是開啟的,持久的标準輸入,-t标志是告訴docker為要建立的容器配置設定一個僞tty終端。 Ubuntu是 建立一個Ubuntu鏡像,同時告訴新容器中要運作:/bin/bash 指令。是以就到:root@363ed45619ae:/# 。

3.使用容器

其中容器ID 363ed45619ae 。 也是它的主機名。

root@363ed45619ae:/home# hostname
363ed45619ae
root@363ed45619ae:/home# cat /etc/hosts
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2  363ed45619ae
           
  • 網絡配置
root@363ed45619ae:/home# ip a
           
  • 檢查容器程序
root@363ed45619ae:/home# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  18508  3428 pts/0    Ss   07:34   0:00 /bin/bash
root        21  0.0  0.0  34400  2860 pts/0    R+   07:47   0:00 ps -aux
           
  • 在容器中安裝軟體包
root@363ed45619ae:~# apt-get upate    root@363ed45619ae:~# apt-get install vim 
           
  • 退出容器
exit
           

退出後,回到自己的實體機

  • 檢視目前系統中的容器清單
$ sudo docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
363ed45619ae        ubuntu              "/bin/bash"         19 minutes ago      Exited (0) 31 seconds ago                       keen_boyd
31ef04a4ff1b        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           gifted_austin
e4166694ac7c        hello-world         "/hello"            3 days ago          Exited (0) 3 days ago                           brave_kare
           
  • 檢視最後一次運作的容器
$ sudo docker ps -a -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES
363ed45619ae        ubuntu              "/bin/bash"         20 minutes ago      Exited (0) About a minute ago                       keen_boyd
           

4.容器命名

--name 标志

$ sudo docker run --name hiekay_container -i -t ubuntu /bin/bash
root@989f63da27d3:/# exit
exit

$ sudo docker ps -a -l                                          
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
989f63da27d3        ubuntu              "/bin/bash"         26 seconds ago      Exited (0) 8 seconds ago                       hiekay_container
           

合法的容器名稱符合: [a-zA-Z0-9_·-]

5.重新開機停止的容器

可以通過容器名稱 或則 容器ID

$ sudo docker start hiekay_container
hiekay_container

$ sudo docker start 989f63da27d3                
989f63da27d3
           

6.附着到容器上

docker容器重新啟動的時候 會重新開機一個互動式會話shell,我們可以用 docker attach 重新附着到該容器會話上 , 可通過容器 name 或者 ID 。

$ sudo docker attach hiekay_container
root@989f63da27d3:/#

$ sudo docker attach 989f63da27d3
root@989f63da27d3:/#
           

7.建立守護式容器

除了互動式運作的容器,大部分是需要建立長期運作的容器, 守護式容器 沒有互動式會話,适合運作應用程式和服務。

執行個體:

$ sudo docker run --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1; done" 
ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9
           

其中-d參數 是标志讓容器放在背景運作。

其中 指令是讓 運作一個 while 循環 一直列印 hello world ,直到容器或程序停止。

  • 可通過 docker ps指令 檢視 正在運作的容器
$ sudo docker ps                                                                                   
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
ea6e0fecba4f        ubuntu              "/bin/sh -c 'while t…"   2 minutes ago       Up 2 minutes                            demo
           
8.檢視容器内部的工作
  • docker logs
$ sudo docker logs demo
hello world
hello world
hello world
......
           

也可以用 -f參數來監控日志

$ sudo docker logs -f demo

           

也可以用 tail 指令看最後的幾行日志

sudo docker logs --tail 10  demo
或
sudo docker logs --tail 0 -f  demo
           

9.檢視容器内的程序

  • docker top
$ sudo docker top demo                                                        
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                31469               31448               99                  16:11               ?                   00:09:46            /bin/sh -c while true; do echo hello world; sleep1; done
           

10.在容器内運作程序

  • docker exec

    兩種類型:背景任務 和 互動式任務

  • 背景任務
$ sudo docker exec -d demo touch /etc/new_file1
           
  • 互動式任務
$ sudo docker exec -t -i demo /bin/bash        
root@ea6e0fecba4f:/# 
           

11.停止守護式容器

  • docker stop name/ID
$ sudo docker stop demo 
或
$ sudo docker stop ea6e0fecba4f 
           
  • 注意: 也可以通過docker kill 關閉

12.自動重新開機容器

  • 自動重新開機标志: --restart
$ sudo docker run --restart=always --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done" 
           
  • 注意: --restart 被設定為 always ,無論退出代碼是什麼,一直會自動重新開機。

    還可以設定為: on-failure 隻有當退出代碼為0的時候才會自動重新開機,也可以傳參數: 5, 重新開機次數。

    --restart=on-failure:5

13.深入容器

  • docker inspect 擷取更多容器資訊
$ sudo docker inspect demo
//擷取的資訊
[
    {
        "Id": "ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9",
        "Created": "2018-10-29T08:11:49.219017867Z",
        "Path": "/bin/sh",
        "Args": [
            "-c",
            "while true; do echo hello world; sleep1; done"
        ],
......
           
  • 可以用 -f 或 --format 标志來標明檢視結果 ,支援完整的Go語言模闆

    例子:

    檢視容器的運作狀态

$ sudo docker inspect --format='{{.State.Running}}' demo 
//傳回
false
           

檢視容器IP

$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' demo
           

檢視多個容器的資訊

$ sudo docker inspect --format='{{.Name}} {{.State.Running}}' demo demo1
/demo false
/demo1 false
           

14.删除容器

  • docker rm name/ID
$ sudo docker rm demo1                                                                                                
demo1
           
  • 注意:删除之前 必須先關閉
  • 删除所有
$ sudo rm 'docker ps -a -q '
           

解析:docker -a 列出所有容器,-q 傳回ID, 然後傳給 sudo rm ID , 即可删除。

15. 小結

docker 基礎,請多聯系。

繼續閱讀