docker多個容器映射一個端口_【Docker】命令使用大全


 

 

簡述
容器的出現是為了解決環境配置的問題,虛擬機是一種解決方案,但是也有一些缺點,再后來出現了 Linux 容器,Docker 屬於 Linux 容器的一種封裝,提供簡單易用的容器使用接口。它是目前最流行的 Linux 容器解決方案。

Docker 的主要用途
提供一次性的環境。比如,本地測試他人的軟件、持續集成的時候提供單元測試和構建的環境。
提供彈性的雲服務。因為 Docker 容器可以隨開隨關,很適合動態擴容和縮容。
組建微服務架構。通過多個容器,一台機器可以跑多個服務,因此在本機就可以模擬出微服務架構。
基本概念
引用自:https://www.zhihu.com/topic/19950993/top-answers

鏡像(Image):類似於虛擬機中的鏡像,是一個包含有文件系統的面向 Docker 引擎的只讀模板。任何應用程序運行都需要環境,而鏡像就是用來提供這種運行環境的。例如一個 Ubuntu 鏡像就是一個包含 Ubuntu 操作系統環境的模板,同理在該鏡像上裝上 Apache 軟件,就可以稱為 Apache 鏡像。
容器(Container):類似於一個輕量級的沙盒,可以將其看作一個極簡的 Linux 系統環境(包括 root 權限、進程空間、用戶空間和網絡空間等),以及運行在其中的應用程序。Docker 引擎利用容器來運行、隔離各個應用。容器是鏡像創建的應用實例,可以創建、啟動、停止、刪除容器,各個容器之間是是相互隔離的,互不影響。注意:鏡像本身是只讀的,容器從鏡像啟動時,Docker 在鏡像的上層創建一個可寫層,鏡像本身不變。
倉庫(Repository):類似於代碼倉庫,這里是鏡像倉庫,是 Docker 用來集中存放鏡像文件的地方。注意與注冊服務器(Registry)的區別:注冊服務器是存放倉庫的地方,一般會有多個倉庫;而倉庫是存放鏡像的地方,一般每個倉庫存放一類鏡像,每個鏡像利用 tag 進行區分,比如 Ubuntu 倉庫存放有多個版本(12.04、14.04 等)的 Ubuntu 鏡像。
以下介紹 Docker 基本的命令及其使用

容器周期管理
run
docker run:創建一個新的容器並運行一個命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS 說明:

-a stdin: 指定標准輸入輸出內容類型,可選 STDIN/STDOUT/STDERR 三項;
-d: 后台運行容器,並返回容器 ID;
-i: 以交互模式運行容器,通常與 -t 同時使用;
-P: 隨機端口映射,容器內部端口隨機映射到主機的端口
-p: 指定端口映射,格式為:主機 (宿主) 端口:容器端口
-t: 為容器重新分配一個偽輸入終端,通常與 -i 同時使用;
--name="nginx-lb": 為容器指定一個名稱;
--dns 8.8.8.8: 指定容器使用的 DNS 服務器,默認和宿主一致;
--dns-search example.com: 指定容器 DNS 搜索域名,默認和宿主一致;
-h "mars": 指定容器的 hostname;
-e username="ritchie": 設置環境變量;
--env-file=[]: 從指定文件讀入環境變量;
--cpuset="0-2" or --cpuset="0,1,2": 綁定容器到指定 CPU 運行;
-m : 設置容器使用內存最大值;
--net="bridge": 指定容器的網絡連接類型,支持 bridge/host/none/container: 四種類型;
--link=[]: 添加鏈接到另一個容器;
--expose=[]: 開放一個端口或一組端口;
--volume , -v 綁定一個卷
使用 docker 鏡像 nginx:latest 以后台模式啟動一個容器,並將容器命名為 mynginx。

docker run --name mynginx -d nginx:latest
使用鏡像 nginx:latest 以后台模式啟動一個容器,並將容器的 80 端口映射到主機隨機端口。

docker run -P -d nginx:latest
使用鏡像 nginx:latest,以后台模式啟動一個容器,將容器的 80 端口映射到主機的 80 端口,主機的目錄 /data 映射到容器的 /data。

docker run -p 80:80 -v /data:/data -d nginx:latest
綁定容器的 8080 端口,並將其映射到本地主機 127.0.0.1 的 80 端口上。

docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用鏡像 nginx:latest 以交互模式啟動一個容器,在容器內執行 /bin/bash 命令。

docker run -it nginx:latest /bin/bash
start/stop/restart
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker restart [OPTIONS] CONTAINER [CONTAINER...]
啟動已被停止的容器 myrunoob

docker start myrunoob
停止運行中的容器 myrunoob

docker stop myrunoob
重啟容器 myrunoob

docker restart myrunoob
kill
docker kill : 殺掉一個運行中的容器。

docker kill [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS 說明:

-s : 向容器發送一個信號
殺掉運行中的容器 mynginx

docker kill -s KILL mynginx
rm
docker rm:刪除一個或多個容器。

docker rm [OPTIONS] CONTAINER [CONTAINER...]
OPTIONS 說明:

-f : 通過 SIGKILL 信號強制刪除一個運行中的容器。
-l : 移除容器間的網絡連接,而非容器本身。
-v : 刪除與容器關聯的卷。
強制刪除容器 db01、db02:

docker rm -f db01 db02
移除容器 nginx01 對容器 db01 的連接,連接名 db:

docker rm -l db
刪除容器 nginx01, 並刪除容器掛載的數據卷:

docker rm -v nginx01
刪除所有已經停止的容器:

docker rm $(docker ps -a -q)
pause/unpause
docker pause : 暫停容器中所有的進程。docker unpause : 恢復容器中所有的進程。

docker pause [OPTIONS] CONTAINER [CONTAINER...]
docker unpause [OPTIONS] CONTAINER [CONTAINER...]
暫停數據庫容器 db01 提供服務。

docker pause db01
恢復數據庫容器 db01 提供服務。

docker unpause db01
create
docker create:創建一個新的容器但不啟動它
用法同 docker run

docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
語法同 docker run

使用 docker 鏡像 nginx:latest 創建一個容器,並將容器命名為 myrunoob

docker create --name myrunoob nginx:latest
# 輸出
09b93464c2f75b7b69f83d56a9cfc23ceb50a48a9db7652ee4c27e3e2cb1961f
exec
docker exec :在運行的容器中執行命令

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
OPTIONS 說明:

-d : 分離模式:在后台運行
-i : 即使沒有附加也保持 STDIN 打開
-t : 分配一個偽終端
在容器 mynginx 中以交互模式執行容器內 /root/runoob.sh 腳本:

docker exec -it mynginx /bin/sh /root/runoob.sh
在容器 mynginx 中開啟一個交互模式的終端:

docker exec -i -t mynginx /bin/bash
root@b1a0703e41e7:/#
也可以通過 docker ps -a 命令查看已經在運行的容器,然后使用容器 ID 進入容器。
查看已經在運行的容器 ID:

docker ps -a
# 輸出
...
9df70f9a0714 openjdk "/usercode/script.sh…"
...
第一列的 9df70f9a0714 就是容器 ID。
通過 exec 命令對指定的容器執行 bash:

docker exec -it 9df70f9a0714 /bin/bash
容器操作
ps
docker ps : 列出容器

docker ps [OPTIONS]
OPTIONS 說明:

-a : 顯示所有的容器,包括未運行的。
-f : 根據條件過濾顯示的內容。
--format : 指定返回值的模板文件。
-l : 顯示最近創建的容器。
-n : 列出最近創建的 n 個容器。
--no-trunc : 不截斷輸出。
-q : 靜默模式,只顯示容器編號。
-s : 顯示總的文件大小。
列出所有在運行的容器信息。

docker ps
# 輸出
CONTAINER ID IMAGE COMMAND ... PORTS NAMES
09b93464c2f7 nginx:latest "nginx -g 'daemon off" ... 80/tcp, 443/tcp myrunoob
96f7f14e99ab mysql:5.6 "docker-entrypoint.sh" ... 0.0.0.0:3306->3306/tcp mymysql

inspect
docker inspect : 獲取容器 / 鏡像的元數據。

docker inspect [OPTIONS] NAME|ID [NAME|ID...]
OPTIONS 說明:

-f : 指定返回值的模板文件。
-s : 顯示總的文件大小。
--type : 為指定類型返回 JSON。
top
docker top : 查看容器中運行的進程信息,支持 ps 命令參數。

只有在運行中的容器才能使用這個命令

docker top [OPTIONS] CONTAINER [ps OPTIONS]
容器運行時不一定有 /bin/bash 終端來交互執行 top 命令,而且容器還不一定有 top 命令,可以使用 docker top 來實現查看 container 中正在運行的進程。

attach
docker attach : 連接到正在運行中的容器。

events
docker events : 從服務器獲取實時事件

docker events [OPTIONS]
OPTIONS 說明:

-f :根據條件過濾事件;
--since :從指定的時間戳后顯示所有事件;
--until :流水時間顯示到指定的時間為止;
顯示 docker 鏡像為 python 2016 年 7 月 1 日后的相關事件。

docker events -f "image"="python" --since="1467302400"
1467302400 代表時間戳的意思
在線時間戳轉換工具:https://tool.lu/timestamp/

logs
docker logs : 獲取容器的日志

docker logs [OPTIONS] CONTAINER
OPTIONS 說明:

**-f : ** 跟蹤日志輸出
--since : 顯示某個開始時間的所有日志
**-t : ** 顯示時間戳
--tail : 僅列出最新 N 條容器日志

wait
docker wait : 阻塞運行直到容器停止,然后打印出它的退出代碼。

docker wait [OPTIONS] CONTAINER [CONTAINER...]
export
docker export : 將文件系統作為一個 tar 歸檔文件導出到 STDOUT。

docker export [OPTIONS] CONTAINER
OPTIONS 說明:

-o : 將輸入內容寫到文件。
將 id 為 a404c6c174a2 的容器按日期保存為 tar 文件。

docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
port
docker port : 列出指定的容器的端口映射,或者查找將 PRIVATE_PORT NAT 到面向公眾的端口。

docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]
容器 rootfs 命令
commit
docker commit : 從容器創建一個新的鏡像。

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS 說明:

