Docker系列文章--操作容器

2021-03-02 51技術棧

容器是docker的核心概念,容器是獨立運行的一個或一組應用,以及他們的運行狀態環境。


Docker容器的狀態轉換和相關各場景命令

1、列出所有運行中的容器

    命令格式語法:docker ps [OPTIONS]

        參數選項:

             -a 列出所有運行中的容器

             -q 僅列出容器ID

             -s 顯示容器大小

             -n=1 列出最近創建的n個容器

[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES001bf3cf82d6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          80/tcp              web1[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES001bf3cf82d6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          80/tcp              web1[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker ps -sCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES               SIZE001bf3cf82d6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          80/tcp              web1                2B (virtual 109MB)[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker ps -q001bf3cf82d6

2、創建啟動容器

    2.1、啟動容器的兩種方式

        2.1.1、新建容器並啟動

這種啟動方式為基於鏡像新建一個容器並啟動,所需要的命令主要為docker run,相當於先執行docker create命令在執行docker start命令進行啟動容器

        2.1.2、終止狀態的容器並啟動

 這一種啟動方式為容器在停止狀態(stopped)的容器使用docker start命令進行重新啟動

    2.2、新建容器

2.2.1、新建並啟動容器

    新建容器並啟動容器的命令主要為docker run命令

    docker run [OPTIONS] IMAGE [COMMAND][ARG...]

               選項:

                 -i選項讓容器的標準輸入保持打開,以交互模式運行容器,通常與-t同時使用

                 -t 選項讓Docker分配一個偽終端(pseudo-tty)並綁定到容器的標準輸入上通常與-i同時使用

                 -d或者-d=true選項則是讓docker容器以守護狀態在後臺運行而不是直接把執行命令的結果輸出在當前的宿主機下並返回容器ID

                 --namenginx 指定容器名稱,如果沒有指定則會自動生成一個隨機字符串UUID

                 -hhostname  指定容器的hostname

                 -P(大P)映射到主機的隨機埠

                 -p(小p) 將容器的埠映射到主機埠 如: –p 80:80將容器的80埠映射到主機80埠

                 -v  將主機的目錄映射到容器的目錄 如:-v/data:/data將主機的data目錄映射到容器的data目錄

                 --dns強制容器使用dns伺服器,例如docker –d --dns 8.8.8.8

       2.2.2、創建並啟動容器時的執行過程

當利用docker run來創建並啟動容器時,docker在後臺運行的標準操作包括:

        1、  檢查本地是否存在指定的鏡像,不存在就從公有倉庫下載

        2、  利用鏡像創建並啟動一個鏡像

        3、  分配一個文件系統,並在只讀的鏡像層外面掛載一層可讀寫層

        4、  從宿主機配置的網橋接口中橋接一個虛擬接口到容器中

        5、  從地址池配置一個ip地址給容器

        6、  執行用戶指定的應用程式

        7、  執行完畢後容器被終止

    2.3、運行容器

        2.3.1、新建一個容器並啟動,允許用戶進行交互

        

[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker run --name bus -it busybox:latestUnable to find image 'busybox:latest' locallylatest: Pulling from library/busybox697743189b6d: Pull complete Digest: sha256:061ca9704a714ee3e8b80523ec720c64f6209ad3f97c0ff7cb9ec7d19f15149fStatus: Downloaded newer image for busybox:latest/ # lsbin   dev   etc   home  proc  root  sys   tmp   usr   var/ # ls /var/spool  www/ # ls /var/www// # 

另啟動一個ssh工具使用docker ps 命令查看剛新建的busybox容器是否在運行[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMESc10b43fc1e90        busybox:latest      "sh"                     5 minutes ago       Up 5 minutes                            bus001bf3cf82d6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          80/tcp              web1

使用exit退出容器

/ / [root@iz2ze3umvnbux0g6f9b9kuz ~][root@iz2ze3umvnbux0g6f9b9kuz ~][root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES001bf3cf82d6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours          80/tcp              web1[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMESc10b43fc1e90        busybox:latest      "sh"                     8 minutes ago       Exited (0) 9 seconds ago                       bus835a0eeb5159        mysql               "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                         mysql001bf3cf82d6        nginx               "nginx -g 'daemon of…"   2 hours ago         Up 2 hours                 80/tcp              web1

對於創建的bash容器,當使用命令exit退出容器時,該容器就自動處於終止狀態了,這是因為對於docker容器來說,當運行的應用退出後,容器也就沒有繼續運行的必要了。(如上)

2.3.2、創建nginx容器並在後臺運行

    在後臺運行容器時使用docker rum -d選項

    

[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker run --name Nginx_Web -d nginx4bce4a95adbb2417045423a485fa752705ae9e62ce19a7b2efb6782673b0c584[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   10 seconds ago      Up 9 seconds        80/tcp              Nginx_Web[root@iz2ze3umvnbux0g6f9b9kuz ~]# 

使用docker inspect 容器名稱命令進行查看當前容器的IP位址

[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker inspect Nginx_Web[    {        "Id": "4bce4a95adbb2417045423a485fa752705ae9e62ce19a7b2efb6782673b0c584",        "Created": "2019-03-07T08:50:41.630306814Z",        "Path": "nginx",       。。。。。。。略       。。。。。。。略                    " IPAddress": "172.18.0.2",                    "IPPrefixLen": 16,                    "IPv6Gateway": "",                    "GlobalIPv6Address": "",                    "GlobalIPv6PrefixLen": 0,                    "MacAddress": "02:42:ac:12:00:02",                    "DriverOpts": null                }            }        }    }]

其中IPAddress": "172.18.0.2"為當前容器的IP位址,使用curl訪問次ip地址進行訪問。

[root@iz2ze3umvnbux0g6f9b9kuz ~]# curl 172.18.0.2<!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>    body {        width: 35em;        margin: 0 auto;        font-family: Tahoma, Verdana, Arial, sans-serif;    }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p>
<p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p></body></html>[root@iz2ze3umvnbux0g6f9b9kuz ~]#

由此可見,此容器是可以被訪問的。

2.4、暫停終止容器

    停止上面創建的nginx容器

    使用命令docker stop 容器名稱

    

[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   11 minutes ago      Up 11 minutes       80/tcp              Nginx_Web[root@iz2ze3umvnbux0g6f9b9kuz ~]Nginx_Web[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   12 minutes ago      Exited (0) 16 seconds ago                       Nginx_Webc10b43fc1e90        busybox:latest      "sh"                     27 minutes ago      Exited (0) 19 minutes ago                       bus835a0eeb5159        mysql               "docker-entrypoint.s…"   2 hours ago         Exited (1) 2 hours ago                          mysql

由返回結果可看status狀態已經為exited,所以nginx容器已經停止。

2.5、重啟暫停的容器

    使用docker restart 命令會將一個運行狀態為終止的容器進行重新啟動。

[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker restart Nginx_WebNginx_Web[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker ps CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   15 minutes ago      Up 4 seconds        80/tcp              Nginx_Web

由上面的status狀態為up,可見已經啟動成功。

2.6、刪除容器

可以使用docker rm命令刪除處於終止狀態的容器,

其格式為docker rm [OPTIONS] CONTAINER [CONTAINER...]

OPTIONS選項:

    -f 強行終止並刪除一個運行中的容器

    -l 刪除容器的連接,但保留容器

    -v刪除容器掛載的數據卷

    

刪除容器中的mysql容器[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   18 minutes ago      Up 3 minutes                80/tcp              Nginx_Webc10b43fc1e90        busybox:latest      "sh"                     33 minutes ago      Exited (0) 25 minutes ago                       bus835a0eeb5159        mysql               "docker-entrypoint.s…"   3 hours ago         Exited (1) 3 hours ago                          mysql[root@iz2ze3umvnbux0g6f9b9kuz ~]mysql[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   21 minutes ago      Up 6 minutes                80/tcp              Nginx_Webc10b43fc1e90        busybox:latest      "sh"                     36 minutes ago      Exited (0) 28 minutes ago                       bus[root@iz2ze3umvnbux0g6f9b9kuz ~]

由結果可看mysql容器已經被刪除。

2.7、獲取容器日誌

    使用命令docker logs 容器名稱進行獲取容器日誌

    

[root@iz2ze3umvnbux0g6f9b9kuz ~]# docker logs Nginx_Web172.18.0.1 - - [07/Mar/2019:08:57:30 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"[root@iz2ze3umvnbux0g6f9b9kuz ~]# 

2.8、停止狀態下啟動容器

    

這一種啟動方式為容器在停止狀態(stopped)的容器使用docker start命令進行重新啟動

        命令格式:

            dockerstart [OPTIONS] CONTAINER [CONTAINER...]

                 Options:

                     -a, --attach      Attach STDOUT/STDERR and forwardsignals

                    --detach-keysstring   Override the key sequence fordetaching a container

                     -i, --interactive       進入交互接口並附加到終端上

    

[root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   41 minutes ago      Up 26 minutes                  80/tcp              Nginx_Webc10b43fc1e90        busybox:latest      "sh"                     About an hour ago   Exited (0) About an hour ago                       bus[root@iz2ze3umvnbux0g6f9b9kuz ~]/ bin   dev   etc   home  proc  root  sys   tmp   usr   var/ spool  www/ [root@iz2ze3umvnbux0g6f9b9kuz ~]CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES4bce4a95adbb        nginx               "nginx -g 'daemon of…"   42 minutes ago      Up 27 minutes       80/tcp              Nginx_Webc10b43fc1e90        busybox:latest      "sh"                     About an hour ago   Up 41 seconds                           bus

2.9、進入容器

    

在使用-d參數時,容器啟動後會進入後臺,用戶無法查看到容器中的信息,有些時候如果需要進入容器進行操作時,可以進入到容器進行操作,有很多方法包括docker attach命令,docker exec命令以及nsenter工具等。

- MORE | 往期Docker系列精彩文章 -

Docker系列文章--基本概念

Docker系列文章--什麼是Docker

Docker系列文章--幾張圖幫你理解 docker 基本原理

Docker系列文章--安裝Docker CE

Docker系列文章--配置加速器

Docker系列文章--鏡像的使用(一)

Docker系列文章--鏡像的使用(二)

相關焦點

  • docker容器操作命令:目錄掛載與安裝MySQL容器詳解
    今天為大家分享的主題:docker容器操作命令:目錄掛載(卷Volume)、使用Docker安裝MySQL容器,歡迎大家一起來閱讀哦!
  • 自動化集成:Docker容器入門簡介
    前言:該系列文章,圍繞持續集成:Jenkins+Docker+K8S相關組件,實現自動化管理源碼編譯、打包、鏡像構建、部署等操作;本篇文章主要描述
  • 使用Docker安裝Tomcat、Nginx、Redis容器
    今天本篇文章為大家分享Docker安裝Tomcat容器、Nginx容器、Redis容器的系列課程,歡迎大家一起觀看閱讀哦!使用Do
  • 怎樣在Python中操作Docker容器?
    sidomo的Github倉庫地址:https://github.com/deepgram/sidomo確保你的容器正常安裝,並且運行了一個容器daemon。如果你不確定是否滿足條件,可以運行 docker ps命令, 如果你得到的輸出信息為 "CONTAINER ID ...",那就沒問題 。
  • Docker容器互聯方法
    雖然有許多方法可以連接容器們,可是我將並不會試著去將其全部討論在內。但是在這一系列的方法中,我們將看看那些常用的做法。雖然看起來是很淺顯,但是這對於與Docker成天打交道的朋友來說,理解這些技術及底層的設計理念就顯得非常地重要了。
  • Docker容器進階(中)
    docker.io/redis "dockerentrypoint.sh" 4 seconds ago Up 3 seconds 0.0.0.0:32768->6379/tcp myredis從上⾯的結果中可以看出,本地主機的32768端⼝被映射到了redis容器的6379端⼝上,也就是說訪問本機的32768端⼝即可訪問容器內redis端⼝。
  • Docker基礎:查找鏡像和運行容器
    如果你從未聽說過Docker,這篇文章(https://www.docker.com/what-docker)會幫助你熟悉Docker。如果你了解Docker的話我們從一些基本的功能說起:鏡像和容器以及如何使用它們解決真實場景中的問題,比如想要學習一門很棒的語言又不希望花太多時間在安裝語言和環境搭建上。
  • 【擁抱容器】:Docker 與 K8s 的入門課實戰系列課程總結
    正是大家的支持與積極反饋才能讓容器系列活動圓滿舉辦成功!不管你是想要複習,還是因故未能參加,還是中途缺席課程的,都可以戳以往的文章回顧學習哦~:👇👇👇【活動回顧】容器實戰:Docker 基礎入門講座實錄 | 擁抱容器:Docker 集群入門與實戰(上)講座實錄 | 擁抱容器:Docker 集群入門與實戰(下)【活動回顧】擁抱容器:Python web開發及其與
  • Docker 容器化部署技術
    :Python數據分析實例本文主要介紹Docker容器技術概述、Docker的安裝及相關常見操作命令。虛擬機是作業系統級別的隔離,容器是進程級別的隔離。Docker是開源的應用容器引擎,開發者可以將應用及其依賴的軟體一起打包到容器中,實現一次部署到處運行的效果。當應用切換伺服器時,再次部署相當於複製一個文件的操作,節約大量的安裝部署時間。
  • Docker與PostgreSQL 11.5系列文章(一)Docker的安裝
    另外,我們一直擔心,容器影響資料庫的性能,根據近些年的親身實踐,容器對資料庫性能的影響很小,也不會影響資料庫的並行性。因此,想寫一系列文章,簡單介紹PostgreSQL在容器中的實踐。Docker基本概念什麼是DockerDocker 是一個軟體平臺,讓您可以快速構建、測試和部署應用程式。
  • docker容器由淺入深解析
    命令介紹以上的一個操作過程基本涵蓋了常用的docker的命令行,這裡在附送一個常用命令行分類命令示例說明Docker環境信息info、version容器生命周期管理create、exec、kill、pause、restart、rm、run、 start、stop、unpause鏡像倉庫命令login、logout
  • Docker容器的管理
    下面詳細的演示這部分的應用:#運行docker的鏡像信息[root@wuyaShare ~]# docker run -it centos:7.8.2003 bash[root@b8c896d0a0d6 /]# dateWed Oct 20 08:42:46 UTC 2021[root@b8c896d0a0d6 /]# exitexit
  • Docker安裝基本命令操作,帶你了解鏡像和容器的概念!
    但是,這種方式安裝可能並不是最新版的docker版本(存在更新不及時的問題)[root@VM-0-3-centos /]# sudo yum install docker② 通過yum從阿里雲鏡像中進行安裝,可以下載安裝最新版本,運行三條安裝命令(在這裡就沒有把安裝輸出信息列印出來了,怕篇幅太長,說我水文章~)
  • Docker系列教程:如何在 Docker 容器中運行 Nginx
    在您的 docker 主機上,在終端上運行以下 Docker pull 命令以從 Docker hub下載 Nginx最新鏡像。你有一個 NGINX 的工作實例,通過 Docker 容器。列出 Docker 容器要列出所有正在運行的Docker 容器,請執行以下命令:linuxmi@linuxmi:~/www.linuxmi.com$ sudo docker container ls -all
  • docker 容器安全問題實驗
    年底了,有點小忙,本周源碼解析文章延後一下。最近log4j的漏洞很紅火,跟風發一篇docker的安全問題文章。容器提權操作了一個沒有權限的文檔。如果綁定了root的目錄,則就可以對root目錄進行操作。
  • 什麼,容器太多操作不過來?我選擇Docker Compose梭哈
    3、實戰3.1、準備在如下目錄裡創建如下文件,並寫上Hello Volumn~/home/main/docker/webapps/volumn-test/index.html3.2、操作很簡單,按照上面的語法來就成了,如下就是將/home/main/docker/webapps下的目錄掛載到容器內部/usr/local/tomcat/webapps的目錄下
  • Docker容器入門指北
    ; docker images運行容器所使用的鏡像可以被修改從而生成新的鏡像,新的鏡像可以上傳或者說push到Docker hub上用來分享。使用下面的指令可以使用Nginx鏡像來運行容器,-i和-t選項可以賦予你以交互式shell形式進入容器的權限:> docker run -it nginx然後你的shell提示符會反映出你現在正在容器中,它的形式是這樣的:root@
  • 【Docker系列】docker-compose一步幫你搞定n個容器
    三、docker-compose.yml的demodocker-compose是docker提供的一個命令行工具,用來定義和運行由多個容器組成的應用。
  • 快速掌握docker-compose容器管理快速上手
    前面我們使用 Docker 的時候,定義 Dockerfile 文件,然後使用 docker build、docker run 等命令操作容器。sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose4.查看docker compose 版本: 到這裡,docker compose 算是已經安裝完成了,接下來可以直接用docker-compose 來管理docker 容器了。
  • Docker 系列教程:輕鬆在 Docker 容器中運行 MySQL 圖文指南
    事實上,MySQL 是與 Docker 容器一起使用的最流行的資料庫之一。要將 MySQL 創建為 Docker 容器,主機應安裝 Docker。如果你沒有安裝它,這裡有一個如何在 Ubuntu 上安裝 Docker 的分步指南。(見:https://www.linuxmi.com/ubuntu-docker-zhinan.html )1.