docker 基礎入門

1:docker 安裝時 linux內核版本太低問題node

  使用uname -a 能夠查看linux內核的版本號,例如ubuntu會輸出相似的內容:mysql

root@ubuntu:~# uname -a
Linux ubuntu 4.4.0-142-generic #168-Ubuntu SMP Wed Jan 16 21:00:45 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

因爲docker的安裝條件包括了內核的條件限制:低於3.8的運行docker可能會有問題linux

下面來看一下如何升級linux內核sql

apt-get update

spt-get install linux-headers-版本號-generic等待安裝完畢

而後是用update-grub啓動加載器加載新內核。docker

最後使用reboot來重啓宿主機啓用新的內核。shell

驗證如下使用uname -a看看內核版本有沒有變化json

 2:驗證docker是否已經準備就緒ubuntu

docker info

  使用docker可執行程序的info命令,若是docker準備就緒的話,會輸出已運行的容器數量,安裝的鏡像數量,docker使用的執行驅動和存儲驅動和docker環境的配置信息。vim

3:docker 是一個基於 c/s架構設計的,既能作客戶端也能作服務器。作客戶端時,docker程序向docker守護進程發送請求,而後在度i返回的請求結果驚醒處理。bash

4:運行一個容器

  • 第一條命令
docker run -i -t  ubuntu /bin/bash

下面來解釋如下各個參數的意思:

docker run 這是docker的一條命令, 

-i 標誌保證容器中STDIN時開啓的,持久的表中輸入時交互式shell的半邊天

-t 告訴docker爲要建立的容器分配一個僞tty終端。另外半邊天。

ubunutu 是一個鏡像。

/bin/bash 告訴docker容器運行一個shell命令。

運行完上面的命令後就會i進入到ubuntu容器中,docker會給容器分配一個惟一id:dae666724601

root@ubuntu:~# docker run -i -t  ubuntu /bin/bash
root@dae666724601:/# 
  • 第二條命令:查看主機名稱
root@dae666724601:/# hostname
dae666724601
  • 第三條命令:查看ip地址
root@dae666724601:/# 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.4    dae666724601
  • 第四條命令:容器中安裝vim
root@dae666724601:/# apt-get update && apt-get install vim
  • 第五條命令:退出容器,回到宿主機
root@dae666724601:/# exit
exit

這條命令會結束容器的運行。可使用蝦米那一條命令來看一下容器是否已經結束運行了

  • 第六條命令。這裏也可使用-a 參數
root@ubuntu:~# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
dae666724601        ubuntu              "/bin/bash"         18 minutes ago      Exited (0) 6 seconds ago                       heuristic_poincare

-l參數是列出最後一次運行的容器,親測只包括已經中止的。

-a參數是查看當前系統中容器的列表(已經中止的和正在運行的),來看一下二者的輸出區別:

root@ubuntu:~# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
dae666724601        ubuntu              "/bin/bash"         18 minutes ago      Exited (0) 6 seconds ago                       heuristic_poincare
root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                               NAMES
dae666724601        ubuntu              "/bin/bash"              22 minutes ago      Exited (0) 3 minutes ago                                       heuristic_poincare
8b7fa227bca2        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                33060/tcp, 0.0.0.0:3307->3306/tcp   second_mysql
df6e780fb24a        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                0.0.0.0:3306->3306/tcp, 33060/tcp   first-mysql

從上面的輸出結果能夠看出來,NAMES這一列,系統給自動分配了一個隨機的名字。下面來講一下容器的命名

  • 第七條命令:容器的命名。在啓動容器的時候能夠加上--name參數來指定容器的名字,從而避免隨機命名。
root@ubuntu:~# docker ps -al
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
dd1ee14b8f14        ubuntu              "/bin/bash"         19 seconds ago      Exited (0) 5 seconds ago                       smeon_ubuntu

細心的同窗應該會發現容器的惟一id和名字都變了。是的,咱們在使用run命令的時候,docker是會進行建立和運行兩步操做的,可是用的是同一個鏡像。因此使用docker ps -a 會看到有兩個ubuntu容器已經中止了。