-a : 提交的鏡像作者;
-c : 使用 Dockerfile 指令來創建鏡像;
-m : 提交時的說明文字;
-p : 在 commit 時,將容器暫停。
將容器 d1891e47245f 保存為新的鏡像,並添加提交人信息和說明信息。

docker commit -a "Leong" -m "python opencv" d1891e47245f leong/python_opencv:v1

 

cp
docker cp : 用於容器與主機之間的數據拷貝。

docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
OPTIONS 說明:

-L : 保持源目標中的鏈接
docker cp /www/runoob 96f7f14e99ab:/www/ # 將主機 /www/runoob 目錄拷貝到容器 96f7f14e99ab 的 /www 目錄下。

docker cp /www/runoob 96f7f14e99ab:/www # 將主機 /www/runoob 目錄拷貝到容器 96f7f14e99ab 中,目錄重命名為 www。

docker cp 96f7f14e99ab:/www /tmp/ # 將容器 96f7f14e99ab 的 /www 目錄拷貝到主機的 /tmp 目錄中。
diff
**docker diff : ** 檢查容器里文件結構的更改。

docker diff [OPTIONS] CONTAINER
查看容器 id 前綴為 d189 的容器的文件結構更改。

docker diff d189

最前面的一個字符含義如下:

A - Add
D - Delete
C - Change
鏡像倉庫
login/logout
docker login : 登陸到一個 Docker 鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hubdocker logout : 登出一個 Docker 鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub

docker login [OPTIONS] [SERVER]
docker logout [OPTIONS] [SERVER]
OPTIONS 說明:

-u : 登陸的用戶名
-p : 登陸的密碼
pull
**docker pull : ** 從鏡像倉庫中拉取或者更新指定鏡像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

OPTIONS 說明:

-a : 拉取所有 tagged 鏡像
--disable-content-trust : 忽略鏡像的校驗,默認開啟
從 Docker Hub 下載 REPOSITORY 為 java 的所有鏡像。

docker pull -a java

push
docker push : 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫

docker push [OPTIONS] NAME[:TAG]

OPTIONS 說明:

--disable-content-trust : 忽略鏡像的校驗,默認開啟
上傳本地鏡像 myapache:v1 到鏡像倉庫中。

docker push myapache:v1

search
docker search : 從 Docker Hub 查找鏡像

