Docker:基礎

jackwolfey發表於2024-06-07

Docker:基礎

Docker中涉及的基本概念

映象(images):由一系列檔案組成。是一個靜態的概念。  
容器(container):一個封閉的獨立的執行環境。是一個動態的概念。  
映象和容器的區別可以類比為系統安裝中的ISO檔案和作業系統的區別。
ISO檔案是一個靜態的東西,我們可以透過ISO去安裝一個作業系統,一個執行的作業系統可以理解為是一個容器。

Docker的安裝

curl -sSL https://get.daocloud.io/docker | sh

此方法需要安裝好curl

Docker常用命令

拉取映象

docker pull name:tag

檢視本地映象

docker images

檢視本地容器

檢視正在執行的容器

docker ps

檢視所有建立過但沒有被刪除的容器

docker ps -a

刪除一個映象

docker rmi (name:tag 或 映象ID)

刪除一個容器

docker rm 容器ID

啟動一個容器

方法1:以互動方式啟動於前臺

docker run -it name:tag

常用引數:

--name 為容器指定一個名字

-p 為容器指定容器內部對本機的埠對映

-v 為容器指定容器內部對本機的路徑對映

例:

docker run -d -p 80:80 -v /data/dist/:/usr/share/nginx/html nginx:latest

此時可以透過Ctrl+P+Q使容器置於後臺執行
如果想要使容器再次返回前臺,使用命令

docker attach 容器ID

方法2:以守護程序的方式在後臺執行

docker run -it -d name:tag

進入某個容器

docker exec -it 容器ID /bin/bash

將某個容器儲存成映象

docker commit 容器ID name:tag

停止一個容器

docker stop 容器ID

重啟已被停止的某個容器

docker start 容器ID

重啟一個正在執行的的容器

docker restart 容器ID

將宿主機中的檔案傳入容器內

docker cp /home/file.txt 容器ID:/home/

修改映象名稱

docker tag name:tag new_name:new_tag

檢視容器日誌

docker logs 容器ID

打包映象

docker save -o image.tar name:tag

載入打包好的映象

docker load -i image.tar

將某個容器的檔案系統打包

該命令僅適用於當一個映象經過多次commit後刪除了一部分舊檔案但映象大小沒有縮小需要壓縮映象大小的情況

docker export -o image.tar 容器ID

從檔案系統歸檔檔案建立映象

docker import image.tar name:tag

DockerFile的使用

DockerFile說明

DockerFile:是映象的描述檔案,描述了我們的映象是怎麼一步步構成的
使用build命令可以輕鬆的透過編寫好的DockerFile來構建我們自己的docker映象

例:使用/home/project目錄下的DockerFile檔案來構建映象

docker build -t name:tag /home/project/

DockerFile中常見的關鍵字

  • FROM: 所製作映象的基礎映象
  • MAINTAINER: 定義作者
  • ADD: 複製檔案並解壓
  • COPY: 僅複製
  • SHELL: 指定shell
  • RUN: 執行shell命令
  • ENV: 定義環境變數
  • CMD: 在啟動容器的時候,執行的命令
  • WORKDIR: 進入容器之後的落腳點
  • EXPOSE: 容器對外保留的埠
  • ENTRYPOINT: 在啟動容器的時候,執行的命令

DockerFile示例

# 依賴的基礎映象
FROM openjdk:8-jdk-alpine

# 映象的維護者和郵箱地址
MAINTAINER hweiyu<hwy_dod@163.com>

# 容器構建過程中,執行命令並建立新的映象層
# 注意:多個 RUN 命令時,最好透過 && 進行合併操作,要不然,在 docker 構建時,每個 RUN 會生成一層,造成容器臃腫變大
RUN echo "http://mirrors.aliyun.com/alpine/latest-stable/main/" > /etc/apk/repositories && \
   echo "http://mirrors.aliyun.com/alpine/latest-stable/community/" >> /etc/apk/repositories && \
   apk update && \
   apk add --no-cache gcc libc-dev make openssl-dev pcre-dev zlib-dev linux-headers curl && \

# 切換到工作目錄,同cd命令:cd /usr/local/myapp
WORKDIR /usr/local/myapp

# 將宿主目錄中的檔案複製到映象中
# ADD 不僅能複製宿主主機中的檔案,還能是URL指向的檔案。而且如果指向的檔案是tar壓縮包,在複製到容器後,會進行自動解壓
# ADD ./spring-boot-demo.jar app.jar
# COPY 僅能複製宿主主機中的檔案
COPY ./spring-boot-demo.jar app.jar

# 定義系統環境變數
ENV profile prod
ENV timezone Asia/Shanghai

# 容器啟動時,需要執行的命令,shell格式:
# ENTRYPOINT java -jar -Dspring.profiles.active=$profile -Duser.timezone=$timezone app.jar
CMD java -jar -Dspring.profiles.active=$profile -Duser.timezone=$timezone app.jar

# 對外暴露的埠號
EXPOSE 80 443

相關文章