Docker基礎(2) 實踐篇mysql
Docker指令的操做對象主要針對四個方面:linux
具體信息能夠經過在終端輸入docker能夠查看,使用docker COMMAND --help還能夠進一步查看某條指令的使用方式。
接下來學習一些經常使用的基本指令。sql
查看Docker版本信息:docker
$ docker version
Client: Version: 18.09.7 API version: 1.39 Go version: go1.10.4 Git commit: 2d0083d Built: Fri Aug 16 14:19:38 2019 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 18.09.7 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 2d0083d Built: Thu Aug 15 15:12:41 2019 OS/Arch: linux/amd64 Experimental: false
查看設備信息,好比服務器版本、存儲驅動程序、內核版本、操做系統、總內存等:shell
$ docker info
Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 14 Server Version: 18.09.7 Storage Driver: overlay2 Backing Filesystem: extfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs ...
Docker hub是Docker的公有倉庫,通常須要的鏡像均可以從這裏下載。用戶還也能夠上傳自制的鏡像。json
查找鏡像,下面這條命令將搜索與centos相關的鏡像:centos
$ docker search centos
下載鏡像,冒號能夠指定版本號,若是省略,默認下載最新版本,至關於:latestapi
$ docker pull imageA:1.0
上傳鏡像,前提要註冊Docker Hub帳號,並使用docker login登陸bash
$ docker pull imageA:1.1
查看全部本地鏡像服務器
$ docker images
或者
$ docker image ls
每一個鏡像都有一個惟一的ImageID,全長128位,默認只顯示12位縮寫,加上-a還能夠看到build命令生成的中間鏡像。
Docker鏡像具備分層的結構,使用docker history能夠查詢一個鏡像分了多少層,以及每一層所做的變動
$ docker history dockerapitestimage:latest
IMAGE CREATED CREATED BY SIZE COMMENT 0112b74edea7 2 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["dotnet" "Web… 0B 5185fbd03612 2 weeks ago /bin/sh -c #(nop) COPY dir:9a2de08b90587d600… 294kB d2f4b4e061f1 2 weeks ago /bin/sh -c #(nop) EXPOSE 5000 0B ca882651894c 2 weeks ago /bin/sh -c #(nop) WORKDIR /app 0B e28362768eed 3 weeks ago /bin/sh -c aspnetcore_version=3.1.1 && c… 17.8MB <missing> 3 weeks ago /bin/sh -c dotnet_version=3.1.1 && curl … 76.7MB <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get ins… 2.28MB <missing> 3 weeks ago /bin/sh -c #(nop) ENV ASPNETCORE_URLS=http:… 0B <missing> 3 weeks ago /bin/sh -c apt-get update && apt-get ins… 41.3MB <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:ba0c39345ccc4a882… 69.2MB
刪除鏡像命令爲
$ docker image rm [Image Name]
經過Dockerfile能夠指定build鏡像的步驟、每一步所執行的操做,只需一次編寫,以後直接就能夠方便地運行了。
下面即是一個最簡單的Dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base WORKDIR /app EXPOSE 5000 COPY . . ENTRYPOINT ["dotnet", "WebApplication1.dll"]
Dockerfile的語法規則及經常使用的關鍵字爲:
Dockerfile編寫好後,在它所在的目錄經過docker build就能夠執行了,也能夠經過-f指定Dockerfile所在的路徑,使用-t 能夠爲要build的鏡像指定一個名稱。
$ docker build -t test:1.0
docker build會根據Dockerfile的內容,逐行根據關鍵字執行,每一步都會生成一個臨時的中間鏡像。這些中間鏡像可使用docker image ls -a查看。
查看本機現有的容器,默認只顯示正在運行的,增長-a可顯示全部容器,包括中止的
$ docker ps -a
基於鏡像建立並啓動容器,-d 可讓容器在後臺運行,--name能夠指定容器名稱,經過--env傳遞環境變量,
$ docker run -d --name api1 [Image Name]
容器建立後,Docker會給它分配一個Container ID,也是128位,默認顯示前12位,經過Container ID或者建立容器時指定的name,就能夠控制容器的啓動中止了。
$ docker stop <container id/name>
$ docker start <container id/name>
查看容器運行日誌可使用:
$ docker logs <container id/name>
下面這條命令能夠查詢容器的全部基本信息,包括運行狀況、存儲位置、配置參數、網絡設置等
$ docker inspect <container id/name>
docker inspect以JSON格式展現所有信息,也能夠經過"-f"使用Golang模板來提取指定的信息
$ docker inspect -f {{.NetworkSettings.Bridge}} <container id/name>
實時查看容器所佔用的系統資源,如CPU使用率、內存、網絡和磁盤開銷:
$ docker stats <container id/name>
在容器內部執行命令的方式
$ docker exec <container id/name> <cmd>
稍微複雜的應用都會使用多個容器,若是要一個一個容器地啓動會很是麻煩,再加上集羣和容器間的依賴,將使應用的維護變得很是困難。Docker compose提供了一種最基本的多容器管理的方式。
好比,WordPress應用的建立須要下面兩條指令:
$ docker run --name db --env MYSQL_ROOT_PASSWORD=example -d mariadb
$ docker run --name MyWordPress --link db:mysql -p 8080:80 -d wordpress
因爲MyWordPress容器依賴其db容器,因此要先啓動db容器。
中止的時候先中止MuWordPress容器,再中止db。
而使用Docker Compose就能夠方便的管理存在多容器依賴的應用了。
首先須要單獨安裝docker-compose。
並編寫docker-compose.yml文件,上面WordPress的命令改造爲docker-compose.yml後的內容以下,使用yml語法:
wordpress: image:wordpress links: - db:mysql ports: - 8080:80 db: image:mariadb environment: MYSQL ROOT PASSWORD:example
而後在docker-compose.yml文件所在目錄執行
$ docker-compose up
就能夠一次啓動WordPress所依賴的全部容器了。
以後應用的啓停也很是方便:
$ docker-compose stop
$ docker-compose start
docker-compose在啓停時,會自動識別容器間的依賴順序,根據依賴順序逐個啓停容器。
Docker還支持命令的嵌套執行,好比
根據容器ID查找:
$ docker ps -a |grep 0453e874jh93
只顯示容器相關的鏡像和容器名稱:
$ docker ps |awk '{pring $2,$NF}'
批量刪除已經中止運行的容器:
$ docker rm $(docker ps -a -q)
參考資料 李金榜 尹燁 劉天斯 陳純 著 《按部就班學Docker》