1. 程式人生 > 實用技巧 >Docker的基礎知識(二)

Docker的基礎知識(二)

Docker的基礎知識(二)

Docker Hub 官網
 

搜尋映象

docker search <映象名>
[root@web01 ~]# docker search centos
NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
centos                             The official build of CentOS.                   6119                [OK]                
ansible/centos7-ansible            Ansible on Centos7                              132                                     [OK]
consol/centos-xfce-vnc             Centos container with "headless" VNC session…   118                                     [OK]
jdeathe/centos-ssh                 OpenSSH / Supervisor / EPEL/IUS/SCL Repos - …   115                                     [OK]
centos/systemd                     systemd enabled base container.                 86                                      [OK]
centos/mysql-57-centos7            MySQL 5.7 SQL database server                   79                                      
imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              58                                      [OK]

下載映象

docker pull <映象名>:<標籤>
[root@web01 ~]# docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
0e03bdcc26d7: Pull complete 
Digest: sha256:49a1c8800c94df04e9658809b006fd8a686cab8028d33cfba2cc049724254202
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

 
列出本地映象列表

docker images
[root@web01 ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
jumpserver/jms_koko        2.0.1               589d376dd1f0        5 weeks ago         356MB
jumpserver/jms_guacamole   2.0.1               875616016472        5 weeks ago         659MB
mysql/mysql-server         5.7                 278f8eedd831        3 months ago        338MB

建立容器

docker run [options] <images> [command]

options:

-i:表示啟動一個可互動的容器,並持續開啟標準輸入
-t:表示使用終端關聯到容器的標準輸入輸出上(偽終端)
-d:表示將容器放置後臺執行
--rm:退出後刪除容器
--name:表示定義容器唯一名稱,若不指定,docker會自動生成

“run -d”一個容器後有一個問題,docker ps -a發現容器已經退出
原因:docker容器後臺執行,就必須要一個前臺程序;容器執行的命令如果不是那些一直掛起的命令(如top,tail),就會自動退出

[root@web01 /server]# docker run  -d ubuntu /bin/sh -c "tail -f /etc/passwd "
7c53320ff9e2fe5ae052c82e7fd2cb84a8165705a0f6bc32a560267bb74d1fa4
[root@web01 /server]# docker ps -a
CONTAINER ID        IMAGE                            COMMAND                  CREATED              STATUS                        PORTS                  NAMES
7c53320ff9e2        ubuntu                           "/bin/sh -c 'tail -f…"   4 seconds ago        Up 4 seconds                                         serene_albattani

檢視容器列表

docker ps 
#-a 選項列出所有容器,包括終止的容器
[root@web01 ~]# docker ps -a
CONTAINER ID        IMAGE                            COMMAND                  CREATED              STATUS                       PORTS                  NAMES
50d961ce27da        jumpserver/jms_koko:2.0.1        "/bin/bash"              About a minute ago   Exited (127) 8 seconds ago                          jumpserver

 
‘啟動/重啟/停止/刪除’ 容器

docker start/restart/stop/rm <容器名>/<或容器ID>
[root@web01 ~]# docker start 50d961ce27da
50d961ce27da
[root@web01 ~]# docker ps
CONTAINER ID        IMAGE                       COMMAND                  CREATED             STATUS                 PORTS                  NAMES
50d961ce27da        jumpserver/jms_koko:2.0.1   "/bin/bash"              4 minutes ago       Up 3 seconds  

exit容器停止退出,ctrl+P+Q 容器不停止退出
 

檢視容器日誌

docker logs -f -t --tail <容器ID>

-t:加入時間戳
-f:跟隨最新的日誌列印
--tail <數字>:顯示最後多少條

[root@web01 ~]# docker run -d --name hello ubuntu /bin/sh -c "while true;do echo hello;sleep 2;done" #後臺執行ubuntu容器,執行指令碼:2秒輸出一次'hello'.
[root@web01 ~]# docker logs -tf --tail 3 hello
2020-08-04T03:58:04.031315538Z hello
2020-08-04T03:58:06.032629017Z hello
2020-08-04T03:58:08.033905089Z hello

 
檢視容器內部細節

docker inspect <容器名>

 
連線容器

docker attach <容器名>

若執行DB或伺服器應用程式將無法進行輸入,只能看到輸出
缺點:如果兩個視窗都attach到同一容器中,兩個視窗操作會同步,要退出都退出

 
從外部執行容器內的命令

docker exec <容器名> <命令> <引數> 
#謹慎使用exec,會對容器造成意外影響
#exec 只能在容器執行時使用
[root@web01 ~]# docker exec hello echo "hello world"
Error response from daemon: Container ccf9d9b6fc3133bd2c9bb82917a50c813b1f9342ad23dacd470f3605991ad7a5 is not running
[root@web01 ~]# docker ps
CONTAINER ID        IMAGE                    COMMAND                  CREATED             STATUS                 PORTS                  NAMES
521f6ecdefe9        ubuntu                   "/bin/bash"              3 seconds ago       Up 2 seconds                                  hello
[root@web01 ~]# docker exec hello echo "hello world"
hello world

 
從容器內拷貝檔案到主機上

docker cp <容器名>:/路徑/檔案 /本地路徑
[root@web01 /server]# docker cp ubuntu:/tmp/test.txt ./
[root@web01 /server]# ls
test.txt

刪除映象

docker rmi <容器名>:<標籤>