容器(Container)python
容器是一種輕量級、可移植、並將應用程序進行的打包的技術,使應用程序能夠在幾乎任何地方以相同的方式運行 Docker將鏡像文件運行起來後,產生的對象就是容器。容器至關因而鏡像運行起來的一個實例。mysql
容器具有必定的生命週期。linux
另外,能夠藉助docker ps命令查看運行的容器,如同在linux上利用ps命令查看運行着的進程那樣。nginx
通俗的講 docker 運行一個鏡像,這個鏡像就會生成一個進程,這個進程就被成爲容器。(進程就是資源管理的集合)redis
Docker 容器與虛擬機相同點sql
運行一個鏡像docker
docker run --rm -dti ubuntu:16.04 cd /var/lib/docker/containers docker ps
Docker 容器與虛擬機不一樣點shell
注意:容器並非虛擬機,但它們有不少類似的地方json
docker 虛擬機ubuntu
虛擬機的生命週期
docker 容器的生命週期
做用:
命令格式:
docker create [OPTIONS] IMAGE [COMMAND] [ARG...]
命令參數(OPTIONS):
查看更多
https://docs.docker.com/engine/reference/commandline/create/#options
命令參數(COMMAND\ARG):
查看使用幫助
docker create --help
能夠看到必填的參數是 IMAGE ,假如 建立一個 centos 的容器 docker create centos
若是咱們不指定參數, 他就會使用 centos 默認的參數, 具體查看以下
docker inspect centos
建立一個 centos 的鏡像
docker create centos ls -a docker ps -a
查看使用幫助
docker rm -h
查看正在運行的容器
docker ps -a
根據 NAMES和 ID 進行刪除 一個或多個 , 加上參數 -f 表示強制刪除(針對正在運行的)
docker rm zhang 0ac 1c1 ded
做用:
命令格式:
命令參數(OPTIONS):
建立一個容器
docker create --name test-centos centos ls -a docker ps -a
啓動剛剛建立的容器
docker start 1dd
能夠看到這時容器的狀態是 Exited 並非咱們指望的 runing 狀態 這時由於咱們在建立容器的時候使用的命令參數是 ls -a ,這條命令是瞬間就執行完成,進程執行結束,因此容器退出了
可是並無打印出 ls -a 的執行結果 ,查看 docker start 的用法
docker start -h
在上面咱們能夠看到 可選參數 -a 能夠把 標準的輸入和錯誤信息顯示出來,再次啓動一個容器
docker start 1dd -a
建立一個容器執行 python 命令
docker create --name python centos python docker start python -a
發現並無向咱們在終端上出現的以下交互
出現以上的緣由是咱們在建立容器的時候,沒有爲其指定一個終端 -t 和 標準的輸入 -i
docker create --name python_new -ti centos python docker start python_new -ai
這時就能夠輸入和輸出了
做用:
命令格式:
命令參數(OPTIONS):
查看更多
https://docs.docker.com/engine/reference/commandline/run/#options
命令參數(COMMAND\ARG):
運行一個容器
docker run centos ls -a
能夠看到 docker run 等價於 docker create + docker start -a
須要提供終端和標準輸入加上 -ti 參數便可
docker run -ti centos python
docker run 與 docker create + docker start
docker run -dti centos python
能夠看到加上 -d 後這個容器是在後臺掛起的
做用:
命令格式:
命令參數(OPTIONS):
命令演示
docker stop -h
後臺運行一個 centos 的鏡像
docker run -dti centos python docker ps -a
3s 後 關閉這個容器,不加 -t 參數默認是10 s
docker stop -t 3 342
docker kill -h
做用:
命令格式:
命令參數(OPTIONS):
命令演示
docker kill 342
docker stop和docker kill的區別
前提知識點:
Linux其中兩種終止進程的信號是:SIGTERM和SIGKILL
SIGKILL信號:無條件終止進程信號。進程接收到該信號會當即終止,不進行清理和暫存工做。該信號不能被忽略、處理和阻塞,它向系統管理員提供了能夠殺死任何進程的方法。
SIGTERM信號:程序終結信號,能夠由kill命令產生。與SIGKILL不一樣的是,SIGTERM信號能夠被阻塞和終止,以便程序在退出前能夠保存工做或清理臨時文件等。
docker stop 會先發出SIGTERM信號給進程,告訴進程即將會被關閉。在-t指定的等待時間過了以後,將會當即發出SIGKILL信號,直接關閉容器。
docker kill 直接發出SIGKILL信號關閉容器。但也能夠經過-s參數修改發出的信號。
所以會發如今docker stop的等過過程當中,若是終止docker stop的執行,容器最終沒有被關閉。而docker kill幾乎是馬上發生,沒法撤銷。
此外還有些異常緣由也會致使容器被關閉,好比docker daemon重啓、容器內部進程運行發生錯誤等等「異常緣由」。
docker pause -h
做用:
命令格式:
命令參數(OPTIONS):
命令演示
docker pause 342
docker unpause -h
做用:
命令格式:
命令參數(OPTIONS):
命令演示
docker unpause 342
docker restart -h
做用:
命令格式:
命令參數(OPTIONS):
命令演示
docker restart -t 1 342
docker container inspect -h
做用:
命令格式:
命令參數(OPTIONS):
命令演示
docker container inspect -f "{{ json .NetworkSettings.Networks.bridge }}" 342
docker logs -h
做用:
命令格式:
命令參數(OPTIONS):
注意:
docker logs 輸出的是COMMAND 中命令的執行信息
命令演示
docker logs 342
docker rename -h
做用:
命令格式:
命令參數(OPTIONS):
docker rename 342 centos
做用:
命令格式:
命令參數(OPTIONS):
退出後,當前的容器會變成 Exited 狀態
命令演示
docker attach d77
docker exec -h
做用:
命令格式:
命令參數(OPTIONS):
綁定的是容器中的子進程,因此執行完退出的是容器中的子進程,當前的容器並不會退出,這也是和 attach 的最主要的區別
命令演示
在後臺運行 一個命令,在把其給刪除
docker exec -dti 342 bash docker exec 342 kill -9 100
總結