1. 程式人生 > >7、docker容器相關操作命令

7、docker容器相關操作命令

首先我們要說明一點:容器是由映象建立來的,也就是說有映象才能有容器

1、新建並啟動容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTION說明(常用):有些是一個減號,有些是兩個減號
--name="新容器的名字":為容器指定一個名稱
-d :後臺執行容器,並返回容器ID,即啟動守護式容器
-i: 以互動模式執行容器,通常與-t同時使用
-t: 為容器重新分配一個偽輸入終端,通常與-i同時使用
-P:大寫的P,隨機埠對映
-p:小寫的p,指定埠對映,有以下四種形式

  • ip:hostPort:containerPort
  • ip::containerPort
  • hostPort:containerPort
  • containerPort

我們啟容器常用的有2中方式 -it 和 -d
-it 的方式我們稱之為前臺執行
-d 的方式我們稱之為後臺執行

[[email protected] ~]# docker run -it centos #-it引數之後可以是映象名也可以是映象ID
[[email protected] /]# ps -ef #提示符為[[email protected] /]說明進入了docker容器的終端,dca8587afa2a為生成的容器

UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  1 15:51 ?        00:00:00 /bin/bash
root         14      1  0 15:51 ?        00:00:00 ps -ef

使用ps -ef命令檢視程序,顯示結果為很少的程序,我們主機的程序不可能這麼少,所以說明我們已經進入到docker容器的命令列裡邊了。使用-it開啟的容器exit命令容器停止並退出,使用ctrl+p+q鍵容器不停止退出。

[[email protected] ~]# docker run -it --name myCentosTest centos
建立並啟動容器,使用--name引數給容器定義一個別名,這樣docker ps顯示的時候"NAMES"那一列顯示的就是我們自定義的名字

[[email protected] ~]# docker run -d --name test101 centos #使用-d啟動守護式容器
83053ed07f56c62744f69e0d2676b39356f22bf2ab50561bf9f572de57b1a35d


[[email protected] ~]# docker ps -a
7、docker容器相關操作命令
使用docker ps -a 檢視,我們剛才執行的守護式容器STATUS為Exited(0),但為何狀態是Exited(0)呢?
很重要的要說明一點:docker容器後臺執行必須有一個前臺程序。
容器執行的命令如果不是那些一直掛起的命令(比如top,tail),就會自動退出
這是docker機制的問題,比如你的web容器,我們以nginx為例,正常情況下,我們配置啟動伺服器只需要啟動相應的service即可。例如service nginx start
但是,這樣做,nginx為後臺程序模式執行,在linux上沒有問題,
但docker run -d centos是這樣致docker前臺沒有執行的應用
這樣的容器後臺啟動,會立即自殺,因為他覺得他沒事兒可做了。
所以,最佳的解決方案是,將你要執行的程式以前臺程序的形式執行
來看下面的例子
[[email protected] ~]# docker run -d --name test102 centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
a7a247b735d96f9d71a50b5130c487e5ffc6d5789303f987680faf29eb560054
使用docker ps -a 檢視狀態就不為Exited(0)
7、docker容器相關操作命令

2、列出所有正在執行的容器
docker ps [OPTIONS]
不加任何引數,則表示顯示當前正在執行的容器,不包括歷史上執行的
options說明(常用):
-a: 列出當前所有正在執行的容器+歷史上執行的
-l: 顯示最近建立的容器
-n: 顯示最近n個建立的容器
-q: 靜默模式,只顯示容器編號
--no-trunc:

[[email protected] ~]# docker ps #顯示正在執行的容器
[[email protected] ~]# docker ps -l #顯示最新的一個容器
[[email protected] ~]# docker ps -n 2 #顯示最近的2個容器
[[email protected] ~]# docker ps -q #顯示容器號

3、退出容器(使用-it模式啟動的容器)
exit 容器停止並退出
ctrl+p+q 容器不停止退出

4、啟動容器
docker start 容器ID 或者 容器名

5、重啟容器
docker restart 容器ID

6、非強制停止容器
docker stop 容器ID

7、強制停止容器
docker kill 容器ID

8、刪除已經停止的容器
docker ps輸出為空,則說明當前沒有容器執行,但是在docker的快取記錄裡邊,它記錄著你到現在為止已經啟動過哪些容器
,我們可以使用如下命令將已停止的容器刪除掉,注意是已經停止的
docker rm 容器ID
如果我們就像刪除正在執行的容器呢,加上-f 引數即可
docker rm -f 容器ID

9、一次性刪除多個容器
方法一:docker rm -f $(docker ps -a -q)
方法二:docker ps -a -q | xargs docker rm

10、檢視容器日誌
docker logs -f -t --tail 容器ID
-t 是加入時間戳
-f 跟隨最新的日誌列印
--tail 數字顯示最後多少條

為了實驗說明,我們先啟動一個容器
[[email protected] ~]# docker run -d centos /bin/sh -c "while true;do echo hello zzyy;sleep 2;done"
然後使用docker logs檢視日誌
[[email protected] ~]# docker logs -t -f --tail 3 f00a15cba7f6 #f00a15cba7f6為容器ID,可以使用docker ps 命令獲得

2018-11-14T16:46:33.398479288Z hello zzyy
2018-11-14T16:46:35.404098248Z hello zzyy
2018-11-14T16:46:37.408717369Z hello zzyy
2018-11-14T16:46:39.415078746Z hello zzyy

11、檢視容器內執行的程序
[[email protected] ~]# docker top f00a15cba7f6 #f00a15cba7f6為容器ID

12、檢視容器內部的細節
[[email protected] ~]# docker inspect f00a15cba7f6 #f00a15cba7f6為容器ID

13、進入正在執行的容器並以命令列互動
方式一:
[[email protected] ~]# docker attach f00a15cba7f6 #進入容器
方式二:
[[email protected] ~]# docker exec -t f00a15cba7f6 ls -l /tmp

total 4
-rwx------ 1 root root 836 Oct  6 19:15 ks-script-7RxiSx
-rw------- 1 root root   0 Oct  6 19:14 yum.log

f00a15cba7f6 為容器ID
ls -l /tmp 為要執行的命令
docker exec 是不需要進入容器,就可以在容器內執行命令,然後返回結果給docker宿主機
方式三:
當然exec也可以加上-i引數進入互動式模式
[[email protected] ~]# docker exec -it f00a15cba7f6 /bin/bash
[[email protected] /]#

14、從容器拷貝檔案到主機上
為什麼會有這個命令呢?假設我使用命令docker stop 停止了一個容器,被停止的容器內產生的資料就沒有了,但是有時候我們想將容器內的資料持久化,我想將它儲存下來,所以要將容器內的資料拷貝到主機上邊。
使用docker cp命令即可,命令格式如下
docker cp 容器ID:容器內路徑 目的主機路徑

[[email protected] ~]# docker cp f00a15cba7f6:/tmp/yum.log /root/