Docker 常用命令——容器


1.新建並啟動容器

docker run [option] images [command][arg]    #根據鏡像新建容器並運行。如果本地沒有鏡像則從docker hub上拉取。
--name 為容器指定名稱。
-d    后台運行容器,並返回容器id
-i    交互模式運行容器,通常與 -t同時用
-t    為容器分配偽輸入終端。
-P    隨機端口映射
-p    指定端口映射,有以下四種格式
    ip:hostport:ContainerPort
    ip::containerPort
    HostPort:ContainerPort
    ContainerPort
docker run centos       #創建/運行/退出容器
docker run -t centos    #創建容器,並進入偽終端,但不能操作。ctrl+c 退出,容器不退出。
docker run -it centos
docker run -it --name mycentos centos
docker run -d centos    #以后台進程方式創建容器並運行,但因為沒有可交互的前台進程,所以又被立刻終止。故docker ps 看不到。
[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               latest              a55fbf438dfd        8 days ago          95MB
mysql               latest              7bb2586065cd        8 days ago          477MB
nginx               latest              2bcb04bdb83f        8 days ago          109MB
centos              latest              9f38484d220f        2 weeks ago         202MB
hello-world         latest              fce289e99eb9        3 months ago        1.84kB
docker run -it 9f38484d220f    #啟動交互式容器
[root@8e0ffee781f1 /]# ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 02:23 pts/0    00:00:00 /bin/bash
root        16     1  0 02:23 pts/0    00:00:00 ps -ef
[root@8e0ffee781f1 /]# exit
exit
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]#  docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
8e0ffee781f1        9f38484d220f        "/bin/bash"         4 minutes ago       Exited (0) 3 minutes ago                       pensive_lumiere
3af63c5c69c6        hello-world         "/hello"            42 hours ago        Exited (0) 42 hours ago                        pensive_dubinsky
[root@localhost ~]# docker rename 8e0ffee781f1 mycentos
[root@localhost ~]# docker start mycentos
mycentos
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8e0ffee781f1        9f38484d220f        "/bin/bash"         40 minutes ago      Up 6 seconds                            mycentos
[root@localhost ~]# docker stats mycentos
CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT   MEM %               NET I/O             BLOCK I/O           PIDS
8e0ffee781f1        mycentos            0.00%               380KiB / 991.2MiB   0.04%               656B / 0B           0B / 0B             1
[root@localhost ~]# docker top mycentos
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4675                4659                0                   10:44               pts/0               00:00:00            /bin/bash
[root@localhost ~]# docker attach mycentos
不關容器,安全退出: ctrl +p   ctrl+q
[root@localhost ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
8e0ffee781f1        9f38484d220f        "/bin/bash"         3 hours ago         Up 2 hours                              mycentos
[root@localhost ~]# docker images centos
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              9f38484d220f        2 weeks ago         202MB
[root@localhost ~]# docker run -it --name mycentos01 centos    #重新打開一個容器,並命名為mycentos01
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
ed1315df6320        centos              "/bin/bash"         About a minute ago   Up About a minute                       mycentos01
8e0ffee781f1        9f38484d220f        "/bin/bash"         3 hours ago          Up 2 hours                              mycentos

2.列出容器

docker ps -a    顯示當前或曾經打開的容器
docker ps -l    顯示上一次運行的容器
docker ps -n 3  顯示上3次運行的容器
docker ps -ql   只顯示上一次運行的容器ID

3.退出容器

exit    #退出並關閉容器
ctrl+p,crl+q #退出但不關閉容器

4.停止容器

docker stop  容器 ID或name
docker stop -t n 容器 ID或name # Seconds to wait for stop before killing it (default 10) 殺掉容器前等待多少秒(默認10s)
直接關閉
docker kill 容器 ID或name
[root@localhost ~]# docker stop mycentos mycentos01    #同時停止多個容器
mycentos
mycentos01
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

4.啟動容器

docker start    容器 ID或name
docker restart  容器 ID或name
[root@localhost ~]# docker start mycentos mycentos01
mycentos
mycentos01
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ed1315df6320        centos              "/bin/bash"         9 minutes ago       Up 36 seconds                           mycentos01
8e0ffee781f1        9f38484d220f        "/bin/bash"         3 hours ago         Up 36 seconds                           mycentos

5.重啟容器

docker restart 容器 ID或name

6.刪除停止運行的容器

docker rm 容器 ID或name
docker rm -f 強制刪除容器,即使在運行
docker rm -f $(docker ps -qa)      # 刪除全部容器
docker ps -qa | xargs docker rm    # 刪除全部已停止容器
docker rmi 刪除鏡像
[root@localhost ~]# docker ps -n2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
ed1315df6320        centos              "/bin/bash"         23 minutes ago      Exited (137) 7 minutes ago                       mycentos01
8e0ffee781f1        9f38484d220f        "/bin/bash"         3 hours ago         Exited (137) 8 minutes ago                       mycentos
[root@localhost ~]# docker rm mycentos01
mycentos01
[root@localhost ~]# docker ps -n2
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
8e0ffee781f1        9f38484d220f        "/bin/bash"         3 hours ago         Exited (137) 9 minutes ago                       mycentos
3af63c5c69c6        hello-world         "/hello"            45 hours ago        Exited (0) 45 hours ago                          pensive_dubinsky

7.查看所有容器的實時資源占用情況

docker stats

8.查看容器日志

docker logs -f -t --tail 10 容器 ID或name
-f 持續刷新最新日志
-t 顯示時間戳
--tail 顯示最后幾行
[root@localhost ~]# docker run -d --name mycentos1 centos
ba18b348bd9857bde9b25a62d848d6239c1c7c0de302a8bc279185a758efd861
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker run -d --name mycentos2 centos /bin/bash -c "while true;do echo Hello World;sleep 3;done"
21494ef841e27c69877afaf1a0be5ae2bb7d32d6862eb7bfa1e6eb237f04efa3
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
21494ef841e2        centos              "/bin/bash -c 'while…"   2 seconds ago       Up 2 seconds                            mycentos2
[root@localhost ~]# docker logs -f -t --tail 5 21494ef841e2
2019-04-04T07:37:43.721260403Z Hello World
2019-04-04T07:37:46.721904929Z Hello World
2019-04-04T07:37:49.723204790Z Hello World
2019-04-04T07:37:52.724042843Z Hello World
2019-04-04T07:37:55.725116649Z Hello World
...

9.查看容器內進程

docker top 容器 ID或name
[root@localhost ~]# docker run -d centos /bin/bash -c "while true;do echo Nihao;sleep 2 ;done"
4768a70886fcb74cdf00cb19d142fb503a18d2390406dc31ad533d697b423f46
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4768a70886fc        centos              "/bin/bash -c 'while…"   3 seconds ago       Up 2 seconds                            affectionate_cori
[root@localhost ~]# docker top 4768a70886fc
UID     PID     PPID    C    STIME    TTY    TIME        CMD
root    9379    9364    0    15:48    ?      00:00:00    /bin/bash -c while true;do echo Nihao;sleep 2 ;done
root    9427    9379    0    15:48    ?      00:00:00    sleep 2

10.查看容器細節

docker inspect 容器 ID或name
[root@localhost ~]# docker inspect 4768a70886fc
[
    {
        "Id": "4768a70886fcb74cdf00cb19d142fb503a18d2390406dc31ad533d697b423f46",
        "Created": "2019-04-04T07:48:20.460764642Z",
        "Path": "/bin/bash",
        "Args": [
            "-c",
            "while true;do echo Nihao;sleep 2 ;done"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            ....
11.進入容器
docker attach 容器 ID或name
docker exec -t -w -u -e 容器 ID或name 命令              # 功能更強大,也能實現登陸容器內部
  -d, --detach Detached mode: run command in the background
  -e, --env list Set environment variables
  -i, --interactive Keep STDIN open even if not attached
  -t, --tty Allocate a pseudo-TTY
  -u, --user string Username or UID (format: <name|uid>[:<group|gid>])
  -w, --workdir string Working directory inside the container
[root@localhost ~]# docker exec -t -w /tmp -uroot -e LANG=en 4768a70886fc ls
ks-script-eC059Y  yum.log
[root@localhost ~]# docker exec 4768a70886fc ls /tmp
ks-script-eC059Y
yum.log
[root@localhost ~]# docker exec -it 4768a70886fc ls /tmp
ks-script-eC059Y  yum.log
[root@localhost ~]# docker exec -it 4768a70886fc /bin/bash    
[root@4768a70886fc /]# ls
anaconda-post.log  bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

12. docker cp

    Copy files/folders between a container and the local filesystem 在本地系統和容器間copy文件或文件夾
[root@localhost ~]# docker cp anaconda-ks.cfg 4768a70886fc:/home
[root@localhost ~]# docker exec 4768a70886fc ls /home
anaconda-ks.cfg

[root@localhost ~]# docker exec -it 4768a70886fc ls /tmp
ks-script-eC059Y  yum.log
[root@localhost ~]# docker cp 4768a70886fc:/tmp/yum.log /tmp
[root@localhost ~]# ls -l /tmp
總用量 8
-rw-------. 1 root root   0 3月   6 01:34 yum.log

docker run -d /bin/bash -c 的注意點

重啟docker 后,會繼續執行創建docker 時指定的腳本。
相當於該容器運行的是 鏡像+shell 的組合模板。
docker attach 登陸容器后,如果command 命令是前台進程就會一直執行,而不能做其他操作。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM