Docker
是使用 GoLang
開發的開源容器引擎,能夠方便的打包開發好的應用,而後分發到任意 linux
主機上。mysql
與傳統的虛擬機相比擁有如下優點:linux
因爲不須要進行硬件虛擬和運行完整的操做系統等額外開銷,不管是應用執行速度、內存損耗或者文件存儲速度, Docker
都更加高效sql
Docker
容器應用直接運行與宿主內核,無需啓動完整的操做系統,能夠作到秒級啓動docker
Docker
鏡像提供了除內核外的完整運行環境,確保了應用運行環境的一致性json
能夠經過 Docker
鏡像來實現服務的持續交付、部署。使用 Dockerfile
來構建鏡像,使用持續集成系統進行集成測試;使用鏡像結合持續部署系統進行自動部署後端
只須要遷移鏡像及鏡像運行的數據就可在其餘主機或平臺運行bash
因爲使用鏡像進行部署,使維護更爲容易。因爲支持在鏡像的基礎上進行定製,使得擴展變得更簡單。而官方也維護了一大批高質量的鏡像,大大下降了鏡像的製做成本wordpress
Docker
提供了倉庫(Repository
)用於存放製做好的鏡像,方便使用者獲取,在本地可通知配置多個 Repository
。測試
可使用命令來拉取鏡像:ui
docker pull [repo url>/]image name>
默認的 repo url
是 hub.docker.com
,拉取默認倉庫中的鏡像時是不須要 url
的。
如拉取 debian
: docker pull debian
。
咱們也可將本身製做好的鏡像推送到倉庫,以便分發,使用命令:
docker push [<repo url>/]<image name>[:<image tag>>
使用 docker search
命令則可搜索默認 repo url
內的鏡像。
鏡像加速
因爲默認 repo url
在國外,爲了加快拉取速度,須要指定其爲國內的,向 /etc/docker/daemon.json
中添加:
{ "registry-mirrors": ["https://registry.docker-cn.com"] }
即可使用 Docker
在中國的鏡像加速站。
對於企業用戶還可搭建本身的私有鏡像倉庫,方便管理內部鏡像。
鏡像是通過 Dockerfile
規則打包生成的, Dockerfile
文件了指明瞭鏡像的生成及運行方式。
這裏簡單介紹下 Dockerfile
中經常使用的命令:
指明基於那個鏡像,一般是一個系統環境,如 debian
。在多階段(stage
)構建中可以使用 FROM ... AS ...
來命令階段,供後面的階段使用
設置鏡像的環境變量
導出端口,語法: EXPOSE port/protocol
執行一條命令
複製鏡像內部的文件,也可從指定 stage
中複製文件,使用 --from=<stage name>
來實現
複製本地文件到鏡像中,並作了一些額外工做,如自動解壓文件、保持文件屬性等
切換工做目錄
CMD
執行命令,極容易在 docker run
時被覆蓋。主要用於指定鏡像的默認啓動命令,有如下三種語法:
CMD ["executable", "param1", "param2"]
Exec
模式,首先CMD ["param1", "param2"]
設置 ENTRYPOINT
的默認參數CMD command param1 param2
Shell
模式指定鏡像默認的運行命令,可使用 --entrypoint
參數在 docker run
時覆蓋 Dockerfile
內的 ENTRYPOINT
有 Exec
和 Shell
兩種模式
一般使用這個命令來指定鏡像的啓動命令,由於 CMD
稍不注意就被覆蓋了
更多關於 Dockerfile
內容請參見: Dockerfile reference
這裏給出一個簡單的 Dockerfile=, 是 =debian sid
的:
FROM scratch ADD rootfs.tar.xz / CMD ["bash"]
使用 docker build -f <Dockerfile path> [-t <image name>[:<tag>]] .
建立鏡像和標記 Tag
Tag
可用來標記不一樣的鏡像版本,就像版本號。
使用 docker image ls
能夠列出下載下來的鏡像
使用 docker run
命令運行鏡像,可以使用參數配置,下面給出一個例子:
docker run -it -d -p <local port>:<container port> -v <local path>:<container path> <image>
-i
是交互式操做-t
是終端-p
指定端口映射-v
指定 volume
映射-d
後臺模式使用 docker image rm <image id>
刪除鏡像
docker save <image id> > <image save>.tar
docker load < <image save>.tar
容器是鏡像運行後的實體,運行與屬於本身的獨立的命名空間。
使用 docker run
命令啓動鏡像就能夠建立一個容器
使用 docker ps
可列出正在運行的容器,加上 -a
參數可列出因此存在的容器
使用 docker container start <containe id>
啓動容器
使用 docker container stop <containe id>
終止容器
dcoker container pause <containe id>
dcoker container restart <containe id>
dcoker container logs <containe id>
docker container rm <container id>
命令可刪除容器
使用 docker exec -it <container id> /bin/sh
命令可進入容器的執行環境
docker import <container export>.tar <container name>
docker export <container id> > <container export>.tar
直接運行鏡像不便於部署服務,於是官方推出了 Docker Compose
來負責應用部署。
使用 docker-compose.yml
文件將應用須要的鏡像都定義在一塊兒,而後使用 docker-compose
命令來部署。
docker-compose.yml
的語法詳見: Compose file version 3 reference,這裏給出一份部署 wordpress
的文件:
version: "3.7" services: wordpress: image: wordpress ports: - "8080:80" networks: - backend mysql: image: mysql volumes: - db-data:/var/lib/mysql/data networks: - backend volumes: db-data: networks: backend:
啓動服務,加上 -d
表示在後端運行
終止服務
構建服務中的容器
驗證文件格式是否有誤
進入指定的容器,如進入上面 wordpress
中的 mysql
則是: docker-compose exec mysql
顯示日誌,可指定容器
重啓服務
更多命令請見: Overview of docker-compose CLI