docker初探

docker初探

本文旨在介紹 docker 基本的安裝、常用命令和常見概念的辨析,方便新手入門和筆者日后查閱,大部分內容整理自互聯網,原出處在文中注明。

文章目錄

  • docker初探
    • docker安裝(mac)
    • 版本、信息相關命令
      • version/info
    • 鏡像倉庫相關命令
      • login/logout
      • pull/push
      • search
    • 本地鏡像管理相關命令
      • images
      • rmi
      • tag
      • build
      • history
      • save
      • load
      • import
    • 容器生命周期管理相關命令
      • run
      • start/stop/restart
      • kill
      • rm
      • pause/unpause
      • create
      • exec
    • 容器操作相關命令
      • ps
      • inspect
      • top
      • attach
      • events
      • logs
      • wait
      • export
      • port
    • 容器rootfs相關命令
      • commit
      • cp
      • diff
    • 圖示總結
    • 關于docker容器和鏡像的區別

docker安裝(mac)

直接使用 homebrew 安裝:

brew install --cask docker

然后運行 docker 應用,它會要求提供權限,確定,然后下一步。最終 docker 的小鯨魚圖標會出現在上方欄中。可以使用用戶界面,也可以用命令,如:

docker ps

注意一定要使用 --cask 選項,而不能只是 brew install docker,因為 docker 是系統級的包。

版本、信息相關命令

以下 docker 命令相關內容來自:https://www.runoob.com/docker/

version/info

docker version :顯示 Docker 版本信息。

docker info : 顯示 Docker 系統信息,包括鏡像和容器數。

語法

docker version
docker info

鏡像倉庫相關命令

login/logout

docker login: 登陸到一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub

docker logout: 登出一個Docker鏡像倉庫,如果未指定鏡像倉庫地址,默認為官方倉庫 Docker Hub

語法

docker login [OPTIONS] [SERVER]
docker logout [OPTIONS] [SERVER]

OPTIONS說明:

  • -u:登陸的用戶名
  • -p:登陸的密碼

實例

登陸到Docker Hub

docker login -u 用戶名 -p 密碼

登出Docker Hub

docker logout

pull/push

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

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

語法

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

OPTIONS說明:

  • -a:拉取所有 tagged 鏡像
  • –disable-content-trust:忽略鏡像的校驗,默認開啟

實例

從Docker Hub下載java最新版鏡像。

docker pull java

從Docker Hub下載REPOSITORY為java的所有鏡像。

docker pull -a java

上傳本地鏡像myapache:v1到鏡像倉庫中。

docker push myapache:v1

search

docker search: 從Docker Hub查找鏡像

語法

docker search [OPTIONS] TERM

OPTIONS說明:

  • –automated:只列出 automated build類型的鏡像;
  • –no-trunc:顯示完整的鏡像描述;
  • -f <過濾條件>:列出收藏數不小于指定值的鏡像。

實例

從 Docker Hub 查找所有鏡像名包含 java,并且收藏數大于 10 的鏡像

runoob@runoob:~$ docker search -f stars=10 java
NAME                  DESCRIPTION                           STARS   OFFICIAL   AUTOMATED
java                  Java is a concurrent, class-based...   1037    [OK]       
anapsix/alpine-java   Oracle Java 8 (and 7) with GLIBC ...   115                [OK]
develar/java                                                 46                 [OK]
isuper/java-oracle    This repository contains all java...   38                 [OK]
lwieske/java-8        Oracle Java 8 Container - Full + ...   27                 [OK]
nimmis/java-centos    This is docker images of CentOS 7...   13                 [OK]

參數說明:

NAME: 鏡像倉庫源的名稱

DESCRIPTION: 鏡像的描述

OFFICIAL: 是否 docker 官方發布

stars: 類似 Github 里面的 star,表示點贊、喜歡的意思。

AUTOMATED: 自動構建。

本地鏡像管理相關命令

images

docker images: 列出本地鏡像。

語法

docker images [OPTIONS] [REPOSITORY[:TAG]]

OPTIONS說明:

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

實例

查看本地鏡像列表。