root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                               NAMES
dd1ee14b8f14        ubuntu              "/bin/bash"              27 seconds ago      Exited (0) 14 seconds ago                                       smeon_ubuntu
dae666724601        ubuntu              "/bin/bash"              31 minutes ago      Exited (0) 13 minutes ago                                       heuristic_poincare
8b7fa227bca2        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                 33060/tcp, 0.0.0.0:3307->3306/tcp   second_mysql
df6e780fb24a        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                 0.0.0.0:3306->3306/tcp, 33060/tcp   first-mysql

那若是像複用以前已經中止的容器該怎麼辦呢?這就須要使用另外一個命令。

  • 第八條命令:docker start 容器名字/惟一段id/惟一長id.讓咱們來試一下吧:
root@ubuntu:~# docker start smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                               NAMES
dd1ee14b8f14        ubuntu              "/bin/bash"              6 minutes ago       Up 50 seconds                                                   smeon_ubuntu
dae666724601        ubuntu              "/bin/bash"              37 minutes ago      Exited (0) 19 minutes ago                                       heuristic_poincare
8b7fa227bca2        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                 33060/tcp, 0.0.0.0:3307->3306/tcp   second_mysql
df6e780fb24a        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                 0.0.0.0:3306->3306/tcp, 33060/tcp   first-mysql

能夠看到以前中止的指定名字的容器已經啓動了。另外兩種方式能夠本身去試一下。另外還可使用docker restart 容器名字/惟一段id/惟一長id 來重啓容器。

  • 第九條命令:中止一個 已經啓動的容器 docker stop容器名字/惟一段id/惟一長id
root@ubuntu:~# docker stop  smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS                               NAMES
dd1ee14b8f14        ubuntu              "/bin/bash"              9 minutes ago       Exited (0) 5 seconds ago                                        smeon_ubuntu
dae666724601        ubuntu              "/bin/bash"              40 minutes ago      Exited (0) 22 minutes ago                                       heuristic_poincare
8b7fa227bca2        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                 33060/tcp, 0.0.0.0:3307->3306/tcp   second_mysql
df6e780fb24a        mysql               "docker-entrypoint.s…"   17 hours ago        Up 17 hours                 0.0.0.0:3306->3306/tcp, 33060/tcp   first-mysql
  •  第十條命令:attach 命令
root@ubuntu:~# docker attach  heuristic_poincare
root@dae666724601:/# 

這裏須要注意的是:若是容器時中止的,attach 的時候會失敗。

  • 第十一條命令:建立一個守護式容器。上面咱們建立的是一個交互式的容器
root@ubuntu:~# docker run --name daemon_ubuntu -d ubuntu /bin/bash -c "while true; do echo hello world;sleep 1; done"
6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69

-d 參數是一個後臺運行的參數

-c 參數是一直循環輸出hello world,直到容器或進程中止。

問題來了:怎麼能看到上一條命令的輸出呢?這須要下一條命令:

  • 第十二條命令 : docker logs daemon_ubuntu(ctr +c 能夠退出日誌查看)
root@ubuntu:~# docker logs daemon_ubuntu
hello world
hello world
hello world
hello world
hello world
...

若是不想查看全部日誌,只須要追蹤最新的logs日誌,有沒有向tail  -f 同樣的參數呢?大難是確定的。

docker logs --tail 10 -f daemon_ubunt 使用參數 --tail 便可以查看最近10條的日誌。

  • 第十三條命令 :查看容器內的進程
root@ubuntu:~# docker top daemon_ubuntu
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                13148               13131               0                   10:13               ?                   00:00:00            /bin/bash -c while true; do echo hello world;sleep 1; done
root                13996               13148               0                   10:21               ?                   00:00:00            sleep 1
  •  第十四條命令:在容器內運行進程。
root@ubuntu:~# docker exec  -d smeon_ubuntu touch /home/config_file.conf
root@ubuntu:~# docker restart smeon_ubuntu
smeon_ubuntu
root@ubuntu:~# docker attach  smeon_ubuntu
root@dd1ee14b8f14:/# ls
bin  boot  dev  etc  home  lib  lib32  lib64  libx32  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@dd1ee14b8f14:/# cd home/
root@dd1ee14b8f14:/home# ls
config_file.conf

-d 參數 代表要運行一個後臺進程

