Docker容器-容器操作

操作Docker容器

1、容器:
1.1、容器是Docker的另一個核心概念。簡單來說,容器是鏡像的一個實例。所不同的是,鏡像是靜態的只讀文件,而容器帶有運行時需要的可寫文件層,同時,容器中的應用進程處於運行狀態。
1.2、如果認爲虛擬機是模擬運行的一整套操作系統(包括內核、應用運行態環境和其它系統環境)和跑在上面的應用。那麼Docker容器就是獨立運行的一個(或一組)應用。以及它們必須的運行環境。

2、創建容器:
2.1、使用docker [container] create 命令新創建一個容器;
2.1.1、基於centos 7.5.1804的鏡像創建一個新容器

cobbler@cobbler-docker:~$ sudo docker create -it centos:7.5.1804
cobbler@cobbler-docker:~$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS          PORTS               NAMES
993f382831ef        centos:7.5.1804     "/bin/bash"         16 seconds ago      Created                             musing_hamilton

2.1.2、使用docker [container] create 命令新建的容器處於停止狀態,可以使用docker [container] start 啓動剛創建好的容器,這裏基於容器的id號啓動

cobbler@cobbler-docker:~$ sudo docker start 993f382831ef
993f382831ef

查看已啓動的容器
cobbler@cobbler-docker:~$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
993f382831ef        centos:7.5.1804     "/bin/bash"         2 hours ago         Up 2 hours                              musing_hamilton

2.1.3、新建和啓動容器一併操作了
用docker [container] run 創建並啓動容器時,Docker在後臺運行的標準操作包括:

1、檢查本地是否存在指定的鏡像,不存在就從Docker Hub倉庫下載;
2、利用鏡像創建一個容器,並啓動該容器;
3、分配一個文件系統給容器,並在只讀的鏡像層外面掛載一層可讀寫層;
4、從宿主機配置的網橋接口中橋接一個虛擬接口到容器中去;
5、從網橋的地址池配置一個IP地址給容器;
6、執行用戶指定的應用程序;
7、執行完畢後容器被自動終止;
指定一個bash終端啓動,可以進行交互式操作。
cobbler@cobbler-docker:~$ sudo docker run -it --name test1 centos:7.5.1804 /bin/bash
[root@aebfa755ad9d ~]# cd /usr/local/
[root@aebfa755ad9d local]# ls
bin  etc  games  include  lib  lib64  libexec  sbin  share  src
[root@aebfa755ad9d local]# exit
exit

對於所創建的bash容器,當用戶使用exit命令退出bash進程之後,容器也會自動退出,這是因爲對於容器來說,當其中的應用退出後,容器的使命完成,也就沒有繼續運行的必要了 

2.1.4、守護態運行
要讓docker容器在後臺以守護態形式運行。此時,可以通過添加-d選項來完成;

cobbler@cobbler-docker:~$ sudo docker run --name centos -d centos:7.5.1804 /bin/bash -c "while true;do echo hello world; sleep 1;done"
b39568ae50aaeabda71288238ae7805e3894ad4b1c79930c669e2873a47c3f32

# 查看已運行容器信息:
cobbler@cobbler-docker:~$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b39568ae50aa        centos:7.5.1804     "/bin/bash -c 'while…"   2 minutes ago       Up 2 minutes                            centos

2.1.5、查看容器日誌

docker [container] logs
        常用選項:
            -details:打印詳細信息;
            -f, -follow: 持續保持輸出;
            -since string: 輸出從某個時間開始的日誌;
            -tail string: 輸出最近的若干日誌
            -t, -timestamps: 顯示時間戳信息;
            -until string: 輸出某個時間之前的日誌;

# 查看centos容器的信息:
cobbler@cobbler-docker:~$ sudo docker logs centos   
cobbler@cobbler-docker:~$ sudo docker logs --details centos 
cobbler@cobbler-docker:~$ sudo docker logs -f centos

3、停止容器
3.1.1、暫停容器docker pause container

cobbler@cobbler-docker:~$ sudo docker pause centos
centos
cobbler@cobbler-docker:~$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED          STATUS                   PORTS               NAMES
b39568ae50aa        centos:7.5.1804     "/bin/bash -c 'while…"   13 minutes ago      Up 13 minutes (Paused)                       centos

3.1.2、恢復容器使用docker unpause container

cobbler@cobbler-docker:~$ sudo docker unpause centos
centos
cobbler@cobbler-docker:~$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
b39568ae50aa        centos:7.5.1804     "/bin/bash -c 'while…"   15 minutes ago      Up 14 minutes                           centos

3.1.3、終止容器
使用docker container stop 終止運行中的容器、該命令首先向容器發送SIGTERM信號,等待一段超時後(默認爲10s),再發送SIGKILL信號來終止容器;

cobbler@cobbler-docker:~$ sudo docker stop centos
centos

停止完之後,如果是測試環境的話可以使用docker container prune 清除所有停止狀態的容器。(注意,此操作還是小心爲妙!)

cobbler@cobbler-docker:~$ sudo docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Deleted Containers:
b39568ae50aaeabda71288238ae7805e3894ad4b1c79930c669e2873a47c3f32
ed66b56e02d0538571e6f72077ea2e46af675a405db25161fddd1455a8311a8b
aebfa755ad9d22084baa954df4b2fa2c685c2f1bdedc9fbfec865e03f6143b8c

Total reclaimed space: 48B
cobbler@cobbler-docker:~$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

