前言
什麼是 Docker?
Docker 可以幫助你快速部屬應用程式,不需要設定系統環境,減少開發人員與使用者部屬時間。
下圖是 Docker 在作業系統中的架構,圖來自 Docker 官網。
從上圖得知,作業系統上安裝 Docker 平台,透過它可以執行數個應用程式,且應用程式之間是獨立運行的。
Docker 基礎名詞解釋
Image
Image(映像檔),開發人員撰寫程式並把需要依賴的套件環境整個打包在一起,要部屬應用程式要有 image 才能進行。
Container
Container(容器),透過 Image 部屬出來的應用,一個 Image 可以部屬數個 Container,且這些 Container 之間互不影響,也不會影響 image 本體。
Docker Compose
Docker Compose 是將很多 Docker 服務和啟動參數打包在一個文件 docker compose.yml
中,可以在其他環境下使用。我自己是用 Docker Compose 來使用 Docker 的服務。
有些應用它會需要依賴許多套件,例如資料庫 MySQL、PostgreSQL。
一般使用 Docker 服務流程:
Pull Docker Image(下載 Image)–> 透過指令
docker run
或docker compose up -d
–> Docker Container 部屬成功
安裝 Docker 和 Docker Compose
安裝 Docker
使用指令 curl
從官網下載。
curl -fsSL https://get.docker.com/ | sh
提高使用者執行權限。
sudo gpasswd -a username docker #username 自行換成使用者帳號
newgrp docker
啟動 Docker 服務。
sudo service docker start
安裝 Docker Compose
使用指令 curl
從 Github Release 下載。
sudo curl -SL https://github.com/docker/compose/releases/download/v2.29.2/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
確認 Docker Compose 是否安裝成功。
docker compose version
部屬 Docker 服務
我們以 Hello World 來示範:
Docker Run 方式部屬
首先下載 Hello World Image:
$ docker pull hello-world
Using default tag: latest
latest: Pulling from library/hello-world
c1ec31eb5944: Pull complete
Digest: sha256:91fb4b041da273d5a3273b6d587d62d518300a6ad268b28628f74997b93171b2
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest
接著使用 docker run hello-world
跑 Hello World。
$ docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
若有輸出內容代表 Hello World 已成功啟動。
Docker Compose 方式部屬
若使用 Docker Compose 建議先建立資料夾存放 docker-compose.yml
文件,因為有些專案會需要實際位置存放資料。
mkdir hello-world
cd hello-world
nano docker-compose.yml
將下列參數貼上至 docker-compose.yml
,「CTRL + X」儲存。
services:
hello_world:
image: hello-world
參數說明
services:使用的程式套件,依照想要的功能可以掛上其他套件,例如資料庫。
services: server: image: server database: image: database test: image: test
輸入 docker compose up
啟動。
$ docker compose up
[+] Running 2/1
✔ Network hello-world_default C... 0.1s
✔ Container hello-world-hello_world-1 Created 0.0s
Attaching to hello_world-1
hello_world-1 |
hello_world-1 | Hello from Docker!
hello_world-1 | This message shows that your installation appears to be working correctly.
hello_world-1 |
hello_world-1 | To generate this message, Docker took the following steps:
hello_world-1 | 1. The Docker client contacted the Docker daemon.
hello_world-1 | 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
hello_world-1 | (amd64)
hello_world-1 | 3. The Docker daemon created a new container from that image which runs the
hello_world-1 | executable that produces the output you are currently reading.
hello_world-1 | 4. The Docker daemon streamed that output to the Docker client, which sent it
hello_world-1 | to your terminal.
hello_world-1 |
hello_world-1 | To try something more ambitious, you can run an Ubuntu container with:
hello_world-1 | $ docker run -it ubuntu bash
hello_world-1 |
hello_world-1 | Share images, automate workflows, and more with a free Docker ID:
hello_world-1 | https://hub.docker.com/
hello_world-1 |
hello_world-1 | For more examples and ideas, visit:
hello_world-1 | https://docs.docker.com/get-started/
hello_world-1 |
hello_world-1 exited with code 0
若有輸出內容代表 Hello World 已成功啟動。
以上是基本使用 Docker 的流程,關於 Docker compose 需要補充的地方,未來會更新一篇文章細部講解。
附錄
Docker 常用指令
docker compose up -d #背景啟動容器
docker compose down #停止容器
docker compose pull #更新 image(先 docker compose down 容器)
docker images #查看已下載的映像檔
docker image prune -a #刪除無用的映像檔
docker system prune -a #刪除無用的映像檔與已經停止的容器