runoob@runoob:~$ docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
mymysql                 v1                  37af1236adef        5 minutes ago       329 MB
runoob/ubuntu           v4                  1c06aa18edee        2 days ago          142.1 MB
<none>                  <none>              5c6e1090e771        2 days ago          165.9 MB
httpd                   latest              ed38aaffef30        11 days ago         195.1 MB
alpine                  latest              4e38e38c8ce0        2 weeks ago         4.799 MB
mongo                   3.2                 282fd552add6        3 weeks ago         336.1 MB
redis                   latest              4465e4bcad80        3 weeks ago         185.7 MB
php                     5.6-fpm             025041cd3aa5        3 weeks ago         456.3 MB
python                  3.5                 045767ddf24a        3 weeks ago         684.1 MB
...

列出本地鏡像中REPOSITORY為ubuntu的鏡像列表。

root@runoob:~# docker images  ubuntu
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              14.04               90d5884b1ee0        9 weeks ago         188 MB
ubuntu              15.10               4e3b13c8a266        3 months ago        136.3 MB

rmi

docker rmi: 刪除本地一個或多個鏡像。

語法

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

OPTIONS說明:

  • -f:強制刪除;
  • –no-prune:不移除該鏡像的過程鏡像,默認移除;

實例

強制刪除本地鏡像 runoob/ubuntu:v4。

root@runoob:~# docker rmi -f runoob/ubuntu:v4
Untagged: runoob/ubuntu:v4
Deleted: sha256:1c06aa18edee44230f93a90a7d88139235de12cd4c089d41eed8419b503072be
Deleted: sha256:85feb446e89a28d58ee7d80ea5ce367eebb7cec70f0ec18aa4faa874cbd97c73

tag

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

語法

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

實例

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

root@runoob:~# docker tag ubuntu:15.10 runoob/ubuntu:v3
root@runoob:~# 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配置。
  • –squash:將 Dockerfile 中所有的操作壓縮為一層。
  • –tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構建中為一個鏡像設置多個標簽。
  • –network: 默認 default。在構建期間設置RUN指令的網絡模式

實例

使用當前目錄的 Dockerfile 創建鏡像,標簽為 runoob/ubuntu:v1。

docker build -t runoob/ubuntu:v1 . 

使用URL 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的創建歷史。

root@runoob:~# 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 文檔

runoob@runoob:~$ docker save -o my_ubuntu_v3.tar runoob/ubuntu:v3
runoob@runoob:~$ 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 lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZE$ docker load < busybox.tar.gzLoaded image: busybox:latest
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
busybox             latest              769b9341d937        7 weeks ago         2.489 MB$ docker load --input fedora.tarLoaded image: fedora:rawhideLoaded image: fedora:20$ docker imagesREPOSITORY          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

runoob@runoob:~$ docker import  my_ubuntu_v3.tar runoob/ubuntu:v4  
sha256:63ce4a6d6bc3fabb95dbd6c561404a309b7bdfc4e21c1d59fe9fe4299cbfea39
runoob@runoob:~$ docker images runoob/ubuntu:v4
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
runoob/ubuntu       v4                  63ce4a6d6bc3        20 seconds ago      142.1 MB

容器生命周期管理相關命令

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命令。

runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/# 

start/stop/restart

docker start :啟動一個或多個已經被停止的容器

docker stop :停止一個運行中的容器

docker 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

runoob@runoob:~$ docker kill -s KILL mynginx
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 CONTAINER [CONTAINER...]
docker unpause 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

runoob@runoob:~$ 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 腳本:

runoob@runoob:~$ docker exec -it mynginx /bin/sh /root/runoob.sh
http://www.runoob.com/

在容器 mynginx 中開啟一個交互模式的終端:

runoob@runoob:~$ 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:顯示總的文件大小。

實例

列出所有在運行的容器信息。

runoob@runoob:~$ 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

輸出詳情介紹:

CONTAINER ID: 容器 ID。

IMAGE: 使用的鏡像。

COMMAND: 啟動容器時運行的命令。

CREATED: 容器的創建時間。

STATUS: 容器狀態。

狀態有7種:

  • created(已創建)
  • restarting(重啟中)
  • running(運行中)
  • removing(遷移中)
  • paused(暫停)
  • exited(停止)
  • dead(死亡)

PORTS: 容器的端口信息和使用的連接類型(tcp\udp)。

NAMES: 自動分配的容器名稱。

列出最近創建的5個容器信息。

