1. 程式人生 > 實用技巧 >docker 容器相關命令使用

docker 容器相關命令使用

一,容器概述

​容器時指docker對外提供服務的一個例項,容器要想啟動必須滿足至少有一個程序執行在前臺(容器內部的前臺)。

二、啟動容器

格式:
	docker run [引數] [映象名稱|ID] [指定的容器執行命令(如果不設定則使用預設命令)]

流程:
	1、執行一個docker run
	2、檢查本地是否存在所需映象,如果沒有則去遠端映象倉庫下載。
	3、按照映象和引數啟動一個容器

示例:
[root@docker ~]# docker run -d nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
Digest: sha256:4cf620a5c81390ee209398ecc18e5fb9dd0f5155cd82adcbae532fec94006fb9
Status: Downloaded newer image for nginx:latest
22b601ab6f9f7010221440f1158e0ece348768e4df1b133690f1c503ed012e4d
[root@docker ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS     NAMES
22b601ab6f9f   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp    interesting_banach

引數:
-d : 只以守護程序的模式執行一個容器
-i : 開啟標準輸出
-t :  建立一個視窗(偽終端)
-p(小寫的p字母) : 指定對映埠
	docker run -d -p 30080:80 nginx;docker ps
-P(大寫的P字母) : 隨機對映埠
	docker run -d -P nginx; docker ps
-v : 指定掛載卷(將本機的目錄對映到容器內部)
	作用:
		1、將本機目錄"軟連結"容器內部
		2、可以持久化容器內部資料
	示例:
		docker run -d -P -v /root/test:/usr/share/nginx/html nginx:latest

--name : 指定容器的名稱
	作用:
		1、指定容器名稱
		2、將名稱解析到docker dns上
	示例:
		docker run -d --name nginx nginx

--link : 將一個容器的網路連線到另外一個容器
	格式:
		--link 容器名稱:連線別名
	
	示例:
		docker run -d --name test_nginx  nginx
		docker run -it --link test_nginx:test_nginx centos

--rm : 當容器的生命週期結束時,自動刪除容器
	示例:
		docker run -d --rm centos sleep 10
	
--network : 連線網橋(同一個網橋內的所有容器網路互通)
	示例:
		docker network create chenyang
		docker run -d --network chenyang nginx

三、停止容器

停止容器,並沒有刪除容器。
格式:
	docker stop [容器ID及名稱]
示例:
	docker stop agitated_newton
	[root@docker ~/test]# docker ps -a | grep agitated_newton
d4b2a919cb7f   nginx          "/docker-entrypoint.…"   21 minutes ago      Exited (0) 28 seconds ago                              agitated_newton

四、啟動容器

格式:
	docker start [容器ID及名稱]
示例:
	[root@docker ~/test]# docker start agitated_newton
    agitated_newton
    [root@docker ~/test]# docker ps -a | grep agitated_newton
    d4b2a919cb7f   nginx          "/docker-entrypoint.…"   23 minutes ago      Up 2 seconds                   80/tcp                  agitated_newton

五、刪除容器

格式:
	docker rm [容器ID及名稱]
示例:
	[root@docker ~/test]# docker rm laughing_hopper
    laughing_hopper
引數:
-f : 強制刪除

六、查詢容器

docker ps 預設查詢正在執行的容器

格式:
	docker ps [引數]

示例:
[root@docker ~/test]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED             STATUS             PORTS                   NAMES
d4b2a919cb7f   nginx          "/docker-entrypoint.…"   26 minutes ago      Up 3 minutes       80/tcp                  agitated_newton

引數:
-a : 查詢本機上所有的容器(包括已經停止了的)
-q : 只顯示容器ID

列表引數:
    CONTAINER ID:容器ID
    IMAGE       :映象ID
    COMMAND     :啟動容器執行的命令      
    CREATED     :容器建立的時間
    STATUS      :狀態(Up:啟動狀態  Exitd:停止狀態)
    PORTS       :埠對映
    NAMES		:容器名稱

七、檢視容器的詳細資訊

格式:
	docker inspect [容器ID或名稱]
示例:
[root@docker ~/test]# docker inspect 22b601ab6f9f
[
    {
        "Id": "22b601ab6f9f7010221440f1158e0ece348768e4df1b133690f1c503ed012e4d",
        "Created": "2021-01-12T09:29:07.881750107Z",
        "Path": "/docker-entrypoint.sh",
        "Args": [
            "nginx",
            "-g",
            "daemon off;"
        ],
...

引數:
-f : 指定使用golang語言模板
	示例:
	[root@docker ~/test]# docker inspect -f '{{ .State.Status }}' d4b2a919cb7f
    running

八、複製命令

格式:
	第一種:複製到容器內
		docker cp [宿主主機的路徑] [容器ID]:[容器內的路徑]
		
	第二種:複製到容器外
		docker cp [容器ID]:[容器內的路徑] [宿主主機的路徑]

示例:
	[root@docker ~]# docker cp test/demo.html f50bb42dd583:/usr/share/nginx/html
    [root@docker ~]# docker cp f50bb42dd583:/usr/share/nginx/html/50x.html .
    [root@docker ~]# ll
    total 3284696
    -rw-r--r--  1 root root        494 Dec 15 21:59 50x.html

九、進入容器

exec(推薦)
	解釋:
		exec不是進入容器的命令,而是碰巧有這種功能。其功能是在容器外向容器內執行一條命令的命令。
	格式:
		docker exec [引數] [容器的ID或名稱] [命令]
	示例:
		[root@docker ~]# docker exec -i -t ead6cdefcd01 bash

attach
	解釋:
		進入容器。通過一個管道連線到容器的頂級程序。
		缺點:當attach退出是,順帶把頂級程序也帶走了。
	格式:
		docker attach [容器ID或名稱]
	示例:
		[root@docker ~]# docker attach mystifying_kirch

nsenter
	解釋:建立兩個程序之間的互通管道
	格式:
		nsenter --target $( docker inspect -f {{.State.Pid}} nginxv1 ) --mount --uts --ipc --net --pid
		

ssh
	解釋:通過ssh隧道連線
	格式:
		ssh [email protected]