docker search [OPTIONS] TERM

OPTIONS 說明:

--automated 只列出 automated build 類型的鏡像;
--no-trunc 顯示完整的鏡像描述;
-s 列出收藏數不小於指定值的鏡像。
從 Docker Hub 查找所有鏡像名包含 anaconda,並且收藏數大於 10 的鏡像

docker search -s 10 anaconda

NAME 鏡像倉庫源的名稱
DESCRIPTION 鏡像的描述
OFFICIAL 是否 docker 官方發布
stars 類似 Github 里面的 star,表示點贊、喜歡的意思。
AUTOMATED 自動構建。
本地鏡像管理
images
docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS 說明:

-a : 列出本地所有的鏡像(含中間映像層,默認情況下,過濾掉中間映像層);
--digests : 顯示鏡像的摘要信息;
-f : 顯示滿足條件的鏡像;
--format : 指定返回值的模板文件;
--no-trunc : 顯示完整的鏡像信息;
-q : 只顯示鏡像 ID。
rmi/prune
docker rmi : 刪除本地一個或多少鏡像。

docker rmi [OPTIONS] IMAGE [IMAGE...]

OPTIONS 說明:

-f : 強制刪除;
--no-prune : 不移除該鏡像的過程鏡像,默認移除;
prune 命令用來刪除不再使用的 docker 對象。
刪除所有未被 tag 標記和未被容器使用的鏡像:

docker image prune
# 輸出
WARNING! This will remove all dangling images.
Are you sure you want to continue? [y/N] y

刪除所有未被容器使用的鏡像:

docker image prune -a

刪除所有停止運行的容器:

docker container prune

刪除所有未被掛載的卷:

docker volume prune

刪除所有網絡:

docker network prune

刪除 docker 所有資源:

docker system prune

tag
**docker tag : ** 標記本地鏡像,將其歸入某一倉庫。

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

將鏡像 ubuntu:15.10 標記為 runoob/ubuntu:v3 鏡像。

docker tag ubuntu:15.10 runoob/ubuntu:v3
docker images runoob/ubuntu:v3
# 輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v3 4e3b13c8a266 3 months ago 136.3 MB

build
**docker build ** 命令用於使用 Dockerfile 創建鏡像。

docker build [OPTIONS] PATH | URL | -

OPTIONS 說明:

--build-arg=[] : 設置鏡像創建時的變量;
--cpu-shares : 設置 cpu 使用權重;
--cpu-period : 限制 CPU CFS 周期;
--cpu-quota : 限制 CPU CFS 配額;
--cpuset-cpus : 指定使用的 CPU id;
--cpuset-mems : 指定使用的內存 id;
--disable-content-trust : 忽略校驗,默認開啟;
-f : 指定要使用的 Dockerfile 路徑;
--force-rm : 設置鏡像過程中刪除中間容器;
--isolation : 使用容器隔離技術;
--label=[] : 設置鏡像使用的元數據;
-m : 設置內存最大值;
--memory-swap : 設置 Swap 的最大值為內存 + swap,"-1" 表示不限 swap;
--no-cache : 創建鏡像的過程不使用緩存;
--pull : 嘗試去更新鏡像的新版本;
--quiet, -q : 安靜模式,成功后只輸出鏡像 ID;
--rm : 設置鏡像成功后刪除中間容器;
--shm-size : 設置 /dev/shm 的大小,默認值是 64M;
--ulimit :Ulimit 配置。
--tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構建中為一個鏡像設置多個標簽。
--network: 默認 default。在構建期間設置 RUN 指令的網絡模式
使用當前目錄的 Dockerfile 創建鏡像,標簽為 runoob/ubuntu:v1。

docker build -t runoob/ubuntu:v1 .
使用 URL http://github.com/creack/docker-firefox 的 Dockerfile 創建鏡像。

docker build github.com/creack/docker-firefox

也可以通過 -f Dockerfile 文件的位置:

docker build -f /path/to/a/Dockerfile .

在 Docker 守護進程執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:

docker build -t test/myapp .
# 輸出
Sending build context to Docker daemon 2.048 kB
Error response from daemon: Unknown instruction: RUNCMD

history
docker history : 查看指定鏡像的創建歷史。

docker history [OPTIONS] IMAGE