runoob@runoob:~$ docker ps -n 5
CONTAINER ID        IMAGE               COMMAND                   CREATED           
09b93464c2f7        nginx:latest        "nginx -g 'daemon off"    2 days ago   ...     
b8573233d675        nginx:latest        "/bin/bash"               2 days ago   ...     
b1a0703e41e7        nginx:latest        "nginx -g 'daemon off"    2 days ago   ...    
f46fb1dec520        5c6e1090e771        "/bin/sh -c 'set -x \t"   2 days ago   ...   
a63b4a5597de        860c279d2fec        "bash"                    2 days ago   ...

列出所有創建的容器ID。

runoob@runoob:~$ docker ps -a -q
09b93464c2f7
b8573233d675
b1a0703e41e7
f46fb1dec520
a63b4a5597de
6a4aa42e947b
de7bb36e7968
43a432b73776
664a8ab1a585
ba52eb632bbd
...

inspect

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

語法

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

OPTIONS說明:

  • -f:指定返回值的模板文件。
  • -s:顯示總的文件大小。
  • –type:為指定類型返回JSON。

實例

獲取鏡像mysql:5.6的元信息。

runoob@runoob:~$ docker inspect mysql:5.6
[{"Id": "sha256:2c0964ec182ae9a045f866bbc2553087f6e42bfc16074a74fb820af235f070ec","RepoTags": ["mysql:5.6"],"RepoDigests": [],"Parent": "","Comment": "","Created": "2016-05-24T04:01:41.168371815Z","Container": "e0924bc460ff97787f34610115e9363e6363b30b8efa406e28eb495ab199ca54","ContainerConfig": {"Hostname": "b0cf605c7757","Domainname": "","User": "","AttachStdin": false,"AttachStdout": false,"AttachStderr": false,"ExposedPorts": {"3306/tcp": {}},
...

獲取正在運行的容器mymysql的 IP。

runoob@runoob:~$ docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' mymysql
172.17.0.3

top

docker top:查看容器中運行的進程信息,支持 ps 命令參數。

語法

docker top [OPTIONS] CONTAINER [ps OPTIONS]

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

實例

查看容器mymysql的進程信息。

runoob@runoob:~/mysql$ docker top mymysql
UID    PID    PPID    C      STIME   TTY  TIME       CMD
999    40347  40331   18     00:58   ?    00:00:02   mysqld

查看所有運行容器的進程信息。

for i in  `docker ps |grep Up|awk '{print $1}'`;do echo \ &&docker top $i; done

attach

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

語法

docker attach [OPTIONS] CONTAINER

要attach上去的容器必須正在運行,可以同時連接上同一個container來共享屏幕(與screen命令的attach類似)。

官方文檔中說attach后可以通過CTRL-C來detach,但實際上經過我的測試,如果container當前在運行bash,CTRL-C自然是當前行的輸入,沒有退出;如果container當前正在前臺運行進程,如輸出nginx的access.log日志,CTRL-C不僅會導致退出容器,而且還stop了。這不是我們想要的,detach的意思按理應該是脫離容器終端,但容器依然運行。好在attach是可以帶上–sig-proxy=false來確保CTRL-D或CTRL-C不會關閉容器。

實例

容器mynginx將訪問日志指到標準輸出,連接到容器查看訪問信息。

runoob@runoob:~$ docker attach --sig-proxy=false mynginx
192.168.239.1 - - [10/Jul/2016:16:54:26 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"

events

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

語法

docker events [OPTIONS]

OPTIONS說明:

  • **-f :**根據條件過濾事件;
  • **–since :**從指定的時間戳后顯示所有事件;
  • **–until :**流水時間顯示到指定的時間為止;

實例

顯示docker 2016年7月1日后的所有事件。

runoob@runoob:~/mysql$ docker events  --since="1467302400"
2016-07-08T19:44:54.501277677+08:00 network connect 66f958fd13dc4314ad20034e576d5c5eba72e0849dcc38ad9e8436314a4149d4 (container=b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64, name=bridge, type=bridge)
2016-07-08T19:44:54.723876221+08:00 container start b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64 (image=nginx:latest, name=elegant_albattani)
2016-07-08T19:44:54.726110498+08:00 container resize b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64 (height=39, image=nginx:latest, name=elegant_albattani, width=167)
2016-07-08T19:46:22.137250899+08:00 container die b8573233d675705df8c89796a2c2687cd8e36e03646457a15fb51022db440e64 (exitCode=0, image=nginx:latest, name=elegant_albattani)
...

顯示docker 鏡像為mysql:5.6 2016年7月1日后的相關事件。

runoob@runoob:~/mysql$ docker events -f "image"="mysql:5.6" --since="1467302400" 
2016-07-11T00:38:53.975174837+08:00 container start 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)
2016-07-11T00:51:17.022572452+08:00 container kill 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql, signal=9)
2016-07-11T00:51:17.132532080+08:00 container die 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (exitCode=137, image=mysql:5.6, name=mymysql)
2016-07-11T00:51:17.514661357+08:00 container destroy 96f7f14e99ab9d2f60943a50be23035eda1623782cc5f930411bbea407a2bb10 (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:18.551984549+08:00 container create c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:18.557405864+08:00 container attach c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:18.844134112+08:00 container start c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:57:19.140141428+08:00 container die c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (exitCode=1, image=mysql:5.6, name=mymysql)
2016-07-11T00:58:05.941019136+08:00 container destroy c8f0a32f12f5ec061d286af0b1285601a3e33a90a08ff1706de619ac823c345c (image=mysql:5.6, name=mymysql)
2016-07-11T00:58:07.965128417+08:00 container create a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)
2016-07-11T00:58:08.188734598+08:00 container start a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)
2016-07-11T00:58:20.010876777+08:00 container top a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)
2016-07-11T01:06:01.395365098+08:00 container top a404c6c174a21c52f199cfce476e041074ab020453c7df2a13a7869b48f2f37e (image=mysql:5.6, name=mymysql)

