Docker概述及常用命令 --- Docker核心技術學習筆記

Before Docker

爲什麼Docker技術會產生併成爲熱點?先看看Docker之前出現的若干工具。

虛擬機

步驟多 啓動慢

Linux容器

Linux 容器技術能夠讓您對應用及其整個運行時環境(包括全部所需文件)一起進行打包或隔離。從而讓您可以在不同環境(如開發、測試和生產等環境)之間輕鬆遷移應用,同時還可保留應用的全部功能。

相比上面的兩種工具,Docker更加輕便、實用。

Docker架構

Docker 架構
鏡像(Image):Docker 鏡像(Image),就相當於是一個 root 文件系統。比如官方鏡像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系統的 root 文件系統。
容器(Container):鏡像(Image)和容器(Container)的關係,就像是面向對象程序設計中的類和實例一樣,鏡像是靜態的定義,容器是鏡像運行時的實體。容器可以被創建、啓動、停止、刪除、暫停等。
倉庫(Repository):倉庫可看着一個代碼控制中心,用來保存鏡像。

Docker 使用客戶端-服務器 (C/S) 架構模式,使用遠程API來管理和創建Docker容器。

Docker 容器通過 Docker 鏡像來創建。

容器與鏡像的關係類似於面向對象編程中的對象與類。
容器和鏡像的區別:容器最上面一層可讀寫,鏡像只讀

Docker的運行原理


如圖,Docker容器通過後臺守護進程和客戶端通信。

爲什麼Docker比VM快?

啓動容器

交互模式

runoob@runoob:~$ docker run -i -t ubuntu:15.10 /bin/bash
root@0123ce188bd8:/#

–name: 命名
-t: 在容器內指定一個僞終端或終端。
-i: 交互模式運行。
it選項經常一起使用。

-P:將容器內部使用的網絡端口映射到我們使用的主機上。
-p 設置端口

我們可以通過運行 exit 命令或者使用 CTRL+D 來退出容器。

後臺模式

使用以下命令創建一個以進程方式運行的容器
加了 -d 參數默認不會進入容器

runoob@runoob:~$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63


使用以下方式可以避免這個問題:

$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63

常用命令

1. 幫助命令

docker version
docker info
docker --help

2.鏡像命令

查看本地鏡像

$ docker images

tag 是鏡像版本,鏡像名字是 image_name:tag ,默認tag是latest

查找鏡像

$ docker search image_name[:tag]

在docker hub上查詢對應鏡像

–filter=star=?:限制star數量的下限

拉取鏡像

$ docker pull image_name[:tag]

刪除鏡像

$ docker rmi image_name[:tag]
$ docker rmi -f $(docker images .....)

3. 容器命令

新建並啓動容器

$ docker run

啓動/重啓/停止容器

$ docker start/stop/restart 

強制停止容器

$ docker kill

查找容器

$ docker ps

查看正在運行的容器。

後臺模式進入容器

在使用 -d 參數時,容器啓動後會進入後臺。此時想要進入容器,可以通過以下指令進入:

  • docker attach:直接進入容器啓動命令的終端,不啓動新進程
  • docker exec (-it):直接在對應容器運行命令,沒有進入容器,啓動了一個新進程

退出容器

  • exit:容器停止退出
  • ctrl+P+Q:容器不停止退出

導出和導入容器

如果要導出本地某個容器,可以使用 docker export 命令。

$ docker export 1e560fca3906 > ubuntu.tar

導出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
這樣將導出容器快照到本地文件。

可以使用 docker import 從容器快照文件中再導入爲鏡像。

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1 ;將快照文件 ubuntu.tar 導入到鏡像 test/ubuntu:v1
$ docker import http://example.com/exampleimage.tgz example/imagerepo ;根據URL導入

刪除已經停止的容器

刪除容器使用 docker rm 命令:

$ docker rm -f 1e560fca3906
$ docker rm $(docker ps....)

下面的命令可以清理掉所有處於終止狀態的容器。

$ docker container prune

4. 容器高級命令

後臺模式運行容器

$ docker run -d 

查看容器日誌

$ docker logs -f -t --tail container_id

查看容器內進程

$ docker top container_id

查看容器內細節

$ docker inspect container_id

從容器copy數據到主機

$ docker cp container_id:conatiner_path/file host_path

從容器創建鏡像

$ docker commit

數據卷(Data Volume)

Docker數據卷用來將容器中的數據持久化,保存容器的數據。

  • 數據卷可以在容器間共享數據
  • 卷中更改可立即生效
  • 數據卷的更新不包含在鏡像的更新中
  • 當沒有容器使用它時,數據卷的生命週期結束
  • 容器停止退出後,主機修改的數據依然可以同步

在用docker run命令的時候,使用-v標記可以在容器內創建一個數據卷。多次重複使用-v標記可以創建多個數據卷。

$ docker run -it -v /host_path:/container_path container_id

可用docker inspect 查看數據卷(volumes)的設置。

可以設置在容器內的數據卷只讀,只可在宿主機修改。

$ docker run -it -v /host_path:/container_path:ro container_id

容器數據卷

容器之間可以互相掛載,實現數據的傳遞依賴。
容器需要命名。
掛載是雙向的,父容器和子容器之間的數據可以雙向共享。

$ docker run -it --volume-from father_container_name container_id

父容器的消失不會導致數據卷丟失數據,直到沒有容器使用它時,數據卷的生命週期才結束。

Dockerfile

什麼是 Dockerfile?
Dockerfile 是一個用來構建鏡像的文本文件,文本內容包含了一條條構建鏡像所需的指令和說明。
可以用docker build+DockerFile生成鏡像。

在Dockerfile中添加數據卷

利用VOLUME關鍵字,可添加多個數據卷。用docker inspect可以查看run容器之後的宿主機對應路徑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章