-d以後是指明容器的名字,以及須要執行的命令。這裏建立一個空的配置文件。

經過docker exec 命令能夠在正在運行的容器中進行維護,監控和管理任務。

再舉一個例子:在start 或restart的一個容器的時候不會進入到對應的容器內。也就是不會進入到交互式界面,這時候可使用docker exec 來進入shell交互式界面。

root@ubuntu:~# docker exec -i -t  smeon_ubuntu /bin/bash
root@dd1ee14b8f14:/# 
  • 第十五條命令:自動重啓容器。
root@ubuntu:~# docker run --restart=always --name  daemon_ubuntu -d ubuntu /bin/bash -c "while true; echo hello world; sleep 1 ; done"
docker: Error response from daemon: Conflict. The container name "/daemon_ubuntu" is already in use by container "6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69". You have to remove (or rename) that container to be able to reuse that name.
See 'docker run --help'.

注意這個--resatrt參數是隻有run 命令纔有的,start 和restart沒有該參數。run 會建立新的容器。

  • 第十六條命令:除了docker ps 來獲取容器的信息外,深刻獲取容器信息。
root@ubuntu:~# docker inspect daemon_ubuntu
[
    {
        "Id": "6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69",
        "Created": "2020-05-28T02:13:05.496480088Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true; do echo hello world;sleep 1; done"
        ],
        "State": {
            "Status": "exited",
            "Running": false,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 0,
            "ExitCode": 137,
            "Error": "",
            "StartedAt": "2020-05-28T02:22:28.858219855Z",
            "FinishedAt": "2020-05-28T02:52:01.914573489Z"
        },
        "Image": "sha256:1d622ef86b138c7e96d4f797bf5e4baca3249f030c575b9337638594f2b63f01",
        "ResolvConfPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/hostname",
        "HostsPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/hosts",
        "LogPath": "/var/lib/docker/containers/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69/6b2bd21daf3362e1b7cc75ede26eaf691f1d09926fa3fb5f99c1309a01f69f69-json.log",
        "Name": "/daemon_ubuntu",
     ...
    }
]

inspect命令返回的參數比較多,能夠經過--format參數來輸出指定的配置信息。例如:

root@ubuntu:~# docker inspect --format='{{.State.Status}}' daemon_ubuntu
exited
  • 第十七條命令:刪除容器:docker rm 容器名字/惟一短ID/惟一長ID
root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                               NAMES
6b2bd21daf33        ubuntu              "/bin/bash -c 'while…"   45 minutes ago      Exited (137) 6 minutes ago                                       daemon_ubuntu
dd1ee14b8f14        ubuntu              "/bin/bash"              About an hour ago   Up 26 minutes                                                    smeon_ubuntu
dae666724601        ubuntu              "/bin/bash"              2 hours ago         Exited (0) 53 minutes ago                                        heuristic_poincare
8b7fa227bca2        mysql               "docker-entrypoint.s…"   18 hours ago        Up 18 hours                  33060/tcp, 0.0.0.0:3307->3306/tcp   second_mysql
df6e780fb24a        mysql               "docker-entrypoint.s…"   18 hours ago        Up 18 hours                  0.0.0.0:3306->3306/tcp, 33060/tcp   first-mysql
root@ubuntu:~# docker rm heuristic_poincare
heuristic_poincare
root@ubuntu:~# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                               NAMES
6b2bd21daf33        ubuntu              "/bin/bash -c 'while…"   46 minutes ago      Exited (137) 7 minutes ago                                       daemon_ubuntu
dd1ee14b8f14        ubuntu              "/bin/bash"              About an hour ago   Up 26 minutes                                                    smeon_ubuntu
8b7fa227bca2        mysql               "docker-entrypoint.s…"   18 hours ago        Up 18 hours                  33060/tcp, 0.0.0.0:3307->3306/tcp   second_mysql
df6e780fb24a        mysql               "docker-entrypoint.s…"   18 hours ago        Up 18 hours                  0.0.0.0:3306->3306/tcp, 33060/tcp   first-mysql
root@ubuntu:~# 

 各位至此,docker的入門基本已經結束,歡迎收藏+推薦

相關文章
相關標籤/搜索