如果指定的時間是到秒級的,需要將時間轉成時間戳。如果時間為日期的話,可以直接使用,如–since=“2016-07-01”。

logs

docker logs: 獲取容器的日志

語法

docker logs [OPTIONS] CONTAINER

OPTIONS說明:

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

實例

跟蹤查看容器mynginx的日志輸出。

runoob@runoob:~$ docker logs -f mynginx
192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
2016/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "192.168.239.130", referrer: "http://192.168.239.130/"
192.168.239.1 - - [10/Jul/2016:16:53:33 +0000] "GET /favicon.ico HTTP/1.1" 404 571 "http://192.168.239.130/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
192.168.239.1 - - [10/Jul/2016:16:53:59 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
...

查看容器mynginx從2016年7月1日后的最新10條日志。

docker logs --since="2016-07-01" --tail=10 mynginx

wait

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

語法

docker wait [OPTIONS] CONTAINER [CONTAINER...]

實例

docker wait CONTAINER

export

docker export:將文件系統作為一個tar歸檔文件導出到STDOUT。

語法

docker export [OPTIONS] CONTAINER

OPTIONS說明:

  • -o:將輸入內容寫到文件。

實例

將id為a404c6c174a2的容器按日期保存為tar文件。

runoob@runoob:~$ docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2
runoob@runoob:~$ ls mysql-`date +%Y%m%d`.tar
mysql-20160711.tar

port

docker port:列出指定的容器的端口映射,或者查找將PRIVATE_PORT NAT到面向公眾的端口。

語法

docker port [OPTIONS] CONTAINER [PRIVATE_PORT[/PROTO]]

實例

查看容器mynginx的端口映射情況。

runoob@runoob:~$ docker port mymysql
3306/tcp -> 0.0.0.0:3306

容器rootfs相關命令

commit

docker commit:從容器創建一個新的鏡像。

語法

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

OPTIONS說明:

  • -a:提交的鏡像作者;
  • -c:使用Dockerfile指令來創建鏡像;
  • -m:提交時的說明文字;
  • -p:在commit時,將容器暫停。

實例

將容器a404c6c174a2 保存為新的鏡像,并添加提交人信息和說明信息。

runoob@runoob:~$ docker commit -a "runoob.com" -m "my apache" a404c6c174a2  mymysql:v1 
sha256:37af1236adef1544e8886be23010b66577647a40bc02c0885a6600b33ee28057
runoob@runoob:~$ docker images mymysql:v1
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mymysql             v1                  37af1236adef        15 seconds ago      329 MB

cp

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

語法

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

OPTIONS說明:

  • -L:保持源目標中的鏈接

實例

將主機/www/runoob目錄拷貝到容器96f7f14e99ab的/www目錄下。

docker cp /www/runoob 96f7f14e99ab:/www/

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

docker cp /www/runoob 96f7f14e99ab:/www

將容器96f7f14e99ab的/www目錄拷貝到主機的/tmp目錄中。

docker cp  96f7f14e99ab:/www /tmp/

diff

docker diff: 檢查容器里文件結構的更改。

語法

docker diff [OPTIONS] CONTAINER

實例

查看容器mymysql的文件結構更改。

runoob@runoob:~$ docker diff mymysql
A /logs
A /mysql_data
C /run
C /run/mysqld
A /run/mysqld/mysqld.pid
A /run/mysqld/mysqld.sock
C /tmp

圖示總結

本節來自:https://segmentfault.com/a/1190000038921337

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-K9ybbsxY-1644935579572)(docker初探.assets/docker0.png)]