還可以直接強制停止容器、docker [container] kill 直接發送SIGKILL信號來強行終止容器;

cobbler@cobbler-docker:~$ sudo docker kill centos
centos

容器被停止之後,這時有的測試環境的容器還需要再次用到需要給啓動起來,就會用start來重新啓動

cobbler@cobbler-docker:~$ sudo docker start centos
centos
cobbler@cobbler-docker:~$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
742109f79dc9        centos:7.5.1804     "/bin/sh"           2 minutes ago       Up 5 seconds                            centos

也可以使用restart來重啓,它是先將一個運行的容器先停止,然後再重新啓動起來;

cobbler@cobbler-docker:~$ sudo docker restart centos
centos
cobbler@cobbler-docker:~$ sudo docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
742109f79dc9        centos:7.5.1804     "/bin/sh"           6 minutes ago       Up 22 seconds                           centos

4、進入容器內部
4.1.1、在運行一個容器時通常需要加上-d讓它運行在後臺,用戶看不到容器中的信息,也無法進行操作,這時候要進入容器裏進行操作就要使用exec或attach命令,這裏只說exec命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Options:
    -d, --detach               Detached mode: run command in the background
     --detach-keys string   Override the key sequence for detaching a container
    -e, --env list             Set environment variables
    -i, --interactive          Keep STDIN open even if not attached
        --privileged           Give extended privileges to the command
    -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

# 進入centos容器裏面,通過指定-it選項來保持標準輸入打開,並分配一個僞終端,通過exec命令對容器執行操作是爲常見的方式。
cobbler@cobbler-docker:~$ sudo docker exec -it centos /bin/bash
[root@742109f79dc9 /]# 

5、刪除容器

docker [container] rm 刪除容器
    Options:
        -f, --force     Force the removal of a running container (uses SIGKILL)
        -l, --link      Remove the specified link
        -v, --volumes   Remove the volumes associated with the container

示例:
cobbler@cobbler-docker:~$ sudo docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
b25cf7e89f28        centos              "/bin/bash"         5 seconds ago       Exited (0) 3 seconds ago                       modest_agnesi
742109f79dc9        centos:7.5.1804     "/bin/sh"           23 minutes ago      Up 17 minutes                                  centos

# 使用rm刪除的話,只能刪除已經處於停止或退出狀態的容器,已經在運行的容器刪不掉的,如果要刪除的需要加上-f選項
            cobbler@cobbler-docker:~$ sudo docker rm b25cf7e89f28
            b25cf7e89f28

6、導入和導出容器
6.1.1、導出容器:

docker export [OPTIONS] CONTAINER
    Options:
        -o, --output string   Write to a file, instead of STDOUT

 可以通過-o選項指定導出的tar文件名,也可以直接通過重定向來實現。
 示例:
cobbler@cobbler-docker:~$ sudo docker export -o centos-nginx.tar.gz centos
cobbler@cobbler-docker:~$ ls
Desktop     Downloads         Music     Templates Pictures  
centos-nginx.tar.gz          Dockerfile  examples.desktop  
Documents   images            Public    Videos

6.1.2、導入容器
docker container import 導入變成鏡像。

cobbler@cobbler-docker:~$ sudo docker import centos-nginx.tar.gz  test/centos-nginx:v1.0 
sha256:90bfdef73b8d3f1d868acd745c1555894ca3e185f27a8e49fd5252d4c23fa67f
cobbler@cobbler-docker:~$ sudo docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
test/centos-nginx            v1.0                90bfdef73b8d        11 seconds ago      200MB

7、查看容器
7.1.1、查看容器詳情
docker container inspect [options] CONTAINER [CONTAINER....]子命令

查看centos容器的具體信息,結果是以json格式返回
cobbler@cobbler-docker:~$ sudo docker container inspect centos
[
    {
                        "Id": "742109f79dc9fc41cc4e4452b37be0f560021208a863192353899f58fbe2ca7c",
                        "Created": "2018-11-19T13:22:25.957033366Z",
                        "Path": "/bin/sh",
                        "Args": [],
                        "State": {
                            "Status": "running",
                            "Running": true,
                            "Paused": false,
                            "Restarting": false,
                            "OOMKilled": false,
                            "Dead": false,
                            "Pid": 5199,
                            "ExitCode": 0,
                            "Error": "",
                            "StartedAt": "2018-11-19T13:28:12.945203425Z",
                            "FinishedAt": "2018-11-19T13:28:12.180988774Z"
                        },
    }
         ..........    
]       

7.1.2、查看容器內進程
docker [container] top [options] CONTAINER [CONTAINER...]
類似於Linux中的top命令,會打印出容器內的進程信息,包括pid、用戶、時間、命令等

# 查看centos容器內的進程信息:
cobbler@cobbler-docker:~$ sudo docker top centos
UID            PID           PPID        C             STIME         TTY         TIME           CMD
root           5199          5177        0             21:28         pts/0       00:00:00       /bin/sh

7.1.3、查看統計信息
docker [container] stats [options] [CONTAINER..],可以顯示CPU、內存、存儲、網絡等使用情況的統計信息

cobbler@cobbler-docker:~$ sudo docker stats centos
CONTAINER ID        NAME                CPU %           MEM USAGE / LIMIT     MEM %           NET I/O             BLOCK I/O           PIDS
742109f79dc9        centos              0.00%           1.977MiB / 1.924GiB   0.10%           4.47kB / 0B         7.28MB / 0B         1
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章