最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在Linux系統(tǒng)中使用Dockerfile創(chuàng)建Docker的完整步驟

 更新時間:2025年11月21日 08:21:21   作者:沒傘的行者  
Dockerfile是Docker用來構(gòu)建鏡像的文本文件,包含自定義的指令和格式,這篇文章主要介紹了在Linux系統(tǒng)中使用Dockerfile創(chuàng)建Docker的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

1. Docker 簡介

Docker 是一種輕量級的容器化技術(shù),它可以將應用程序及其運行環(huán)境打包成一個獨立的“容器”(Container)。這個容器包含運行所需的一切依賴,如操作系統(tǒng)環(huán)境、庫、配置文件等,從而實現(xiàn)“一次構(gòu)建,處處運行”。

相比傳統(tǒng)的虛擬機,Docker 啟動速度更快、占用資源更少,因為它直接基于宿主機的 Linux 內(nèi)核運行,不需要額外的系統(tǒng)虛擬化層。開發(fā)者可以使用 Docker 來:

  • 快速搭建統(tǒng)一的開發(fā)環(huán)境;
  • 將應用打包成可移植的鏡像;
  • 實現(xiàn)自動化部署與持續(xù)集成;
  • 避免“在我電腦上能跑”的環(huán)境不一致問題。

在實際使用中,我們通常通過 Dockerfile 來定義鏡像的構(gòu)建過程。Dockerfile 是一個包含多條指令的文本文件,描述了從基礎鏡像開始,如何安裝依賴、復制文件、設置環(huán)境變量、以及定義容器啟動命令。
構(gòu)建完成后,只需一條命令即可生成鏡像,并在任意安裝了 Docker 的系統(tǒng)上運行。

2. 編寫Dockerfile文本文件

2.1 創(chuàng)建文件

終端先cd到你要保存此文件的路徑下,再執(zhí)行下面的命令,創(chuàng)建一個空的Dockerfile文件:

echo "" > Dockerfile
# Dockerfile 名字不能改,區(qū)分大小寫

2.2 編寫Dockerfile內(nèi)容

使用geditVs Code打開Dockerfile:

# gedit 安裝命令
# sudo apt install gedit
gedit Dockerfile

構(gòu)造方式分為單階段多階段,區(qū)別就是多階段構(gòu)造出來的Docker體積可能更?。ㄈQ于你的具體情況),也就是存在某些包是你Docker中不需要但是在創(chuàng)建Docker過程中必須需要的包,否則,這一優(yōu)勢并得不到體現(xiàn),通?;居脝坞A段構(gòu)造沒有任何問題,通常多一個包也不會多多大的體積。要想減小Docker體積,最有效的方法是刪除構(gòu)建過程中的臨時/緩存文件。

2.2.1 單階段構(gòu)造

在Dockerfile中添加你需要的內(nèi)容,以下為示例,應根據(jù)自己需求添加或刪減,推薦這種方式,簡單不傷腦:

# 使用 Ubuntu 22.04 作為基礎鏡像(基礎鏡像可自選)
FROM ubuntu:22.04

# 設置非交互模式,避免安裝過程中彈出提示
ENV DEBIAN_FRONTEND=noninteractive

# 前面設置了非交互式,可不用設置時區(qū)
# 設置時區(qū)為 UTC (0時區(qū)),避免交互式選擇時產(chǎn)生錯誤
# ENV TZ=UTC
# 設置時區(qū)為北京時間(東八區(qū)),并連接正確的時區(qū)文件
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 安裝必要的一些工具和 Python 3.10 (可以根據(jù)需要修改)
RUN apt-get update && apt-get install -y \
    python3.10 \
    python3.10-dev \
    python3.10-venv \
    python3-pip \
    python3-setuptools \
    build-essential \
    gcc-9 \
    g++-9 \
    cmake \
    gdb \
    curl \
    wget \
    git \
    vim \
    tzdata && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* #刪除臨時/緩存構(gòu)造文件

# 更新 pip 為最新版
RUN python3.10 -m pip install --upgrade pip

# 安裝常用的 Python 庫(可以根據(jù)需要修改)
RUN python3.10 -m pip install --no-cache-dir \
    wheel \
    setuptools \
    pandas \
    numpy \
    requests \
    flask \
    pytest \
    opencv-python \
    PyYAML

# 設置工作目錄(workspace 可自定義)
WORKDIR /workspace

# 默認命令
CMD ["/bin/bash"]

2.2.2 多階段構(gòu)建

以下為多階段構(gòu)建Docker的Dockerfile示例,這種情況一定清楚有哪些包是構(gòu)建過程必須而最終產(chǎn)物無需的,否則付出和收益可能達不到預期。

# 第一階段:構(gòu)建階段
FROM ubuntu:22.04 AS builder

# 設置非交互模式,避免安裝過程中彈出提示
ENV DEBIAN_FRONTEND=noninteractive