Docker 包括三個基本概念:

  • 鏡像(Image):Docker 鏡像是一個特殊的文件系統,除了提供容器運行時所需的程序、庫、資源、配置等文件外,還包含了一些為運行時準備的一些配置參數(如匿名卷、環境變量、用戶等)。鏡像不包含任何動態數據,其內容在構建之后也不會被改變。
  • 容器(Container):鏡像(Image)和容器(Container)的關系,就像是面向對象程序設計中的 實例 一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啟動、停止、刪除、暫停等。
  • 倉庫(Repository):倉庫(Repository)類似Git的遠程倉庫,集中存放鏡像文件。

三者關系可以用下圖表示:

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ZuyQoaqH-1644935579573)(docker初探.assets/docker1.png)]

關于docker容器和鏡像的區別

本節來自:https://zhuanlan.zhihu.com/p/120982681

docker的整個生命周期有三部分組成:鏡像(image)+容器(container)+倉庫(repository)。如下圖所示,容器是由鏡像實例化而來,這和我們學習的面向對象的概念十分相似,我們可以把鏡像看作類,把容器看作類實例化后的對象。

也可以說鏡像是文件, 容器是進程。 容器是基于鏡像創建的, 即容器中的進程依賴于鏡像中的文件, 這里的文件包括進程運行所需要的可執行文件, 依賴軟件, 庫文件, 配置文件等等…

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-H7EFUaJc-1644935579574)(docker初探.assets/docker2.jpeg)]

docker 的鏡像概念類似虛擬機的鏡像。是一個只讀的模板,一個獨立的文件系統,包括運行容器所需的數據,可以用來創建新的容器。( docker create <image -id > :為指定的鏡像添加一個可讀寫層,構成一個新的容器;)

例如:一個鏡像可以包含一個完整的ubuntu操作系統環境,里面僅安裝了mysql或用戶需要的其他應用程序。

docker鏡像實際上是由一層一層的系統文件組成,這種層級的文件系統被稱為UnionFS( Union file system 統一文件系統),鏡像可以基于dockerfile構建,dockerfile是一個描述文件,里面包含了若干條密令,每條命令都會對基礎文件系統創建新的層次結構。

docker提供了一個很簡單的機制來創建鏡像或更新現有的鏡像。用戶甚至可以從其他人那里下載一個已經做好的鏡像直接使用。(鏡像是只讀的,可以理解為靜態文件)

docker利用容器來運行應用:docker容器是由docker鏡像創建的運行實例。docker容器類似虛擬機,可以執行包含啟動,停止,刪除等。每個容器間是相互隔離的。容器中會運行特定的運用,包含特定應用的代碼及所需的依賴文件。可以把容器看作一個簡易版的linux環境(包含root用戶權限,進程空間,用戶空間和網絡空間等)和運行在其中的應用程序。

相對于鏡像來說容器是動態的,容器在啟動的時候創建了一層可寫層次作為最上層。( docker create <image -id > :為指定的鏡像添加一個可讀寫層,構成一個新的容器;)

docker倉庫:如果使用了git和github就很容易理解docker的倉庫概念。docker倉庫概念和git類似。

docker倉庫是用來包含鏡像的位置,docker提供了一個注冊服務器(register)來保存多個倉庫,每個倉庫又可以包含多個具備不同tag的鏡像,

docker運作中使用的默認倉庫是docker hub公共倉庫。

倉庫支持的操作類似git,當用戶創建了自己的鏡像之后就可以使用push命令將它上傳到共有或者私有的倉庫。這樣下次再另外一臺機器上使用這個鏡像的時候只需要從倉庫里面pull下來就可以了。

Ref:

https://stackoverflow.com/questions/44084846/cannot-connect-to-the-docker-daemon-on-macos

https://www.runoob.com/docker/

https://segmentfault.com/a/1190000038921337

https://zhuanlan.zhihu.com/p/120982681

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/532519.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532519.shtml
英文地址,請注明出處:http://en.pswp.cn/news/532519.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ubuntu安裝zsh、oh-my-zsh及常用配置

ubuntu安裝zsh、oh-my-zsh及常用配置 目前&#xff0c;ubuntu默認的shell是bash&#xff0c;但還有一種shell&#xff0c;叫做zsh它比bash更加強大&#xff0c;功能也更加完善&#xff0c;zsh雖說功能強大&#xff0c;但是配置比較復雜導致流行度不是很高 但是好東西終究是好…

Segmentaion標簽的三種表示:poly、mask、rle

Segmentaion標簽的三種表示&#xff1a;poly、mask、rle 不同于圖像分類這樣比較簡單直接的計算機視覺任務&#xff0c;圖像分割任務&#xff08;又分為語義分割、實例分割、全景分割&#xff09;的標簽形式稍為復雜。在分割任務中&#xff0c;我們需要在像素級上表達的是一張…

tensorboard報錯:ValueError Duplicate plugins for name projector 問題的出現及解決過程

tensorboard報錯&#xff1a;ValueError: Duplicate plugins for name projector 問題的出現及解決過程 記錄如題問題的出現及解決過程。 報錯命令及信息 筆者在終端調用 tensorboard 時&#xff1a; tensorboard --logdirruns/ --bind_all報錯&#xff1a; raise ValueEr…

發布自己的Python包(Pypi)

發布自己的Python包(Pypi) 我們經常使用 Pypi 來安裝包&#xff0c;但是有時候我們也想要發布自己的 Pypi 包&#xff0c;有可能我們寫了一個特別牛的包&#xff0c;也有可能我們只是想使用自己常用的一些輪子&#xff0c;可能這是我們日常編碼中很常用的一些輪子&#xff0c;…

Ubuntu PPA 使用指南

Ubuntu PPA 使用指南 轉自&#xff1a;https://zhuanlan.zhihu.com/p/55250294 一篇涵蓋了在 Ubuntu 和其他 Linux 發行版中使用 PPA 的幾乎所有問題的深入的文章。 如果你一直在使用 Ubuntu 或基于 Ubuntu 的其他 Linux 發行版&#xff0c;例如 Linux Mint、Linux Lite、Zorin…

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務

如何在 Linux 中快速地通過 HTTP 提供文件訪問服務 轉自&#xff1a;https://linux.cn/article-10205-1.html 如今&#xff0c;我有很多方法來通過 Web 瀏覽器為局域網中的其他系統提供單個文件或整個目錄的訪問。我在我的 Ubuntu 測試機上測試了這些方法&#xff0c;它們如下面…

Linux apt命令

Linux apt命令及其與apt-get的關系 轉自&#xff1a;https://blog.csdn.net/taotongning/article/details/82320472、https://www.runoob.com/linux/linux-comm-apt.html apt&#xff08;Advanced Packaging Tool&#xff09;是一個在 Debian 和 Ubuntu 中的 Shell 前端軟件包管…

楊宏宇:騰訊多模態內容理解技術及應用

楊宏宇&#xff1a;騰訊多模態內容理解技術及應用 分享嘉賓&#xff1a;楊宇鴻 騰訊 內容理解高級工程師 編輯整理&#xff1a;吳祺堯 出品平臺&#xff1a;DataFunTalk 導讀&#xff1a; 搜索內容的理解貫穿了整個搜索系統。我們需要從多個粒度理解搜索內容&#xff0c;包括語…

git登錄相關操作梳理

git登錄相關操作梳理 本文主要基于 Linux/Mac &#xff0c;Windows下未經測試&#xff0c;不過估計差不多&#xff0c;在 git bash 內操作即可。 創建ssh key并關聯github等賬號 因為本地Git倉庫和GitHub倉庫之間的傳輸是通過SSH加密傳輸的&#xff0c;GitHub需要識別是否是…