OPTIONS 說明:

-H : 以可讀的格式打印鏡像大小和日期,默認為 true;
--no-trunc : 顯示完整的提交記錄;
-q : 僅列出提交記錄 ID。
查看本地鏡像 runoob/ubuntu:v3 的創建歷史。

docker history runoob/ubuntu:v3
# 輸出
IMAGE CREATED CREATED BY SIZE COMMENT
4e3b13c8a266 3 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 3 months ago /bin/sh -c sed -i 's/^#s*(deb.*universe)$/ 1.863 kB
<missing> 3 months ago /bin/sh -c set -xe && echo '#!/bin/sh' > /u 701 B
<missing> 3 months ago /bin/sh -c #(nop) ADD file:43cb048516c6b80f22 136.3 MB

save
docker save : 將指定鏡像保存成 tar 歸檔文件。

docker save [OPTIONS] IMAGE [IMAGE...]

OPTIONS 說明:

-o : 輸出到的文件。
將鏡像 runoob/ubuntu:v3 生成 my_ubuntu_v3.tar 文檔

docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
ll my_ubuntu_v3.tar
# 輸出
-rw------- 1 runoob runoob 142102016 Jul 11 01:37 my_ubuntu_v3.tar

load
docker load : 導入使用 docker save 命令導出的鏡像。

docker load [OPTIONS]

OPTIONS 說明:

--input , -i : 指定導入的文件,代替 STDIN。
--quiet , -q : 精簡輸出信息。
導入鏡像:

docker image ls
# 輸出
REPOSITORY TAG IMAGE ID CREATED SIZE

docker load < busybox.tar.gz
# 輸出
Loaded image: busybox:latest

docker images
# 輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 769b9341d937 7 weeks ago 2.489 MB

docker load --input fedora.tar
# 輸出
Loaded image: fedora:rawhide
Loaded image: fedora:20

docker images
# 輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
busybox latest 769b9341d937 7 weeks ago 2.489 MB
fedora rawhide 0d20aec6529d 7 weeks ago 387 MB
fedora 20 58394af37342 7 weeks ago 385.5 MB
fedora heisenbug 58394af37342 7 weeks ago 385.5 MB
fedora latest 58394af37342 7 weeks ago 385.5 MB

import
docker import : 從歸檔文件中創建鏡像。

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

OPTIONS 說明:

-c : 應用 docker 指令創建鏡像;
-m : 提交時的說明文字;
從鏡像歸檔文件 my_ubuntu_v3.tar 創建鏡像,命名為 runoob/ubuntu:v4

docker import my_ubuntu_v3.tar runoob/ubuntu:v4
# 輸出
sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39

docker images runoob/ubuntu:v4
# 輸出
REPOSITORY TAG IMAGE ID CREATED SIZE
runoob/ubuntu v4 63ce4a6d6bc3 20 seconds ago 142.1 MB


docker images ls # 列出本地鏡像

啟動容器,下面兩句的效果是一樣的
-d 后台運行
-i 交互
-t 終端

docker run -d -i -t ubuntu:18.04 /bin/bash
docker run -dit ubuntu:18.04 /bin/bash

進入后台容器
docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

刪除 / 清除容器
docker container rm [OPTIONS] CONTAINER [CONTAINER...] # 刪除容器
docker container prune # 清理掉停止的容器


docker ps -a # 查看所有的容器
docker ps # 查看運行着的容器

docker container ls -a # 查看終止狀態的容器
docker container start <容器 ID>/<NAMES> # 啟動一個容器
docker container stop <容器 ID>/<NAMES> # 停止一個運行着的容器


docker search python # 從 Docker Hub 查找 python 鏡像

docker pull python # 從鏡像倉庫中拉取或者更新指定鏡像

docker container prune # 清理掉停止的容器

docker rmi <容器 ID> # 刪除本地容器

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG] # 標記本地鏡像,將其歸入某一倉庫

docker 命令的幾對關系
save 和 export
save 保存的是鏡像,export 保存的是容器

load 和 import
load 載入鏡像包,import 載入容器包,但兩者都會恢復為鏡像

load 不能對載入的進行進行命名,import 可以
————————————————
原文鏈接:https://blog.csdn.net/weixin_42498981/article/details/112110445


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM