❶ 編寫前端開發環境的docker 鏡像並發布及使用教程
如果之前沒有接觸過docker,建議把 https://docs.docker.com/get-started/ 中的part1-part10看完並實現一遍再來看本篇文章。
製作一個docker 鏡像,其內置了Node v12.22、 npm源管理器nrm、單頁面腳手架wlg-cli、多頁面腳手架mp-cli-lc、browser-sync插件及curl、vim和git等,無需在主機中安裝且這樣統一了前端開發環境。
1、編寫Dockerfile文件
2、構建鏡像文件 docker image build -t front-end-env . (這里取鏡像名稱為front-end-env)
3、使用命令行登錄docker docker login -u 你的docker用戶名
4、打標簽 docker tag front-end-env 你的docker用戶名/front-end-env
5、 上傳至倉庫 docker push 你的docker用戶名/front-end-env
1、使用如下指令進入docker容器內部
docker container run -p 3000:3000 -it 你的用戶名/front-end-env /bin/bash
(-p 3000:3000將容器內的3000埠暴露給主機3000埠,下圖中我沒有加這個)
2、驗證docker容器內部的nrm是否安裝成功
上圖,可以看到我們成功的將主機的當前目錄及文件掛載綁定到docker容器內了,進入到docker容器內後我們創建一個文件夾,在主機也會同步的創建了相同的文件夾,因為此時他們是同步的。ps:如果使用vscode,可以試試Remote-Containers 插件,可以更簡單。(本人沒有親測過)
題外話:
1、藉助虛擬機和Vagrant也可以實現類似統一環境功能。
2、使用Docker Compose可以簡化上述操作
推薦資料:
1、 https://wurang.net/webpack_hmr/
2、 https://juejin.cn/post/6932808129189150734
3、 https://www.cnblogs.com/pomelott/p/13325328.html
4、docker中的expose https://blog.csdn.net/weixin_43944305/article/details/103116557
❷ Docker實踐之鏡像啟動及常用命令
前面簡單的介紹了如何在linux中安裝 Docker ,這節內容,我們學習Docker鏡像啟動
我們Docker啟動鏡像從哪裡來呢?鏡像由我們自己或者他人構建,構建好的鏡像可以直接放在本地或者上傳到遠程鏡像倉庫。當我們運行一個Docker鏡像時,會先在本地查找是否存在所要運行的鏡像,如果沒有則會去遠程鏡像倉庫拉取,默認為官方的鏡像倉庫,當然,我們也可以改為自己的私有鏡像倉庫。接下來,我們先了解幾個簡單的命令。
我們直接在安裝好Docker的主機上執行 docker run nginx
我們從運行日誌可以看到這樣的字眼:
docker發現本地不存在nginx的鏡像文件,便直接去倉庫中查找下載並運行,因為我們沒有讓鏡像後台運行,所以這次運行起來的容器會隨著這次遠程連接斷開而停止。當我按下 ctrl+c 時,容器便會停止
如果要讓容器後台運行,則需要在啟動時加 -d 這個參數,
我們來看一下當前運行中的容器
可以看到,我們的nginx是啟動起來了,但是,我們並不能訪問它。容器有自己的一套虛擬系統,如:網路、文件。如果我們需要訪問,則需要給容器和宿主機做一個映射,讓宿主機和容器能夠交互。這里,我們就給nginx增加埠和配置文件映射。我為了省事,就直接把容器中的配置文件復制出來用
接下來,我們便來建立這個映射關系
來看看容器是否啟動成功
這時候,我們便能訪問我們的nginx服務,
前面已經說到,容器有自己的虛擬系統,如果需要持久化的數據不映射到宿主機上,那麼當容器銷毀時,數據也會隨之丟失,所以,我們在用容器運行時,一定要做好數據的保存方式。
在前面,我們列出了幾個常用的Docker命令,這里,我們把這幾個常用命令稍微講解一下,
ps主要是查詢正常運行的容器
docker ps 是當前正在運行的容器
這裡面的 CONTAINER ID 很重要,後面我們的很多操作都需要基於這個 CONTAINER ID 或者 NAMES 。
docker ps -a 則是列出運行中和停止中的所有容器,
這幾個參數這是啟動/停止/重啟/刪除容器的參數,如: docker restart 5ae0319e1795 ,如果要刪除容器,必須要先停止,否則會提示
docker run [OPTIONS] IMAGE [COMMAND] [ARG…],它的運行參數就比較復雜了,
這里還是只介紹幾個常用的命令參數吧,
運行示例 docker run -d --name nginx-cc -v /root/nginx/:/etc/nginx/ -p 9999:80 -m 256M nginx
cp命令主要是用於宿主機和容器間的文件復制,一般格式如下:
docker cp [OPTIONS] 容器名/容器Id:容器文件路徑 宿主機文件路徑 從容器復制到宿主機
docker cp [OPTIONS] 宿主機文件路徑 容器名/容器Id:容器文件路徑 從宿主機復制到容器中
inspect主要是查看容器或者鏡像元數據,如:
從返回的信息中,我們可以得到,啟動時所設置的啟動參數。如:
如果,那天我們忘記之前容器啟動的參數時,便可以通過 inspect 來幫我們找回來。
logs主要是查詢docker容器的運行日誌,如:
❸ docker build 命令
docker build 命令用於使用 Dockerfile 創建鏡像。
語法 docker build [OPTIONS] PATH | URL | -
創建一個空dir,名為py:
編輯docketfile 和 requirement.txt
然後創建鏡像
docker build -t myimage
OPTIONS說明:
--build-arg=[] : 設置鏡像創建時的變數;
--cpu-shares : 設置 cpu 使用權重;
--cpu-period : 限制 CPU CFS周期;
--cpu-quota : 限制 CPU CFS配額;
--cpuset-cpus : 指定使用的CPU id;
--cpuset-mems : 指定使用的內存 id;
--disable-content-trust : 忽略校驗,默認開啟;
-f : 指定要使用的Dockerfile路徑;
--force-rm : 設置鏡像過程中刪除中間容器;
--isolation : 使用容器隔離技術;
--label=[] : 設置鏡像使用的元數據;
-m : 設置內存最大值;
--memory-swap : 設置Swap的最大值為內存+swap,"-1"表示不限swap;
--no-cache : 創建鏡像的過程不使用緩存;
--pull : 嘗試去更新鏡像的新版本;
--quiet, -q : 安靜模式,成功後只輸出鏡像 ID;
--rm : 設置鏡像成功後刪除中間容器;
--shm-size : 設置/dev/shm的大小,默認值是64M;
--ulimit : Ulimit配置。
--tag, -t: 鏡像的名字及標簽,通常 name:tag 或者 name 格式;可以在一次構建中為一個鏡像設置多個標簽。
--network: 默認 default。在構建期間設置RUN指令的網路模式
實例
1. 使用當前目錄的 Dockerfile 創建鏡像,標簽為 runoob/ubuntu:v1。
$ docker build -t runoob/ubuntu:v1 .
Question: 這是不是name: tag的形式????
2. 使用URL github.com/creack/docker-firefox 的 Dockerfile 創建鏡像。
$ docker build github.com/creack/docker-firefox
3. 也可以通過 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
在 Docker 守護進程執行 Dockerfile 中的指令前,首先會對 Dockerfile 進行語法檢查,有語法錯誤時會返回:
$ docker build -t test/myapp .Sending build context to Docker daemon 2.048 kBError response from daemon: Unknown instruction: RUNCMD
❹ Docker鏡像
1.像一個文件聯合系統UnionFS,是一種分層、輕量級並且高性能的文件系統,它支持對文件系統的修改作為一次提交來一層層的疊加,同時可以將不同目錄掛載到同一個虛擬文件系統下,Union 文件系統是 Docker 鏡像的基礎。鏡像可以通過分層來進行繼承,基於基礎鏡像(沒有父鏡像),可以製作各種具體的應用鏡像。
bootfs(boot file system)主要包含bootloader和kernel, bootloader主要是引導載入kernel, Linux剛啟動時會載入bootfs文件系統,在Docker鏡像的最底層是bootfs。這一層與我們典型的Linux/Unix系統是一樣的,包含boot載入器和內核。當boot載入完成之後整個內核就都在內存中了,此時內存的使用權已由bootfs轉交給內核,此時系統也會卸載bootfs。
rootfs (root file system) ,在bootfs之上。包含的就是典型 Linux 系統中的 /dev, /proc, /bin, /etc 等標准目錄和文件
對於一個精簡的OS,rootfs可以很小,只需要包括最基本的命令、工具和程序庫就可以了,因為底層直接用Host的kernel,自己只需要提供 rootfs 就行了。由此可見對於不同的linux發行版, bootfs基本是一致的, rootfs會有差別, 因此不同的發行版可以公用bootfs。
3.鏡像分層的好處就是資源共享
列如:有多個鏡像都從相同的 base 鏡像構建而來,那麼宿主機只需在磁碟上保存一份base鏡像,
同時內存中也只需載入一份 base 鏡像,就可以為所有容器服務了。而且鏡像的每一層都可以被共享。
4.docker 鏡像都是只讀的,當容器啟動時,一個新的可寫層會載入到鏡像的頂部,這一層被稱為容器層,容器層之下都稱為鏡像層。
5.鏡像的構建可以通過 Dockfile 和docker commit 這兩種方式
docker commit 方式是在一個鏡像的基礎上,重新對該鏡像操作後重新生成的一個專屬的鏡像。
命令格式 docker commit -m "提交的描述信息" -a "作者信息" 容器ID 要創建的目標的鏡像名:[標簽名]
示例
❺ 查看Docker里的鏡像信息
使用docker images 命令可以列出本地主機上已有鏡像的基本信息。
REPOSITORY: 表示來自於哪個倉庫。
TAG: 表示鏡像的標簽信息,標簽只是標記,並不能標識鏡像內容。
IMAGE ID: 鏡像ID,鏡像的唯一標識,如果兩個鏡像ID相同,則說明它們實際上指向了同一個鏡像,只是具有不同標簽名而已。
CREATED: 表示鏡像最後的更新時間。
VIRTUAL SIZE: 表示鏡像大小,好的鏡像往往體積會較小。
為了方便在後續工作中使用特定鏡像,還可以使用docker tag命令為本地鏡像任意添加新的標簽。
其中test_redis和redis鏡像的ID號是相同的,其實對應的是同一個鏡像,只是使用不同的標簽而已。
使用inspect命令可以獲取鏡像的詳細信息,包括製作者、適應架構、各層的數字摘要等。
命令的語法如下:
上面返回的是一個JSON格式的消息,如果只要其中某一項的內容時,可以使用-f來指定, 語法格式如下:
既然鏡像文件由多個層組成,那麼怎麼才知道各層的內容具體是什麼呢?這時候可以使用history子命令,該命令將列出各層的創建信息。
過長的命令被自動截斷了,可以使用前面提到的--no-trunc 選項來輸出完整命令。
❻ Docker 添加標簽
可以使用 docker tag 命令,為本地鏡像添加新的標簽,如下圖所示:
這里是為 mongo:4.1.6 鏡像,添加新的鏡像標簽 mymongo ,可以看到,本地多了一個 mymongo:latest 的鏡像。
事實上, mongo:4.1.6 和 mymongo:latest 的鏡像 ID 是一模一樣的,說明它們是同一個鏡像,只是別名不同而已。
綜上, docker tag 命令功能更像是為指定鏡像添加快捷方式一樣。
❼ docker 打包鏡像命令
title: docker 打包鏡像命令
date: 2020/02/20 14:52
1、在 docker 中添加 harbor(或者其他私服)的地址
2、登錄遠程倉庫
3、拉取私服的鏡像到本地倉庫
4、查看鏡像 id,並進行打包
5、 到需要部署的機器上,載入鏡像
❽ 鏡像(Image)
1.列出鏡像列表
2.查找鏡像
1.如果需要某個鏡像時,可以從 Docker Hub 網站搜索鏡像。
2.使用 docker search 命令搜索鏡像。比如需要一個 httpd 鏡像來用於構建 web 服務。可通過 docker search 搜索 httpd ,從而找到適合的鏡像。
3.各欄位含義如下:
3.刪除鏡像
使用 ubuntu 16.04 創建一個新容器,在該容器內運行 gcc -v 可查看 gcc 是否安裝,查看 gcc 的版本號。
docker commit :從容器創建一個新的鏡像
語法
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
(指定要創建的目標鏡像名)
OPTIONS說明:
4.構建鏡像
首先需要一個 Dockerfile 文件,其中包含一系列告訴 Docker 如何構建鏡像的指令。
該Dockerfile文件位於 ~/course/docker/Dockerfile/ubuntu_gcc,使用命令 cd 切換到該目錄, 通過命令 cat 查看 Dockerfile 內容。
每一個指令都會在鏡像上創建一個新的層,每一個指令的前綴都必須是大寫的。
第一條FROM,指定使用哪個鏡像源。
第二條MAINTAINER,說明當前鏡像的維護人的信息。
RUN 指令用於說明在構建 docker 鏡像時執行哪些命令,例如安裝哪些軟體。
EXPOSE 指令說明開放哪些埠。
[圖片上傳中...(-94439e-1638445720289-0)]
docker build
命令用於使用 Dockerfile 創建鏡像。
語法
docker build [OPTIONS] PATH | URL | -
OPTIONS說明:
5.設置鏡像標簽
可以使用 docker tag 命令,為鏡像添加一個新的標簽。
docker tag 命令的語法為:
docker tag <鏡像ID> 新鏡像名:新tag。
以httpd為例
docker cp /宿主機目錄 容器id:/容器文件目錄#將宿主機目錄內容復制到容器內部目錄
容器有一個比較麻煩的地方,就是每次重啟之後會導致容器內的文件重置為初始化狀態。所以我們還需要對容器內的文件進行持久化配置持久化配置有兩種方法
方法一:直接復制。如docker cp 容器id:/etc/prometheus /zhao #將容器內部的文件復制到宿主機的/zhao文件夾下
方法二:docker run --name myprometheus -v /zhao/prometheus:/etc/prometheus -d 鏡像id#其中-v是指映射邏輯卷的意思,將宿主機上的/zhao/prometheus里的文件和文件夾復制到容器的/etc/prometheus里。-d是指後台運行
❾ Docker鏡像操作常用指令有哪些
docker version:查看docker版本;
docker info:查看docker詳細信息;
docker --help:查看docker命令;
鏡像命令
docker images:列出本地主機上的鏡像,REPOSITORY:表示鏡像的倉庫源;TAG:鏡像的標簽;IMAGE
ID:鏡像ID;CREATED:鏡像創建時間;SIZE :鏡像大小,同一個倉庫源可以有多個TAG,可以表示倉庫源的不同版本,使用REPOSITORY:TAG來定義不同的鏡像;
docker images -a:列出本地所有的鏡像;
docker images -p:只顯示鏡像ID;
docker images --digests:顯示鏡像的摘要信息;
docker images --no-trunc:顯示完整的鏡像信息;
docker search tomcat:從Docker Hub上查找tomcat鏡像;
容器命令
docker run [OPTIONS] IMAGE:根據鏡像新建並啟動容器,IMAGE是鏡像ID或鏡像名稱;
docker ps:列出當前所有正在運行的容器;
exit:退出並停止容器;
docker start 容器ID或容器名稱:啟動容器;
docker restart 容器ID或容器名稱:重新啟動容器;
docker stop 容器ID或容器名稱:停止容器;
docker kill 容器ID或容器名稱:強制停止容器;
docker rm 容器ID或容器名稱:刪除容器;
docker rm -f $(docker ps -a -q):刪除多個容器。
❿ docker常用命令
幫助文檔地址 https://docs.docker.com/engine/reference/commandline/commit/
我們可以從 Docker Hub 網站來搜索鏡像,Docker Hub 網址為: https://hub.docker.com/
當我們從 docker 鏡像倉庫中下載的鏡像不能滿足我們的需求時,我們可以通過以下兩種方式對鏡像進行更改。
①更新鏡像
各個參數說明:
我們可以使用 docker images 命令來查看我們的新鏡像 runoob/ubuntu:v2
②構建鏡像
創建一個 Dockerfile 文件
然後,我們使用 Dockerfile 文件,通過 docker build 命令來構建一個鏡像。
參數說明:
我們可以使用新的鏡像來創建容器
從上面看到新鏡像已經包含我們創建的用戶 runoob。
我們可以使用 docker tag 命令,為鏡像添加一個新的標簽。
docker tag 鏡像ID,這里是 860c279d2fec ,用戶名稱、鏡像源名(repository name)和新的標簽名(tag)。
使用 docker images 命令可以看到,ID為860c279d2fec的鏡像多一個標簽。