關于mmdetection上手的幾點說明

關于mmdetection上手的幾點說明 官方的文檔很有參考價值&#xff0c;并且也有中文版&#xff0c;應當是大家上手 mmdetection 的第一參考&#xff0c;本文是記錄一些筆者在小白階段上手 mmdetection 時的一些心得&#xff0c;這些東西沒有人提&#xff0c;可能是大佬們覺得這些…

docker gpu報錯Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

Docker容器中使用Nvidia GPU報錯 docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]]. 問題出現 我們知道&#xff0c;想要在 docker19 及之后的版本中使用 nvidia gpu 已經不需要單獨安裝 nvidia-docker 了&#xff0c;這…

CUDA環境詳解

CUDA環境詳解 本文主要介紹 CUDA 環境&#xff0c;這一堆東西網上有很多博客介紹過了&#xff0c;我再來一篇:)&#xff0c;參考前輩們的文章&#xff0c;看能不能寫的更清楚一點。讀后仍有問題&#xff0c;歡迎留言交流。 CUDA APIs CUDA是由NVIDIA推出的通用并行計算架構&…

共享內存簡介及docker容器的shm設置與修改

共享內存簡介及docker容器的shm設置與修改 共享內存簡介 共享內存指 (shared memory)在多處理器的計算機系統中&#xff0c;可以被不同中央處理器&#xff08;CPU&#xff09;訪問的大容量內存。由于多個CPU需要快速訪問存儲器&#xff0c;這樣就要對存儲器進行緩存&#xff…

對Docker鏡像layer的理解

對Docker鏡像layer的理解 轉自&#xff1a;https://blog.csdn.net/u011069294/article/details/105583522 FROM python:3.6.1-alpine RUN pip install flask CMD [“python”,“app.py”] COPY app.py /app.py上面是一個Dockerfile的例子&#xff0c;每一行都會生成一個新的l…

ssh免密登錄配置方法及配置

ssh免密登錄配置方法及配置 直接上步驟&#xff0c;記我們本機為機器A&#xff0c;而機器B、機器C等是我們的服務器&#xff0c;我們要配置的是A到B、C等的 ssh 免密登錄。 1 在機器A上生成秘鑰對 ssh-keygen會得到輸出&#xff1a; Generating public/private rsa key pai…

機器學習系統:設計與實現 計算圖

機器學習系統:設計與實現 計算圖 轉自&#xff1a;https://openmlsys.github.io/chapter_computational_graph/index.html 在上一章節中&#xff0c;我們展示了用戶利用機器學習框架所編寫的程序。這些用戶程序包含了對于訓練數據&#xff0c;模型和訓練過程的定義。然而為了…

常見浮點數格式梳理

常見浮點數格式梳理 IEEE 754 標準 浮點數轉換網站&#xff1a;https://www.h-schmidt.net/FloatConverter/IEEE754.html IEEE二進制浮點數算術標準&#xff0c;為許多CPU與浮點運算器所采用。這個標準定義了表示浮點數的格式&#xff08;包括負零-0&#xff09;與反常值&am…

Python拾遺1:collections、itertools和內存io

Python拾遺1&#xff1a;collections、itertools和內存io 轉自&#xff1a;https://www.liaoxuefeng.com/wiki/1016959663602400 本系列旨在補充python中一些很好用但是并非常規課程主線中的知識。 collections collections是Python內建的一個集合模塊&#xff0c;提供了許…

混合精度訓練

混合精度訓練 轉自&#xff1a;https://zhuanlan.zhihu.com/p/441591808 通常我們訓練神經網絡模型的時候默認使用的數據類型為單精度FP32。近年來&#xff0c;為了加快訓練時間、減少網絡訓練時候所占用的內存&#xff0c;并且保存訓練出來的模型精度持平的條件下&#xff0…

拓撲排序C++

拓撲排序C 幾個基本概念的介紹 入度和出度 圖中的度&#xff1a;所謂頂點的度(degree)&#xff0c;就是指和該頂點相關聯的邊數。在有向圖中&#xff0c;度又分為入度和出度。 入度 (in-degree) &#xff1a;以某頂點為弧頭&#xff0c;終止于該頂點的邊的數目稱為該頂點的…