# 設置時區(qū)為上海時間
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 安裝構(gòu)建工具和 Python 3.10
RUN apt-get update && apt-get install -y \
    python3.10 \
    python3.10-dev \
    python3.10-venv \
    python3-pip \
    python3-setuptools \
    build-essential \
    gcc-9 \
    g++-9 \
    cmake \
    gdb \
    wget \
    unzip \
    tar \
    curl \
    wget \
    git \
    vim \
    tzdata && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 更新 pip 為最新版
RUN python3.10 -m pip install --upgrade pip

# 安裝常用的 Python 庫(可以根據(jù)需要修改)
RUN python3.10 -m pip install --no-cache-dir \
    wheel \
    setuptools \
    pandas \
    numpy \
    requests \
    flask \
    pytest \
    opencv-python \
    PyYAML

# 第二階段:運行環(huán)境
FROM ubuntu:22.04 AS runtime

# 設置非交互模式,避免安裝過程中彈出提示
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# 安裝生產(chǎn)環(huán)境所需的基礎依賴
RUN apt-get update && apt-get install -y \
    python3.10 \
    python3.10-venv \
    python3-pip \
    python3-setuptools \
    tzdata && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 從構(gòu)建階段復制已安裝的 Python 包到運行時階段
COPY --from=builder /root/.local /root/.local
COPY --from=builder /usr/local /usr/local

# 設置工作目錄
WORKDIR /workspace

# 默認命令
CMD ["/bin/bash"]

3. 使用Dockerfile文件創(chuàng)建Docker

3.1 (可選)添加中國大陸Docker Hub 鏡像源

如果你在中國大陸,Docker Hub 的官方鏡像源可能比較慢,可以嘗試配置國內(nèi)的鏡像源進行加速下載。

# vim 安裝命令
# sudo apt install vim
sudo vim /etc/docker/daemon.json

運行上面的命令,將下面的內(nèi)容添加到daemon.json中:

{
    "registry-mirrors": [
        "https://docker.m.daocloud.io",
        "https://docker.1panel.live",
        "https://hub.rat.dev"
    ]   
}

你也可以嘗試添加別的鏡像源來加速。

添加后,重啟Docker服務:

systemctl daemon-reexec
systemctl restart docker

3.2 創(chuàng)建Docker

有了Dockerfile之后,就可以開始使用命令創(chuàng)建Docker了,打開終端,cd到存放Dockerfile的路徑下,執(zhí)行命令,開始構(gòu)建Docker:

docker build -t <docker name>:<tag> .
# for example
docker build -t ubuntu22-04:base .
docker build -t first_docker:v1.0.0 .

輸入準確命令后回車執(zhí)行,如下終端截圖,耐心等待,受網(wǎng)絡和機器性能影響,耗時不太確定:

創(chuàng)建完成后,執(zhí)行 docker images 來查看當前機器中的鏡像。

3.3 測試/使用鏡像

使用創(chuàng)建好的Docker來起一個容器,測試Docker是否符合預期:

docker run -it --rm --name Test-Docker -v /home/solun/Docker:/workspace/Docker_map ubuntu22-04:base

# 參數(shù)解釋
--rm 		#加上這個參數(shù),當退出容器,容器停止運行時,容器會自動刪除
--name 		#指定容器的名字
-v 			#用于指定宿主機和容器的路徑映射,映射后,容器便可訪問宿主機被映射的路徑下的資源,
	 		#-v 可以有多個,一個 -v 指定一個路徑映射關系,當你要映射多個路徑到容器中,那就多來幾個-v

運行后,就直接進入了容器:

在另一個終端中使用命令 docker ps -a 查看當前機器中所有的容器:

我映射了宿主機的/home/solun/Docker 到容器的 /workspace/Docker_map,因此容器中Docker_map內(nèi)的內(nèi)容就是宿主機的Docker中的內(nèi)容:

查看容器中是否包含Dockerfile中指定的那些pip包:

pip list

到這里基本就沒什么問題了,可以使用你的Docker或容器了。

4. 保存/分享Docker

4.1 保存Docker

將Docker保存成.tar文件

docker save -o <tar_name>.tar <docker_name>:tag
# 參數(shù)解釋
tar_name 		#要保存的.tar文件名
docker_name 	#剛才創(chuàng)建的Docker的名字
tag 			#剛才創(chuàng)建的Docker的tag
# for example
docker save -o Ubuntu_22-04.tar ubuntu22-04:base

4.2 分享Docker

上面保存的tar文件可以隨意分享給他人,而他人在安裝了Docker的機器上只需使用下面的命令加載tar文件里的Docker即可:

docker load -i <tar_name>.tar
# for example
docker load -i Ubuntu_22-04.tar

加載后,使用docker images即可查看電腦上新加載的鏡像。

5. Docker容器基礎常用命令

5.1 創(chuàng)建容器

docker run -it --name <容器名稱> -v <宿主機絕對路徑>:<容器內(nèi)的絕對路徑> <docker名>:<docker tag>
# for example
docker run -it --name Test-Docker -v /home/solun/Docker:/workspace/Docker_map ubuntu22-04:base

5.2 停止/啟動/重啟已有容器

docker stop <容器名/容器ID>
docker start <容器名/容器ID>
docker restart <容器名/容器ID>

5.3 進入容器

