先簡單理解 docker 的使用過程,它分為鏡像構建與容器啟動。
鏡像構建:即創建一個鏡像,它包含安裝運行所需的環境、程序代碼等。這個創建過程就是使用 dockerfile 來完成的。
容器啟動:容器最終運行起來是通過拉取構建好的鏡像,通過一系列運行指令(如端口映射、外部數據掛載、環境變量等)來啟動服務的。針對單個容器,這可以通過 docker run 來運行。
而如果涉及多個容器的運行(如服務編排)就可以通過 docker-compose 來實現,它可以輕松的將多個容器作為 service 來運行(當然也可僅運行其中的某個),并且提供了 scale (服務擴容) 的功能。
簡單總結:
1.dockerfile: 構建鏡像;
2.docker run: 啟動容器;
3.docker-compose: 啟動服務;
從頭說起。
假如你不用 docker ,搭建 wordpress 怎么弄?先找臺 server ,假設其 OS 為 Ubuntu ,然后按照文檔一步步敲命令,寫配置,對吧?
用 docker 呢? 隨便找臺 server ,不管什么操作系統,只要支持 docker 就行, docker run ubuntu, docker 會從官方源里拉取最新的 Ubuntu 鏡像,可以認為你開了個 Ubuntu 虛擬機,然后一步步安裝,跟上面一樣。
但是這樣安裝有個顯著的缺點,一旦 container 被刪,你做的工作就都沒了。當然可以用 docker commit 來保存成鏡像,這樣就可以復用了。
但是鏡像一般比較大,而且只分享鏡像的話,別人也不知道你這鏡像到底包含什么,這些問題都不利于分享和復用。
一個直觀的解決方案就是,寫個腳本把安裝過程全部記錄下來,這樣再次安裝的時候,執行腳本就行了。 Dockerfile 就是這樣的腳本,它記錄了一個鏡像的制作過程。
有了 Dockerfile, 只要執行 docker build . 就能制作鏡像,而且 Dockerfile 就是文本文件,修改也很方便。
現在有了 wordpress 的鏡像,只需要 docker run 就把 wordpress 啟動起來了。
如果僅僅是 wordpress, 這也就夠了。但是很多時候,需要多個鏡像合作才能啟動一個服務,比如前端要有 nginx , 數據庫 mysql, 郵件服務等等,當然你可以把所有這些都弄到一個鏡像里去,但這樣做就無法復用了。
更常見的是, nginx, mysql, smtp 都分別是個鏡像,然后這些鏡像合作,共同服務一個項目。
docker-compose 就是解決這個問題的。你的項目需要哪些鏡像,每個鏡像怎么配置,要掛載哪些 volume, 等等信息都包含在 docker-compose.yml 里。
要啟動服務,只需要 docker-compose up 就行,停止也只需要 docker-compse stop/down
簡而言之, Dockerfile 記錄單個鏡像的構建過程, docker-compse.yml 記錄一個項目(project, 一般是多個鏡像)的構建過程。
你說有些教程用了 dockerfile+docker-compose, 是因為 docker-compose.yml 本身沒有鏡像構建的信息,如果鏡像是從 docker registry 拉取下來的,那么 Dockerfile 就不需要;如果鏡像是需要 build 的,那就需要提供 Dockerfile.
docker-compose是編排容器的。例如,你有一個php鏡像,一個mysql鏡像,一個nginx鏡像。如果沒有docker-compose,那么每次啟動的時候,你需要敲各個容器的啟動參數,環境變量,容器命名,指定不同容器的鏈接參數等等一系列的操作,相當繁瑣。而用了docker-composer之后,你就可以把這些命令一次性寫在docker-composer.yml文件中,以后每次啟動這一整個環境(含3個容器)的時候,你只要敲一個docker-composer up命令就ok了。
dockerfile的作用是從無到有的構建鏡像。它包含安裝運行所需的環境、程序代碼等。這個創建過程就是使用 dockerfile 來完成的。Dockerfile - 為 docker build 命令準備的,用于建立一個獨立的 image ,在 docker-compose 里也可以用來實時 build
docker-compose.yml - 為 docker-compose 準備的腳本,可以同時管理多個 container ,包括他們之間的關系、用官方 image 還是自己 build 、各種網絡端口定義、儲存空間定義等
- Docker容器化部署使用說明書
- 環境部署
- Windows系統
- Windows部署Docker
- 安裝過程可能碰到的問題總結
- Docker部署環境
- Docker hub操作
- Docker 部署 laravel5.5問題總結
- Docker處理中文亂碼問題
- Linux系統
- Centos7.2部署Docker
- Linux部署Docker準備前工作
- 部署docker問題總結
- Linux部署Docker粗略筆記
- 安裝git
- Docker命令大全
- 問題
- php7.4 安裝xlswriter擴展
- php7.2 DockerFile文件
- dockerFile和docker-composer區別
- docker-compose的使用
- docker-compose的使用問題總結
- docker-compose
- Windows系統
- docker-compose.yml編寫
- nginx目錄如下
- conf.d
- default.conf
- nginx.conf
- php目錄如下
- Dockerfile
- redis目錄如下
- redis.conf
- docker-compose使用說明
- Linux系統
- /workspace/html/config_dev
- html
- index.html
- index.php
- nginx
- conf
- nginx.production.conf
- conf.d
- default.conf
- log
- access.log
- error.log
- Dockerfile
- php
- conf
- php.production.ini
- php-fpm.conf
- log(目錄)
- php-fpm.d
- www.conf
- supervisor
- conf
- log
- Dockerfile
- .env
- docker-compose.yml