介紹
Docker 實作了一種輕量的虛擬化技術
Docker 是基于 cGroup,namespace 等 Linux 內核技術實作對 Linux Container 的管理引擎
概念
Docker: Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的 Linux 機器上,也可以實作虛擬化,
Docker Container: Docker 容器由 Docker 鏡像創建,Docker 容器持有應用程式運行所需要的所有環境,Docker 容器有 run,started,stopped,moved,和 deleted 這幾種狀態,每一個容器是一個隔離的,安全的應用程式運行平臺,Docker 容器是 Docker 運行的組件,
Docker Image: 一個 Docker 鏡像是一個只讀的模板,例如,一個容器可以包含一個 Ubuntu 作業系統和 Apache 程式,一個 Docker 鏡像可以用來創建多個 Docker 容器,Docker 提供了簡單的方式去編譯一個新的 Docker 鏡像或者更新一個新的鏡像,同時可以從 Docker Registry 下載不同的鏡像,
Docker Registry: Docker 倉庫是 Docker 官方提供的一個開源程式,用來存盤和分發 Docker 鏡像,
Docker Hub: Docker 官方提供的公有 Docker Registry,
Docker 安裝, 驗證
Linux、windows都支持
Docker服務驗證:
windows在powershell 下運行命令:
PS C:\Users\aa> docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:7d91b69e04a9029b99f3585aaaccae2baa80bcf318f4a5d2165a9898cd2dc0a1
Status: Downloaded newer image for hello-world:latest
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/
打包應用程式到Docker鏡像中
在 Docker 容器中訪問檔案有兩種方式:
? 一種不用拷貝檔案到 Docker image,直接在 Docker container 啟動的時候 mount 到 Docker container 中(docker run -v /host_data:/container_dir)
? 另一種就是 build Docker image 的時候直接將相關檔案拷貝到 Docker image 中
以 Docker image 方式發布整個應用程式的場景來說,需要構建一個新的 Docker image 并且將所有相關檔案和運行時依賴拷貝到 Docker image 中
使用 Dockerfile 來構建 Docker Image,
常用Docker 命令:
1、docker run :創建一個新的容器并運行一個命令
2、docker start :啟動一個或多個已經被停止的容器
3、docker stop :停止一個運行中的容器
4、docker restart :重啟容器
5、docker rm :洗掉一個或多少容器
6、docker create :創建一個新的容器但不啟動它
7、docker exec:在運行的容器中執行命令
8、docker ps : 列出容器
9、docker commit :從容器創建一個新的鏡像,
10、docker pull : 從鏡像倉庫中拉取或者更新指定鏡像
11、docker push : 將本地的鏡像上傳到鏡像倉庫,要先登陸到鏡像倉庫
12、docker search : 從Docker Hub查找鏡像
13、docker images : 列出本地鏡像
14、docker images : 列出本地鏡像
15、docker info : 顯示 Docker 系統資訊,包括鏡像和容器數,
16、docker version :顯示 Docker 版本資訊
Dockfile
Dockfile是一個用于撰寫docker鏡像生成程序的檔案
Dockefile語法:
FROM:指定一個構建鏡像的基礎源鏡像,如果本地沒有就會從公共庫中拉取,沒有指定鏡像的標簽會使用默認的latest標簽,可以出現多次,如果需要在一個Dockerfile中構建多個鏡像
MAINTAINER:描述鏡像的創建者,名稱和郵箱
RUN: 用法:RUN "command" "param1" "param2" ,RUN命令是一個常用的命令,執行完成之后會成為一個新的鏡像,這里也是指鏡像的分層構建
CMD: 用法:CMD command param1 param2, CMD在Dockerfile中只能出現一次,有多個,只有最后一個會有效
EXPOSE:用法:EXPOSE [...], 告訴Docker服務器容器對外映射的容器埠號,在docker run -p的時候生效
ENV: 用法: ENV只能設定一個, EVN =允許一次設定多個; 設定容器的環境變數,可以讓其后面的RUN命令使用,容器運行的時候這個變數也會保留
ADD: 用法:ADD, 復制本機檔案或目錄或遠程檔案,添加到指定的容器目錄,支持GO的正則模糊匹配,
COPY: 用法:COPY, COPY除了不能自動解壓,也不能復制網路檔案,其它功能和ADD相同
ENTRYPOINT: 用法:ENTRYPOINT "command" "param1" "param2" , 這個命令和CMD命令一樣,唯一的區別是不能被docker run命令的執行命令覆寫,如果要覆寫需要帶上選項--entrypoint,如果有多個選項,只有最后一個會生效,
VOLUME: 用法:VOLUME ["path"], 在主機上創建一個掛載,掛載到容器的指定路徑, docker run -v命令也能完成這個操作,而且更強大
USER: 用法:USER daemon, 指定運行容器時的用戶名或UID,后續的RUN、CMD、ENTRYPOINT也會使用指定的用戶運行命令
WORKDIR: 用法:WORKDIR path, 為RUN、CMD、ENTRYPOINT指令配置作業目錄
ONBUILD: 用法:ONBUILD [INSTRUCTION], 鏡像創建后,如果其它鏡像以這個鏡像為基礎,會先執行這個鏡像的ONBUILD命令
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的
構建SpringBoot 專案鏡像
-
編譯打包準備部署的Springboot 包
-
在專案根目錄下邊下Dockerfile 檔案
#java:8 是使用jdk版本
FROM java:8
#添加jar到容器并重命名
ADD dubbo-web/target/dubbo-web-0.0.1-SNAPSHOT.jar /app.jar
#執行jar檔案
ENTRYPOINT ["java","-jar","/app.jar"]
- 使用docker build命令生成鏡像
>docker build -t monitor-alarm .
Sending build context to Docker daemon 101.2MB
Step 1/3 : FROM java:8
8: Pulling from library/java
5040bd298390: Pull complete
fce5728aad85: Pull complete
76610ec20bf5: Pull complete
60170fec2151: Pull complete
e98f73de8f0d: Pull complete
11f7af24ed9c: Pull complete
49e2d6393f32: Pull complete
bb9cdec9c7f3: Pull complete
Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d
Status: Downloaded newer image for java:8
---> d23bdf5b1b1b
Step 2/3 : ADD dubbo-web/target/dubbo-web-0.0.1-SNAPSHOT.jar /app.jar
---> a657bb2d605e
Step 3/3 : ENTRYPOINT ["java","-jar","/app.jar"]
---> Running in 577af7d5bc0c
Removing intermediate container 577af7d5bc0c
---> 58706e8fd73d
Successfully built 58706e8fd73d
Successfully tagged monitor-alarm:latest
- 查看本地鏡像倉庫
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
monitor-alarm latest 58706e8fd73d About a minute ago 711MB
hello-world latest d1165f221234 6 months ago 13.3kB
- 運行本地容器
docker run -d -p
-d: 后臺運行
-p: 8080是指在doucker暴露在外部的埠,80是指docker里面的專案的埠
docker run -d -p 8080:80 monitor-alarm
47e20eda38cd35c4ef5e7f794025ab645ed237976373bff870cb5a769b798ca6
- 使用docker ps 查看運行容器狀態資訊
PS C:\Users\aa> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
47e20eda38cd monitor-alarm "java -jar /app.jar" 10 seconds ago Up 10 seconds 0.0.0.0:8080->80/tcp compassionate_jennings
-
專案訪問
使用我們的機器ip以及暴露外部的映射埠8080訪問
-
查看服務的日志
docker logs --tail 10 47e20eda38cd
2021-09-05 04:11:49.373 INFO 1 --- [.27.2.210:2181)] org.apache.zookeeper.ClientCnxn : Client session timed out, have not heard from server in 12002ms for sessionid 0x0, closing socket connection and attempting reconnect
2021-09-05 04:11:49.473 INFO 1 --- [.27.3.210:2181)] org.apache.zookeeper.ClientCnxn : Opening socket connection to server 10.27.3.210/10.27.3.210:2181. Will not attempt to authentic
- 停掉服務, stop 加上容器id
docker stop 47e20eda38cd
- 洗掉容器, 必須是停止狀態才可以洗掉
docker rm 47e20eda38cd
- 查看容器行程
docker top 47e20eda38cd
本文來自博客園,作者:chaplinthink,轉載請注明原文鏈接:https://www.cnblogs.com/bigdata1024/p/15230513.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297729.html
標籤:其他
上一篇:AcWing 第15場周賽