docker exec -it <容器名/容器ID> /bin/bash

5.4 退出容器

exit			# 容器會被關閉
exit -d 		# 容器不會被關閉
ctrl + p +q		# 容器不會被關閉

5.5 刪除容器

docker rm <容器名/容器ID>

5.6 復制文件

# 從容器內(nèi) 復制到 容器外
docker cp <容器ID/名稱>:<容器內(nèi)路徑> <容器外路徑>
# 從容器外 復制到 容器內(nèi)
docker cp <容器外路徑> <容器ID/名稱>:<容器內(nèi)路徑>

5.7 設置容器自動啟動

# 在創(chuàng)建時設置
docker run -it --name <容器名稱> --restart=always -v <宿主機絕對路徑>:<容器內(nèi)的絕對路徑> <docker名>:<docker tag>
# 已存在容器設置自啟動
docker update --restart=always <容器名/容器ID>
or
docker container update --restart=always <容器名/容器ID>

5.8 容器端口映射

docker run -it --name <容器名> -p <宿主機端口>:<容器端口> <docker名>:<docker tag>

總結(jié) 

到此這篇關于在Linux系統(tǒng)中使用Dockerfile創(chuàng)建Docker的文章就介紹到這了,更多相關Linux使用Dockerfile創(chuàng)建Docker內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Docker run流程及鏡像的基本命令詳解

    Docker run流程及鏡像的基本命令詳解

    本文主要介紹了Docker中run流程及鏡像的基本命令,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • 手把手教你實現(xiàn)給Docker開啟IPv6網(wǎng)絡支持

    手把手教你實現(xiàn)給Docker開啟IPv6網(wǎng)絡支持

    這篇文章主要為大家介紹了Docker開啟IPv6網(wǎng)絡支持實現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • 如何使用Docker部署briefing視頻聊天系統(tǒng)

    如何使用Docker部署briefing視頻聊天系統(tǒng)

    briefing是一個開源的、安全的直接視頻群聊平臺,這篇文章主要介紹了使用Docker部署briefing視頻聊天系統(tǒng)的詳細過程,需要的朋友可以參考下
    2024-01-01
  • docker批量啟動關閉所有容器的操作

    docker批量啟動關閉所有容器的操作

    這篇文章主要介紹了docker批量啟動關閉所有容器的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 使用Docker命令查看容器最后300行實時日志

    使用Docker命令查看容器最后300行實時日志

    在日常的容器化應用管理中,日志是排查問題、監(jiān)控運行狀態(tài)的重要工具,Docker 提供了簡便的命令來查看容器日志,幫助開發(fā)者和運維人員快速定位問題,本篇博客將詳細介紹如何使用 Docker 命令查看指定容器的最后 300 行實時日志,需要的朋友可以參考下
    2025-03-03
  • docker中Overlay網(wǎng)絡的使用小結(jié)

    docker中Overlay網(wǎng)絡的使用小結(jié)

    Docker Overlay網(wǎng)絡是跨主機通信的虛擬網(wǎng)絡驅(qū)動,基于分布式存儲實現(xiàn)動態(tài)路由與安全加密,本文就來詳細的介紹一下docker中Overlay網(wǎng)絡的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-09-09
  • docker鏡像完全卸載的操作步驟

    docker鏡像完全卸載的操作步驟

    這篇文章主要介紹了docker鏡像完全卸載的操作步驟,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker數(shù)據(jù)管理之Volume與Bind?Mount的核心技術(shù)詳解

    Docker數(shù)據(jù)管理之Volume與Bind?Mount的核心技術(shù)詳解

    這篇文章主要為大家詳細介紹了Docker數(shù)據(jù)持久化的兩種核心技術(shù),主要是Volume(數(shù)據(jù)卷)和Bind?Mount(綁定掛載),有需要的小伙伴可以了解下
    2026-05-05
  • 詳解docker進行數(shù)據(jù)掛載的三種模式

    詳解docker進行數(shù)據(jù)掛載的三種模式

    Docker?提供了三種方式將數(shù)據(jù)從宿主機掛載到?Docker容器中:?volumes、bind?mounts、tmpfs?,這篇文章主要介紹了docker進行數(shù)據(jù)掛載的三種模式,需要的朋友可以參考下
    2022-05-05
  • Docker每次啟動容器,IP及hosts指定的操作

    Docker每次啟動容器,IP及hosts指定的操作

    這篇文章主要介紹了Docker每次啟動容器,IP及hosts指定的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論

巴楚县| 万年县| 焦作市| 兴宁市| 新乡县| 纳雍县| 泰安市| 故城县| 绩溪县| 崇仁县| 元氏县| 四会市| 公安县| 石首市| 巴彦县| 珲春市| 桦南县| 新乡县| 拜城县| 宽甸| 鄂托克前旗| 仪陇县| 余姚市| 新民市| 乐陵市| 宁远县| 常德市| 米林县| 外汇| 伊春市| 类乌齐县| 繁昌县| 齐齐哈尔市| 开阳县| 开鲁县| 剑川县| 濉溪县| 蓬莱市| 牟定县| 广水市| 新乡市|