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

Linux?Docker的環(huán)境配置與簡單使用詳解

 更新時間:2025年11月17日 08:49:33   作者:fengyehongWorld  
本文詳細(xì)介紹了如何在Windows系統(tǒng)上配置WSL、Docker?Desktop以及VSCode插件,并通過示例項目展示了如何使用Dockerfile打包鏡像、運行容器、停止和刪除容器、查看容器日志和復(fù)制文件等常用Docker命令,同時,還介紹了如何使用docker-compose簡化多容器應(yīng)用的配置和管理

一. 環(huán)境配置

1.1 安裝WSL

詳情請參考下面這篇博客

Linux Windows之wsl安裝使用簡介

1.2 安裝配置 Docker Desktop

從官網(wǎng)下載安裝Docker Desktop

安裝完成之后,進(jìn)行如下配置

  • 指定Docker鏡像的磁盤存儲位置
  • 指定對應(yīng)的wsl

當(dāng)我們的wsl和docker都配置完成之后,使用下面的命令應(yīng)該能看到docker的版本和wsl的掛載目錄

apluser@FengYeHong-HP:~$ docker --version
Docker version 28.1.1, build 4eba377
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ls -l /mnt/wsl/
drwxr-xr-x 4 root root 100 Jun 11 20:06 docker-desktop
drwxr-xr-x 3 root root  60 Jun 11 20:06 docker-desktop-bind-mounts
-rw-r--r-- 1 root root 198 Jun 11 20:06 resolv.conf

1.3 VS Code 插件安裝

Docker擴展

  • 提供對Dockerfile的語法檢測,代碼高亮,自動補全
  • 可以通過菜單運行各種Docker命令
  • 可以在左側(cè)面板中看到我們創(chuàng)建的所有鏡像,容器等

Dev Containers擴展

  • 支持在容器中打開代碼項目
  • 自動配置開發(fā)環(huán)境,通過 .devcontainer 目錄定義語言版本、依賴、插件等
  • 調(diào)試支持,支持容器內(nèi)調(diào)試(Node.js、Python、C++ 等)

1.4 下載項目,配置Dockerfile

執(zhí)行下面的git命令,下載示例項目

git clone https://github.com/mattwojo/helloworld-django.git

?下載完成之后,移動到示例項目的根目錄,應(yīng)該會看到這樣的目錄

apluser@FengYeHong-HP:helloworld-django$ ls -l
total 148
-rw-r--r-- 1 apluser apluser    483 Jun 11 20:48 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun  7 16:56 db.sqlite3
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project

二. 常用Docker命令簡介

?所有的命令都可以通過docker --help查看

2.1 Dockerfile打包鏡像

在項目的根目錄下手動創(chuàng)建一個Dockerfile文件,創(chuàng)建之后的目錄如下

apluser@FengYeHong-HP:helloworld-django$ ls -l
total 148
-rw-r--r-- 1 apluser apluser    196 Jun  7 16:54 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun  7 16:56 db.sqlite3
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project
apluser@FengYeHong-HP:helloworld-django$
apluser@FengYeHong-HP:helloworld-django$ cat Dockerfile
# 安裝python環(huán)境, 指定基礎(chǔ)鏡像
FROM python:3.11-slim
# 創(chuàng)建一個名為 app 的工作目錄
WORKDIR /app
# 將當(dāng)前目錄下的 requirements.txt 復(fù)制到app工作目錄中
COPY requirements.txt .

# 運行pip命令, 安裝python項目所需的依賴
RUN pip install --no-cache-dir -r requirements.txt
# 將當(dāng)前目錄下的所有內(nèi)容都復(fù)制到app工作目錄中
COPY . /app

# 指定8000端口
EXPOSE 8000
# 啟動python項目
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
  • -t參數(shù)用來指定 image 文件的名字,后面還可以用冒號指定標(biāo)簽。如果不指定,默認(rèn)的標(biāo)簽就是latest。
  • 最后的那個.表示Dockerfile文件所在的路徑,因為當(dāng)前路徑在Dockerfile文件所在的目錄,所示是一個.。
docker image build -t helloworld-django .
# 或者
docker image build -t helloworld-django:0.0.1 .

2.2 image鏡像

2.2.1docker image ls查看所有鏡像

apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED        SIZE
helloworld-django   latest    51fedeaf85ff   2 days ago     363MB
hello-world         latest    0b6a027b5cf3   4 months ago   20.4kB

2.2.2docker image rm 鏡像ID刪除指定鏡像

apluser@FengYeHong-HP:~$ docker image rm 51fedeaf85ff
Untagged: helloworld-django:latest
Deleted: sha256:51fedeaf85ffdc569edae785cce00602eb90b4a7a12766c6f671a517f0c4f199
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker image ls
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    0b6a027b5cf3   4 months ago   20.4kB

2.3 container容器

2.3.1docker run創(chuàng)建并啟動容器

  • -it:容器的 Shell 映射到當(dāng)前的 Shell,然后你在本機窗口輸入的命令,就會傳入容器
  • --rm:容器一旦停止就會自動刪除(僅在臨時測試時使用)
  • -p:容器的 8000 端口映射到本機的 8100 端口
  • helloworld-django:latest:指定要啟動的容器
apluser@FengYeHong-HP:~$ docker run -it --rm -p 8100:8000 helloworld-django:latest
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
June 14, 2025 - 00:12:19
Django version 3.2.25, using settings 'web_project.settings'
Starting development server at http://0.0.0.0:8000/
Quit the server with CONTROL-C.

容器啟動之后,在瀏覽器中就可以看到如下所示的界面

2.3.2docker container ls --all查看所有容器

  • docker container ls:查看正在運行的容器
  • docker container ls --all:查看正在所有容器,包括已經(jīng)停止運行的容器

docker ps 的作用和docker container相同,只不過從語義化上看來,docker container更好。

2.3.3 容器的停止

2.3.3.1docker stop

docker stop 容器ID:停止正在運行的容器。注意:停止運行的容器并不會被刪除。

  • docker stop <容器ID或名稱> 會向容器發(fā)送 SIGTERM 信號,讓其優(yōu)雅退出,如果在默認(rèn)的 10 秒內(nèi)還沒退出,則發(fā)送 SIGKILL 強制終止。
  • docker kill <容器ID或名稱> 會立即強制終止容器(不等待)
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
d32995d7a305   helloworld-django:latest   "python manage.py ru…"   22 minutes ago   Up 22 minutes   0.0.0.0:8100->8000/tcp   kind_bassi
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker stop d32995d7a305
d32995d7a305
2.3.3.2docker container stop
apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
783e1ad29407   helloworld-django:latest   "python manage.py ru…"   16 minutes ago   Up 16 minutes   0.0.0.0:8100->8000/tcp   reverent_lalande
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker container stop 783e1ad29407
783e1ad29407

2.3.4 容器的刪除

2.3.4.1docker rm

如果你不只是要停止容器,還想連容器一起刪除(比如臨時容器),可以用docker rm -f-f 相當(dāng)于先 stoprm

apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS         PORTS                    NAMES
4c07319bbebc   helloworld-django:latest   "python manage.py ru…"   11 seconds ago   Up 9 seconds   0.0.0.0:8100->8000/tcp   infallible_sammet
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker rm -f 4c07319bbebc
4c07319bbebc
2.3.4.2docker container rm

語義化更好

apluser@FengYeHong-HP:~$ docker container ls --all
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS                      PORTS                    NAMES
6380b917ff0c   helloworld-django:latest   "python manage.py ru…"   44 seconds ago   Up 42 seconds               0.0.0.0:8100->8000/tcp   determined_boyd
f0e58479ba3d   helloworld-django          "python manage.py ru…"   54 minutes ago   Exited (0) 54 minutes ago                            vigorous_leavitt
cca37d72e4ba   helloworld-django          "python manage.py ru…"   54 minutes ago   Exited (0) 54 minutes ago                            musing_franklin
f51614fe80d9   helloworld-django:latest   "python manage.py ru…"   55 minutes ago   Exited (0) 54 minutes ago                            unruffled_franklin
bb11c3bbaf5f   helloworld-django          "python manage.py ru…"   56 minutes ago   Exited (0) 56 minutes ago                            relaxed_banach
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker container rm bb11c3bbaf5f
bb11c3bbaf5f
apluser@FengYeHong-HP:~$

