【docker專題(2)】容器

[TOC]php

容器是獨立運行的一個或一組應用。Docker容器經過Docker鏡像來建立。
容器與鏡像的關係相似於面向對象編程中的對象與類。html

[info] 如下命令的容器名稱均可以換成容器的id

操做

# 建立一個叫mycon的容器並傳入參數php:5.6-fpm
docker create --name mycon php:5.6-fpm

# 建立並運行ubuntu:15.10,輸出 "Hello world"
docker run ubuntu:15.10 /bin/echo "Hello world"

# 建立容器,並進入容器,若是不指定name就會本身建立一個臨時name
docker run -i -t ubuntu:18.10 /bin/bash

# 加上d的話就建立運行後就直接退出
docker run -itd ubuntu:18.10

# 在容器mycon中開啓一個交互模式的終端
docker exec -i -t mycon /bin/bash   

# 在容器mycon中以交互模式執行容器內/data/test.sh腳本
docker exec -it mycon /bin/sh  /data/test.sh

# 退出容器
快捷鍵:Ctrl+P+Q
exit;

# 中止容器運行,發送信號SIGTERM
docker stop mycon

# 啓動一箇中止狀態的容器
docker start mycon

# 重啓一個容器
docker restart mycon

# 刪除一個容器
doecker rm mycon

# 阻塞到一個容器,直到容器中止運行
docker wait mycon 

# 暫停容器中全部的進程
docker pause mycon

# 恢復容器中全部的進程。
docker unpause mycon

# 找到目標容器的pid,而後用nsenter進入
# 老版本的docker是沒有exec命令的
docker inspect -f {{.State.Pid}} 44fc0f0582d9  
nsenter --target 998 --mount --uts --ipc --net --pid

# 發送信號給容器,默認SIGKILL
docker kill -s KILL mycon (-s表示向容器發送一個信號)

信息

# 顯示狀態爲運行(Up)的容器
docker ps
-a :顯示全部的容器,包括未運行的。例如:docker ps -a

# 深刻容器內部獲取容器全部信息,例如:docker inspect mycon
docker inspect
-f :指定返回值的模板文件。例如:docker inspect -f '{{.NetworkSettings.IPAddress}}' mycon (獲取正在運行的容器mycon的 IP)
-s :顯示總的文件大小。
--type :爲指定類型返回JSON。

# 查看容器的日誌(stdout/stderr)
docker logs
-f : 跟蹤日誌輸出,例如:docker logs -f mycon(查看容器mycon的日誌輸出,容器必須是啓動狀態)
--since :顯示某個開始時間的全部日誌
-t : 顯示時間戳
--tail :僅列出最新N條容器日誌,例如:docker logs --since="2017-05-01" --tail=10 mycon(查看容器mycon從2017年5月1往後的最新10條日誌。)

# 獲得docker服務器的實時的事件
docker events
-f :根據條件過濾事件;例如:docker events -f "image"="mysql:5.6" --since="1466302400" (顯示docker 鏡像爲mysql:5.6 這個時間戳對應的日期以後的相關事件。)
--since :從指定的時間戳後顯示全部事件;例如:docker events --since="1466302400" (顯示docker 在這個時間戳對應的日期以後的全部事件。)
--until :流水時間顯示到指定的時間爲止;

# 顯示容器的端口映射,例如:docker port mycon
docker port

# 顯示容器的進程信息,支持ps參數。例如docker top  mycon
docker top

# 顯示容器文件系統的先後變化, 檢查容器裏文件結構的更改。例如:docker diff mycon
docker diff

數據卷與數據卷容器

刪除容器後數據還存在mysql

# 數據卷的建立與查看
# 默認是建立在宿主機的/var/lib/docker/volumes/上
docker volume create nginx-vol
docker volume ls
docker volume inspect nginx-vol

# 數據卷掛載
docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
docker run -itd --name=nginx-test -v nginx-vol:/usr/share/nginx/html nginx

# 數據卷指定掛載目錄 /home/docker/wwwroot
# -v方式的能夠自動建立目錄, --mount方式的不能夠
docker run -itd --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
docker run -itd --name=nginx-test --mount type=bind src=/home/docker/wwwroot,dst=/usr/share/nginx/html nginx
docker run -itd --name=nginx-test -v /home/docker/wwwroot:/usr/share/nginx/html nginx

若是容器之間須要共享一些持續更新的數據nginx

# 建立掛載卷容器
docker run -itd --name nginx-data  --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
# 新的容器關聯數據卷容器
docker run -itd --volumes-from nginx-data --name nginx-1 nginx
docker run -itd --volumes-from nginx-data --name nginx-2 nginx
# 三個容器的數據卷通用

導出導入

# 從容器裏向外拷貝文件或目錄
docker cp 

    -L :保持源目標中的連接

    docker cp /www/test mycon:/www/  # 將主機/www/test目錄拷貝到容器mycon的/www目錄下

    docker cp /www/test mycon:/www   # 將主機/www/test目錄拷貝到容器mycon中,目錄重命名爲www

    docker cp mycon:/www /tmp/test    # 將容器mycon中的/www目錄拷貝到主機的/tmp/test目錄中

# 將容器整個文件系統導出爲一個tar包,不帶layers、tag等信息
    # 導出容器必需要先中止容器
docker export 
    -o :將輸入內容寫到文件。例如:docker export -o mysql-`date +%Y%m%d`.tar a404c6c174a2  #將id爲a404c6c174a2的容器按日期保存爲tar文件。

    # docker import <文件路徑>  <容器名>
    docker import ./ubuntu1810.tar ubuntu1810:tag
[info] 注意,docker import導入容器進去是成爲一個新的鏡像,要經過 docker images來查看,相比docker save命令,容器文件會丟失全部元數據和歷史記錄,僅保存容器當時的狀態,至關於虛擬機快照。
相關文章
相關標籤/搜索