【Docker】系列教程02-操作Docker容器

2021-03-02 容器迷宮
簡介

通過前面的學習,相信您已經對鏡像有所了解,是時候學習容器了。

容器是Docker的另一個核心概念。簡單來說,容器是鏡像的一個運行實例。正如從虛擬機模板上啟動VM一樣,用戶也同樣可以從單個鏡像上啟動一個或多個容器。

本章帶大家學習容器相關的重要操作,包括創建容器、啟動容器、終止容器、進入容器後執行操作、刪除容器及通過導入導出容器實現容器遷移、容器與宿主機之間數據拷貝等。

1、創建容器1、新建容器

語法格式:

docker create 語法

例如:

[root@qll251 ~]# docker create -it ubuntu:18.04
eeb931f21f0895d055bedcbe5829634309cbc24863eee6f80b14a131559ffd21

參數說明:

保持標準輸入打開,用於控制臺交互

分配一個tty偽終端,支持終端登錄

2、啟動容器

使用docker create命令新建的容器處理停止狀態,可使用docker start啟動它。

例如,啟動剛剛創建的ubuntu容器:

[root@qll251 ~]# docker start eeb
eeb

eeb為剛剛創建容器的ID簡寫,此時通過docker ps查詢容器已運行:

3、新建並啟動容器docker run 語法

例如,使用 ubuntu 鏡像啟動一個容器,參數為以命令行模式進入該容器:

[root@qll251 ~]# docker run -it ubuntu /bin/bash
root@8b18b6758bb6:/#

docker run相當於執行了兩個步驟:將鏡像放入容器中(docker create),然後啟動容器(docker start)。

4、後臺運行容器

對於剛剛所創建的容器,當用戶使用exit命令退出後,容器也會自動退出,如下圖所示的Exited狀態。

Exited狀態

因為對它來說,當容器的應用退出後,容器使命完成,也就沒有繼續運行的必要了。

因此更多時候,我們希望 Docker 容器是在後臺一直運行。此時可以通過添加-d參數來實現。驗證如下:

添加 -d 參數實現容器後臺運行

小知識點:如果不指定後臺運行容器,還有其他辦法退出而容器不關閉嗎?按Ctrl+P+Q即可實現正常退出不關閉容器。驗證如下:

2、停止容器1、暫停容器docker pause 語法

例如,暫停容器中所有的進程

處於paused狀態的容器,可以使用docker unpause命令恢復到運行狀態,如圖:

docker unpause 命令2、終止容器docker stop 語法

舉例:

該命令首先向容器發送SIGTERM信號,等待一段超時時間後(默認為10秒),再發送SIGKILL信號來終止容器:

[root@qll251 ~]# docker stop 021
021

3、強制終止容器

此外,還可以通過docker kill 直接發送SIGKILL信號強制終止容器。例如:

 [root@qll251 ~]# docker kill 021
021

4、刪除所有停止狀態的容器
[root@qll251 ~]# docker container prune
WARNING! This will remove all stopped containers.
Are you sure you want to continue? [y/N] y
Total reclaimed space: 1.1 GB
[root@qll251 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@qll251 ~]#

3、進入容器

當容器在後臺運行時,用戶是無法操作容器的。這個時候如果需要進入容器進行操作,推薦使用exec命令,語法格式如下:

docker exec 語法

例如,進入一個容器,並啟動一個bash:

[root@qll251 ~]# docker exec -it 021 /bin/bash
root@0215d56eaf7d:/#

通過指定-it參數保持標準輸入打開,並且分配一個偽終端。

進入容器後,我們可以進行操作,比如創建文件和列出當前運行進程:

操作容器4、刪除容器docker rm 語法

例如,刪除處於終止狀態的容器:

默認情況下,docker rm命令只能刪除處於終止或退出狀態的容器,並不能刪除處於運行狀態的容器。如果要直接刪除運行狀態的容器,可以添加-f實現:

實際上,指定-f 參數時,Docker先發送SIGKILL信號給容器,終止其中的應用,之後強行刪除。

更多關於容器刪除的方法,參考文末本章命令小結

5、導入導出容器