2.3.5docker exec進(jìn)入容器內(nèi)部

apluser@FengYeHong-HP:~$ docker container ls
CONTAINER ID   IMAGE                      COMMAND                  CREATED          STATUS          PORTS                    NAMES
783e1ad29407   helloworld-django:latest   "python manage.py ru…"   12 seconds ago   Up 11 seconds   0.0.0.0:8100->8000/tcp   reverent_lalande
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ docker exec -it 783e1ad29407 bash
root@783e1ad29407:/app# ls -l
total 20
-rw-r--r-- 1 root root  483 Jun 11 11:48 Dockerfile
-rw-r--r-- 1 root root    0 Jun 13 23:58 db.sqlite3
drwxr-xr-x 4 root root 4096 Jun  7 00:38 hello
-rwxr-xr-x 1 root root  667 Jun  7 00:38 manage.py
-rw-r--r-- 1 root root   16 Jun  7 00:38 requirements.txt
drwxr-xr-x 3 root root 4096 Jun  7 00:38 web_project

2.3.6docker container start啟動一個既存的容器

docker run的方式會創(chuàng)建并啟動一個容器,同樣的命令運行兩次,就會生成兩個一模一樣的容器文件。

如果希望重復(fù)使用容器,就要使用docker container start命令,它用來啟動已經(jīng)生成、已經(jīng)停止運行的容器文件。

2.3.7docker container logs查看 docker 容器的輸出

docker 容器的輸出,即容器里面 Shell 的標(biāo)準(zhǔn)輸出。如果

  • docker run 命令運行容器的時候,沒有使用-it參數(shù)
  • docker container start 直接啟動既存容器時

就要用這個命令查看輸出。

2.3.8docker container cp復(fù)制容器內(nèi)的文件到本地

將容器內(nèi)的requirements.txt文件復(fù)制到本地的指定路徑中

apluser@FengYeHong-HP:~$ docker exec -it f0e58479ba3d bash
root@f0e58479ba3d:/app#
root@f0e58479ba3d:/app# ls -l
total 20
-rw-r--r-- 1 root root  483 Jun 11 11:48 Dockerfile
-rw-r--r-- 1 root root    0 Jun 13 23:58 db.sqlite3
drwxr-xr-x 4 root root 4096 Jun  7 00:38 hello
-rwxr-xr-x 1 root root  667 Jun  7 00:38 manage.py
-rw-r--r-- 1 root root   16 Jun  7 00:38 requirements.txt
drwxr-xr-x 3 root root 4096 Jun  7 00:38 web_project
root@f0e58479ba3d:/app#
root@f0e58479ba3d:/app# exit
exit
apluser@FengYeHong-HP:~$ docker container cp f0e58479ba3d:/app/requirements.txt /home/apluser/work/
Successfully copied 2.05kB to /home/apluser/work/
apluser@FengYeHong-HP:~$
apluser@FengYeHong-HP:~$ ls -l /home/apluser/work/requirements.txt
-rw-r--r-- 1 apluser apluser 16 Jun  7 09:38 /home/apluser/work/requirements.txt

2.4 registry倉庫

Docker Registry 是 Docker 提供的鏡像倉庫服務(wù),用于 存儲、分發(fā)和管理 Docker 鏡像??墒褂?Docker Registry 來

  • 上傳(push)鏡像
  • 下載(pull)鏡像
  • 搭建私有鏡像倉庫

Docker Registry 常與 docker login, docker push, docker pull 命令配合使用。

2.4.1docker pull鏡像拉取

?鏡像拉取語法:docker pull <registry>/<倉庫>:<標(biāo)簽>

# 從docker的官網(wǎng)倉庫拉取nginx鏡像
docker pull nginx:latest
# 從私人倉庫拉取鏡像
docker pull myregistry.com:5000/myimage:latest

2.4.2docker push鏡像推送

在推送鏡像之前,你需要為鏡像添加倉庫地址和標(biāo)簽。

