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