docker的一大優勢就是可移植性,容器可以隨意的進行導入導出操作。下面一起看下具體怎麼操作。

1、導出容器

將容器導出到一個文件中,可以使用docker export,命令格式如下:

docker export 語法

例如,將容器79b導出到/data/myubuntu.tar文件

[root@qll251 ~]# docker export 79b > /data/myubuntu.tar
[root@qll251 ~]# ls /data/
myubuntu.tar
[root@qll251 ~]#

注意:不管容器是否處於運行狀態,都可以將容器導出到一個文件。

2、導入容器

可以使用docker import從容器快照文件中再導入為鏡像,命令格式如下:

docker import 語法

例如,使用docker import將導出的myubuntu.tar文件導入為鏡像,並且重新指定標籤為qinlulu/ubuntu:v1,代碼如下:

還記得上一章節,我們講過docker load載入鏡像嗎?花1分鐘回顧下:

兩者區別

1、docker load的對象是鏡像文件

2、docker import的對象是容器快照

3、用戶既可以使用docker load導入鏡像文件到本地鏡像庫,也可以使用docker import導入容器快照到本地鏡像庫。

4、兩者的區別在於,使用容器快照文件導入的鏡像將丟失所有的歷史記錄和元數據信息(即僅保存容器當時的快照狀態),而鏡像文件導入的鏡像將保存完整記錄,體積也要大。

5、此外,從容器快照文件導入鏡像時,可重新指定標籤等元數據信息。

6、查看容器1、查看容器詳細信息docker inspect

上圖返回的是一個JSON格式,包含容器ID、創建時間、路徑、狀態、鏡像、配置等各項信息

2、查看容器內進程docker top

這個命令類似於Linux系統中的top命令,查看容器中運行的進程信息

3、實時監控容器資源數據

docker stats命令用來返回運行中的容器的實時數據流,包括CPU、內存、存儲、網絡等使用信息的實時統計信息。例如:

docker stats

默認情況下,stats命令會每隔1秒鐘刷新一次內容,直到按下 Ctrl + c。如果不想持續監控,可以通過添加--no-stream參數 只輸出當前的狀態。

7、容器與宿主機之間的數據拷貝

老規矩,我們先下看官方給出的docker cp用法。

docker cp 語法

可以看懂英文吧?我要囉嗦一句了,混跡技術圈,如果學不好英語,不說被淘汰,很可能將一直是「碼農」。當然,實在看不懂- -help 內容也不打緊,常用命令我都列舉出來啦,例如:

1、將宿主機上的/data目錄拷貝至容器dba277的/test123目錄:

如上圖所示,宿主機上/data目錄下所有文件已拷貝到容器中,並且目錄重命名為/test123

2、將容器dba277的/test123目錄拷貝到宿主機/tmp目錄下

本章命令小結1、新建容器

docker create -it ubuntu:18.04

2、啟動容器

docker start 「容器ID」

3、新建並啟動容器
1、以交互式模式新建容器
docker run -it ubuntu /bin/bash

2、以後臺方式運行容器
docker run -itd ubuntu /bin/bash

3、創建容器時指定主機名
docker run -itd --name test ubuntu:18.04 /bin/bash

4、容器運行5秒鐘後自動刪除容器
docker run -it --rm ubuntu:18.04 sleep 5

4、停止容器
1、暫停容器
docker pause '容器ID'

2、將容器恢復到運行狀態
docker unpause '容器ID'

3、終止容器
docker stop '容器ID'

4、強制終止容器
docker kill '容器ID'

5、進入容器

docker exec -it "容器ID" /bin/bash

6、刪除容器
1、刪除處於終止狀態的容器
docker rm '容器ID'

2、刪除運行中的容器(不建議操作)
docker rm -f '容器ID'

3、刪除所有停止狀態的容器
docker container prune
----其實也可以使用 docker rm `docker ps -aq`刪除所有未運行的容器
----舉一反三,那刪除本地鏡像庫的所有鏡像命令就是 docker rmi `docker images`呢(操作需謹慎!)

7、導入導出容器
1、導出容器
docker export 79b > myubuntu.tar