# docker tag <本地鏡像ID或名稱> <registry>/<鏡像名稱>:<標(biāo)簽>
docker tag myapp:latest myregistry.com:5000/myapp:latest

向指定的倉庫推送鏡像

# docker push <registry>/<鏡像名稱>:<標(biāo)簽>
docker push myregistry.com:5000/myapp:latest

三. docker-compose

3.1 遇到的問題

當(dāng)我們直接使用docker run -it --rm -p 8100:8000 helloworld-django:latest命令創(chuàng)建并運行容器的時候,django工程會出現(xiàn)下面的提示,原因就在于我們在并沒有進(jìn)行數(shù)據(jù)遷移。

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.

我們可以通過下面的方式進(jìn)行數(shù)據(jù)遷移

docker run -it \
-v $(pwd)/db.sqlite3:/app/db.sqlite3 \
-w /app \
helloworld-django \
python manage.py migrate

注意,在此案例中數(shù)據(jù)遷移之后的有數(shù)據(jù)的db.sqlite3文件并不在容器中,而是在本地的路徑下。

因此,之后真正啟動容器的時候,必須要將本地目錄下的db.sqlite3文件掛載到容器中才行,也就是說容器中的程序讀取的是本地目錄中的db.sqlite3文件

使用掛載的數(shù)據(jù)的同時,啟動容器

  • -v /主機路徑文件:/容器路徑文件 這會讓容器內(nèi)部使用主機上的文件,從而讓 db.sqlite3 的內(nèi)容得以持久保存。
  • -w /app 設(shè)置容器內(nèi)的工作目錄是 /app,這個要與你 Dockerfile 中 WORKDIR 設(shè)置一致(通常也是 /app
docker run -it -p 8100:8000 \
-v $(pwd)/db.sqlite3:/app/db.sqlite3 \
-w /app \
helloworld-django

但是輸入這么長的命令,不僅繁瑣,還很容器出錯,有沒有什么更好的辦法?

3.2docker-compose.yml配置文件

將命令行中的配置命令,通過yml文件的方式簡化到配置文件中

apluser@FengYeHong-HP:helloworld-django$ ls -l
total 152
-rw-r--r-- 1 apluser apluser    483 Jun 11 20:48 Dockerfile
-rw-r--r-- 1 apluser apluser 131072 Jun 14 14:49 db.sqlite3
-rw-r--r-- 1 apluser apluser    259 Jun 14 15:14 docker-compose.yml
drwxr-xr-x 4 apluser apluser   4096 Jun  7 09:38 hello
-rwxr-xr-x 1 apluser apluser    667 Jun  7 09:38 manage.py
-rw-r--r-- 1 apluser apluser     16 Jun  7 09:38 requirements.txt
drwxr-xr-x 3 apluser apluser   4096 Jun  7 09:38 web_project
apluser@FengYeHong-HP:helloworld-django$
apluser@FengYeHong-HP:helloworld-django$ cat docker-compose.yml
services:
  web:
    image: helloworld-django
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8100:8000"
    volumes:
      - ./db.sqlite3:/app/db.sqlite3
    working_dir: /app
    command: python manage.py runserver 0.0.0.0:8000

3.3docker-compose build構(gòu)建鏡像

3.4 數(shù)據(jù)遷移

docker-compose run web python manage.py migrate
  • 執(zhí)行命令進(jìn)行數(shù)據(jù)遷移
  • 此處的web應(yīng)當(dāng)和docker-compose.yml文件中的services對應(yīng)的名稱相同

需要注意的是,這種 docker-compose run 會啟動一個一次性容器,它不會被 docker-compose up 管理到。

3.5docker-compose up運行容器

# --remove-orphans 在啟動的時候,刪除被遺漏的容器
docker-compose up --remove-orphans
# 在后臺啟動容器
docker-compose up -d

如下圖所示,容器啟動成功,頁面也能正常訪問。

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux加入windows ad域步驟詳解(winbindsamba方案)

    Linux加入windows ad域步驟詳解(winbindsamba方案)

    本文主要實驗centos加入windows AD的方法,大家參考使用
    2013-12-12
  • 兩個linux服務(wù)器間復(fù)制文件方式

    兩個linux服務(wù)器間復(fù)制文件方式

    這篇文章主要介紹了兩個linux服務(wù)器間復(fù)制文件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Linux其他備選高級IO模型用法詳解

    Linux其他備選高級IO模型用法詳解

    文章介紹了Linux系統(tǒng)中同步與異步I/O模型,包括阻塞I/O、非阻塞I/O、IO多路復(fù)用(select/poll/epoll)、信號驅(qū)動I/O和異步I/O,重點解析了各模型工作原理、優(yōu)缺點及適用場景,強調(diào)通過非阻塞、多路復(fù)用和事件驅(qū)動機制提升I/O效率,減少資源消耗,適用于高并發(fā)網(wǎng)絡(luò)服務(wù)等場景
    2025-09-09
  • Openssl實現(xiàn)雙向認(rèn)證教程(附服務(wù)端客戶端代碼)

    Openssl實現(xiàn)雙向認(rèn)證教程(附服務(wù)端客戶端代碼)

    這篇文章主要介紹了Openssl實現(xiàn)雙向認(rèn)證教程(附服務(wù)端客戶端代碼),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Linux xfs文件系統(tǒng)的優(yōu)勢與配置方法

    Linux xfs文件系統(tǒng)的優(yōu)勢與配置方法

    在當(dāng)今高性能計算、云原生架構(gòu)和大規(guī)模數(shù)據(jù)處理場景下,文件系統(tǒng)的選擇對整體性能和穩(wěn)定性起著至關(guān)重要的作用,XFS 作為 Linux 系統(tǒng)中成熟且功能強大的日志型文件系統(tǒng),本文將詳細(xì)介紹xfs文件系統(tǒng)的優(yōu)勢與配置方法,需要的朋友可以參考下
    2026-04-04
  • linux如何無損調(diào)整分區(qū)大小

    linux如何無損調(diào)整分區(qū)大小

    本篇文章主要介紹了linux如何無損調(diào)整分區(qū)大小,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 虛擬機克隆linux centos6.5系統(tǒng)網(wǎng)卡配置圖文教程

    虛擬機克隆linux centos6.5系統(tǒng)網(wǎng)卡配置圖文教程

    這篇文章主要為大家詳細(xì)介紹了虛擬機克隆linux centos6.5系統(tǒng)網(wǎng)卡配置的圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Apache實現(xiàn)本地建立泛域名虛擬主機的方法

    Apache實現(xiàn)本地建立泛域名虛擬主機的方法

    這篇文章主要介紹了Apache實現(xiàn)本地建立泛域名虛擬主機的方法,簡單介紹了Apache泛域名虛擬主機的具體創(chuàng)建步驟與相關(guān)技巧,需要的朋友可以參考下
    2016-05-05
  • Apache同時支持PHP和Python的配置方法

    Apache同時支持PHP和Python的配置方法

    服務(wù)器是windows系統(tǒng),安裝的是Apache,這里就為給大家介紹如何讓Apache像支持Php那樣支持Python,有需要的小伙伴參考下。
    2015-04-04
  • linux使用scp實現(xiàn)服務(wù)器A向服務(wù)器B傳輸文件

    linux使用scp實現(xiàn)服務(wù)器A向服務(wù)器B傳輸文件

    這篇文章主要介紹了linux使用scp實現(xiàn)服務(wù)器A向服務(wù)器B傳輸文件的相關(guān)資料,需要的朋友可以參考下
    2016-04-04

最新評論

拜城县| 兴国县| 屯门区| 仲巴县| 酒泉市| 雷山县| 东乌珠穆沁旗| 布拖县| 许昌市| 吉木萨尔县| 金坛市| 临夏市| 南皮县| 镇平县| 建始县| 五指山市| 鄂托克前旗| 北碚区| 蕉岭县| 巴中市| 红原县| 夹江县| 仪陇县| 上林县| 商丘市| 连州市| 盱眙县| 明水县| 聂拉木县| 宜兰县| 沅江市| 亳州市| 历史| 沈阳市| 湛江市| 奈曼旗| 桂东县| 交口县| 银川市| 股票| 肇东市|