Docker介紹
Docker是一個開源的應用容器引擎,它允許開發者打包他們的應用以及應用的依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器或Windows服務器上。容器是完全使用沙箱機制(程序受控的環境),相互之間不會有任何接口(類似iPhone的app)而且更輕量級。
docker核心:容器 鏡像 倉庫
當我們利用docker安裝應用時,docker會自動搜索并下載應用鏡像(image).鏡像不僅包含應用本身,還包含應用運行所需要的環境,配置,系統函數庫。docker會在運行鏡像時創建一個隔離環境,稱為容器(container)
容器Container:
容器是鏡像創建的運行實例,它是一個輕量級的、可執行的獨立軟件包,包含了運行應用程序所需的一切:代碼、運行時、系統工具、系統庫和設置。
容器化技術使得軟件可以在幾乎任何地方以相同的方式運行,解決了“在我的機器上可以運行”的問題。
鏡像Image:
鏡像是構建容器的模板,它是一個只讀的模板,用于創建Docker容器。
鏡像通常是通過一個Dockerfile定義的,Dockerfile包含了構建鏡像所需的指令。
倉庫Registry:
Docker倉庫用于存儲和分發Docker鏡像。
公共的Docker Hub是最大的Docker鏡像倉庫,用戶可以在那里找到、分享和運行高質量的Docker鏡像。
Docker的主要特點:
可移植性:Docker容器可以在任何支持Docker的操作系統上運行,應用部署和遷移變得非常簡單。
隔離性:容器之間是相互隔離的,一個容器的崩潰不會影響其他容器。
輕量級:容器不需要像虛擬機那樣啟動一個完整的操作系統,因此它們可以快速啟動,并且占用更少的系統資源。
安全性:容器運行在自己的隔離環境中,并且可以限制對系統資源的訪問,從而提供了額外的安全層。
Docker的工作流程:
編寫Dockerfile:定義應用的依賴、環境變量、配置等。
構建鏡像:通過Dockerfile構建應用鏡像。
運行容器:從鏡像啟動一個或多個容器實例。
管理容器:啟動、停止、監控和刪除容器。
共享鏡像:將構建好的鏡像推送到Docker倉庫,以便在其他機器上使用
使用Docker的優勢:
快速部署和擴展:容器可以在秒內啟動,這對于需要快速擴展服務的應用場景非常有用。
持續集成和持續部署(CI/CD):Docker可以簡化從開發到生產環境的部署流程。
微服務架構:Docker容器非常適合微服務架構,因為它允許將應用分解為多個獨立的服務。
Docker的yum庫
Docker的yum源是一個軟件倉庫,它允許用戶通過yum包管理器在基于Red Hat的Linux發行版(如CentOS、Fedora)上輕松地安裝、更新和卸載Docker及其相關組件。Yum(Yellowdog Updater, Modified)是一個用于RPM-based Linux系統的自動化更新和軟件包安裝的工具。
安裝yum工具
yum install -y yum-utils
配置Docker的yum源(更新為阿里云yum源)
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.reposudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
更新yum,建立緩存
sudo yum makecache fast
安裝Docker
安裝命令:
yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
啟動和校驗:
docker -v #查看Docker版本
systemctl start docker # 啟動Docker
docker images #列出運行在本地Docker主機上的所有鏡像
systemctl stop docker # 停止Docker
systemctl restart docker # 重啟
systemctl enable docker # 設置開機自啟
docker ps # 執行docker ps命令,如果不報錯,說明安裝啟動成功
配置鏡像加速:
mkdir -p /etc/docker # 創建目錄
# 復制內容,注意把其中的鏡像加速地址改成你自己的
tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://mirrors.tuna.tsinghua.edu.cn","http://mirrors.sohu.com","https://ustc-edu-cn.mirror.aliyuncs.com","https://ccr.ccs.tencentyun.com","https://docker.m.daocloud.io","https://docker.awsl9527.cn"]
}
EOF
systemctl daemon-reload????????????????# 重新加載配置
systemctl restart docker????????????????# 重啟docker
Docker常用命令
幫助命令
docker version #顯示docker版本信息
docker info #顯示docker系統信息,包含鏡像和容器數量
docker [conmand] --help #幫助命令
鏡像命令
docker images #查看所有本地主機上的鏡像 相當于docker image ls
docker iamges -aq #查看所有鏡像id
docker search #搜索鏡像
docker pull #下載鏡像
docker pull image[:tag] #下載指定版本鏡像,tag不寫默認是latest版本
docker rmi #刪除鏡像
docker rmi -f imageid #刪除指定鏡像
docker commit #鏡像提交
docker save #保存鏡像
docker load #加載鏡像
docker push #上傳鏡像
docker build #構建鏡像
docker tag
docker login #登錄dockerhub
docker loout #登出
容器命令
docker run #運行容器(如果鏡像不存在會自動拉取鏡像并運行)
--name: #為容器指定一個名稱;
-d: #后臺運行容器,并返回容器ID,也即啟動守護式容器;
-p: #端口映射,-p標志用于指定端口映射,它允許你將容器內的端口映射到鏡像端口#映射有以下格式
# -p ip:主機端口:容器端口
# -p 主機端口:容器端口(常用)
# -p 容器端口
# 容器端口
-P: #隨機端口映射;
-w: #指定命令執行時,所在的路徑
#例:docker run -d --name nignx -p 80:80 nginx
#后臺運行最新版本nginx ,容器名字定義為nginx,鏡像,容器端口都是80docker stop #停止容器
docker kill #強停容器
docker ps #查看運行中的容器
docker ps -a #查看所有容器
docker rm #刪除容器(只能刪除已經停止的容器)
docker rm -f #刪除容器(可以刪除運行中的容器)
docker start #啟動容器
docker restart #重啟容器
docker stats #查看容器狀態(cpu情況等)
docker logs #查看容器日志
docker logs -f #查看日志,持續輸出日志
docker logs --tail number #查看number條數量的日志
docker top #查看容器進程信息
docker exec -it container bash #進入容器內部
docker attach container #進入容器正在執行的終端
docker cp container:容器文件路徑 主機路徑 #從容器內復制文件到主機
docker inspect #查看容器詳情
docker network #自定義網絡
數據卷(volume)是一個虛擬目錄,容器目錄與宿主機目錄之間映射的橋梁。
宿主機文件系統目錄 /var/lib/docker/volumes
數據卷相關命令
docker volume --help #查看幫助信息
docker volume create #創建數據卷
docker volume ls #查看所有數據卷
docker volume rm #刪除指定數據卷
docker volume inspect 卷名 #查看某個數據卷的詳情
docker volume prune #清除數據卷(未使用的數據卷)
docker -v 本地目錄:容器目錄 #具名掛載,完成本地目錄掛載
#例 docker -v /mysql:/var/lib/mysql 掛在到mysql目錄下(目錄掛載) **目錄掛載必須以"/"或者"./"開頭**
# docker -v mysql:/var/lib/mysql 會被識別為數據卷掛載,數據卷為mysql(卷映射)
Dockerfile制作鏡像
FROM | 指定鏡像基礎環境 |
RUN | 運行自定義命令 |
CMD | 容器啟動命令或參數 |
LABEL | 自定義標簽 |
EXPOSE | 指定暴露端口 |
ENV | 環境變量 |
ADD | 添加文件到鏡像 |
COPY | 復制文件到鏡像 |
ENTRYPOINT | 容器固定啟動命令 |
VOLUME | 數據卷 |
USER | 指定用戶和用戶組 |
WORKDIR | 指定默認工作目錄 |
ARG | 指定構建參數 |
#簡單Dockerfile例子
FROM openjdk:17
LABEL author=Olivia
COPY app.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -f Dockerfile -t myjavaapp:v1.0 . #構建鏡像,最后的.不可缺少
DockerCompose
用來批量管理容器的工具
docker-compose.yaml-------用來定義一組相關聯的應用容器
頂級元素
name
services? ? ? ? ? ? ?
networks
volumes
configs
sercets
常用命令:
docker compose -f yaml文件名 up -d #創建和運行容器 默認會查找compose.yaml文件,也可以指定具體文件名
docker compose -f yaml文件名 down #停止并刪除所有由up子命令啟動的服務