2、導入容器
docker import myubuntu.tar qinlulu/ubuntu:v1

8、查看容器
1、查看容器詳細信息
docker inspect '容器ID'

2、查看容器內進程
docker top '容器ID'

3、實時監控容器資源數據
docker stats '容器ID'

9、容器與宿主機之間的數據拷貝
1、將宿主機上的/data目錄拷貝至容器dba277的/test123目錄
docker cp /data dba277:/test123

2、將容器dba277的/test123目錄拷貝到宿主機/tmp目錄下
docker cp dba277:/test123 /tmp

結語

如果您看完本文後有所收穫, 還希望您隨手點個在看 、或者分享轉發。您的支持是我堅持分享的最大動力!


相關焦點

  • Docker系列教程02-操作Docker容器
    本章帶大家學習容器相關的重要操作,包括創建容器、啟動容器、終止容器、進入容器後執行操作、刪除容器及通過導入導出容器實現容器遷移、容器與宿主機之間數據拷貝等。進入容器後,我們可以進行操作,比如創建文件和列出當前運行進程:操作容器
  • 雲計算核心技術Docker教程:Docker容器使用
    >$ docker pull ubuntu以下命令使用 ubuntu 鏡像啟動一個容器,參數為以命令行模式進入該容器:$ docker run -it ubuntu /bin/bash -i: 交互式操作 。
  • 雲計算核心技術Docker教程:Docker鏡像使用
    當運行容器時,使用的鏡像如果在本地中不存在,docker 就會自動從 docker 鏡像倉庫中下載,默認是從 Docker Hub 公共鏡像源下載。我們可以使用 docker images 來列出本地主機上的鏡像。
  • 如何開始docker - docker架構及創建容器
    容器的創建過程: 鏡像倉庫 ->pull 鏡像到本地 -> 本地鏡像 -> run容器 from 鏡像 -> 創建容器並執行程序->程序退出->容器退出1、dockerd服務端(守護進程),dockerd是docker的守護進程。
  • Docker 容器的網絡
    :42:ac:11:00:02","IPv4Address": "172.17.0.2/16","IPv6Address": ""}},"Options": {"com.docker.network.bridge.default_bridge": "true","com.docker.network.bridge.enable_icc": "true","com.docker.network.bridge.enable_ip_masquerade": "true",
  • docker容器的啟動方式
    八、使用Docker  1、容器的基本操作    >啟動一次操作容器:docker run IMAGE_NAME [COMMAND] [ARG…]    例如由於剛裝上Docker,沒有任何鏡像,所以會先下載一個最新的ubuntu18.04的docker鏡像。一次操作容器在處理完操作後會立即關閉容器。
  • docker鏡像及容器命令
    鏡像歷史(了解鏡像的操作記錄)docker image history [OPTIONS] <IMAGEid>10.運行容器docker run <容器名>3. 查看容器列表docker ps -a4.
  • Docker系列教程01-使用Docker鏡像
    前言學習Docker,我們需要掌握它的三大核心概念:鏡像、容器和倉庫。今天先帶大家學習Docker鏡像相關的基礎知識。Docker Hub是由Docker公司負責維護的公共註冊中心,包含大量的容器鏡像,Docker工具默認從這個公共鏡像庫下載鏡像。
  • 上手 Docker 容器數據管理
    Docker 數據管理概覽好久不見,歡迎繼續閱讀「築夢師系列」 Docker 教程,前情回顧:在《一杯茶的時間,上手 Docker》[1]中,我們以「工作」和「做夢」來類比「應用開發」和「部署」,並通過一些小實驗讓你理解 Docker 是如何實現從「做夢」到「築夢」的跨越的,並且理解了鏡像和
  • 理解docker鏡像與容器
    docker有兩個重要的概念:鏡像,容器。首先在說一下docker鏡像的存儲位置/var/lib/docker/,在aufs/layer/下可以看到ubuntu15.04鏡像的分層,正是這四層組成了ubuntu15.04鏡像。
  • 攻擊和審計Docker容器01
    (VirtualBox或VMware都可以)帳號和登錄信息在描述信息中可用看到可用使用SSH軟體登錄到機器進行操作1、Docker基礎1.1 簡介Docker容器鏡像是一個輕量級,獨立的可執行軟體包,包含運行應用程式所需的一切:代碼,運行時,系統工具,系統庫和設置。容器鏡像在運行時成為容器,在Docker容器的情況下- 鏡像在Docker Engine上運行時成為容器。適用於基於Linux和Windows的應用程式,無論基礎架構如何,容器化軟體都將始終運行相同。容器將軟體與其環境隔離開來,並確保它可以統一工作,儘管開發和演示之間存在差異。
  • 雲計算核心技術Docker教程: Docker 安裝 Redis
    本文介紹通過docker安裝redis。1.我們用 docker search redis 命令來查看可用版本:3.查看本地鏡像,使用以下命令來查看是否已安裝了 redis:$ docker images
  • 雲計算核心技術Docker教程:rm/rmi命令詳解
    在docker客戶端命令行中我們可以使用rm刪除一個或多個容器,使用rmi刪除本地一個或多少鏡像。示例:docker rm :刪除一個或多個容器。語法:docker rm [OPTIONS] CONTAINER [CONTAINER...]OPTIONS說明:-f :通過 SIGKILL 信號強制刪除一個運行中的容器。-l :移除容器間的網絡連接,而非容器本身。-v :刪除與容器關聯的卷。
  • CoreOS實踐指南(七):Docker容器管理服務
    另一些則需要經過用戶定製,製作Docker鏡像文件一般可以通過Dockerfile或現有容器實例生成兩種方法。前者是比較推薦的做法,但需學習Dockerfile的寫法,已經超出了這個系列的範圍。後者相對簡單,但不利於後期的鏡像維護管理,這裡僅僅作為演示目的,因此採用這種方法。
  • 雲計算核心技術Docker教程:docker-compose up命令介紹
    在下載安裝Docker Compose後通過創建 Dockerfile 文件就可以使用Docker Compose命令構建和啟動應用了,本文主要介紹docker-compose up命令。命令格式:docker-compose up [options] [--scale SERVICE=NUM...] [SERVICE...]
  • Docker 添加容器到一個網絡
    通過網絡,在默認情況下為容器提供了完全獨立的環境。在你第一次運行一個容器的時候,你可以將容器添加到一個網絡中。例如,我們希望運行一個容器來運行 PostgreSQL 資料庫,並且傳遞 --net=my_bridge 標記來到你新網絡的連接中,可以運行下面的命令:$ docker run -d --net=my_bridge --name db training/postgres如果你檢查你的
  • 智匯華雲|Docker容器網絡解析
    作為目前最火的輕量級容器技術,Docker有很多令人稱道的功能,如Docker的鏡像管理。然而,Docker的建設也會碰到一系列的挑戰,根據調查報告指出,容器的網絡和安全實現成為容器雲平臺建設最主要的挑戰,當企業開始將重要的企業核心應用遷移至容器平臺,如果缺乏足夠的網絡和安全管控將會給業務上線帶來潛在威脅。
  • Docker問答錄系列——Docker引擎相關問題(一)
    本系列文章總結了一些初學Docker時比較常見問題的解決方法,解決思路大多遵循Docker官方的最佳實踐的原則而進行的解答。
  • Docker 容器資源管理,你真的學會了嗎?
    查看容器佔用資源docker statsDocker 提供了一個很方便的命令 docker stats,可供我們查看和統計容器所佔用的資源情況。我們仍然啟動一個 Redis 容器作為示例。MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDSc98c9831ee73 amazing_torvalds 0.08% 2.613MiB / 15.56GiB 0.02%
  • Docker集群管理之Docker Compose
    預告:9月1日晚上8點整,杜航將通過在線培訓的方式詳細探討《Docker集群管理三劍客》,報名地址請點擊這裡與容器技術同樣受到關注的微服務架構也在潛移默化的改變著應用的部署方式,其提倡將應用分割成一系列細小的服務,每個服務專注於單一業務功能,服務之間採用輕量級通信機制相互溝通。