當前位置:首頁 » 軟體系統 » docker裡面可以安裝什麼系統
擴展閱讀
什麼軟體可以直播上學 2025-05-22 13:35:03

docker裡面可以安裝什麼系統

發布時間: 2022-11-27 08:29:44

A. 如何在docker中安裝ubuntu系統

前提條件
Docker要求是64位Ubuntu(無論哪個版本)。另外,內核必須在最小為3.10。3.10最新版本或更新的版本也行。
3.10之前版本缺少docker運行所需要的特徵一些容器。這些老版本的bug,經常導致數據損失。
使用命令: uname -r 來顯示內核版本:
$ uname -r
3.11.0-15-generic

備注: 如果你之前安裝過Docker 使用的APT, 確保升級你的APT源 到 Docker新版.
更新APT源
Docker』s APT 倉庫 包括 Docker 1.7.1 及更高版本. 為了設定 APT 使用最新倉庫的軟體包,:
使用 sudo or root 許可權登陸計算機.
打開 terminal window(命令窗口).
更新安裝包信息, 確保 APT 使用 https 協議, 同時CA 證書已經被安裝.
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates

添加新的GPGkey.
$ sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys

用編輯器打開 /etc/apt/sources.list.d/docker.list.
如果不存在,則新建一個
刪除任何現有輸入.
添加與您Ubuntu操作系統相關條目。
該條目可以是:
備注: Docker沒有為所有架構提供代碼包 .你可以找到 nightly built binaries in To install docker on a multi-architecture system, add an [arch=...] clause to the entry. 詳細內容參考 Debian Multiarch wiki .
On Ubuntu Precise 12.04 (LTS)
deb /repo ubuntu-precise main

On Ubuntu Trusty 14.04 (LTS)
deb h /repo ubuntu-trusty main

Ubuntu Wily 15.10
deb /repo ubuntu-wily main

Ubuntu Xenial 16.04 (LTS)
deb repo ubuntu-xenial main

保存並關閉 /etc/apt/sources.list.d/docker.list file.
更新APT 軟體包索引.
$ sudo apt-get update

清除舊的repo if it exists.
$ sudo apt-get purge lxc-docker

確保 APT 是從正確的代碼庫拉取下來的.
$ apt-cache policy docker-engine

至此,你可以 使用命令apt-get upgrade, APT 從新代碼庫拉取代碼.
Ubuntu 版本相關的先決條件
Ubuntu Xenial 16.04 (LTS)
Ubuntu Wily 15.10
Ubuntu Trusty 14.04 (LTS)
針對Ubuntu Trusty, Wily, and Xenial, 推薦安裝 the linux-image-extra-* 內核包. linux-image-extra-* 包允許你使用 aufs存儲驅動.
為了安裝 linux-image-extra-* :
打開主機命令窗口.
更新包管理器.
$ sudo apt-get update

安裝推薦包.
$ sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual

繼續安裝 Docker.
Ubuntu Precise 12.04 (LTS)
針對Ubuntu Precise, Docker 要求是 3.13內核. 如果內核版本早於 3.13, 必須更新. 參考如下表格來對比不同包對運行環境的要求:

Package
Description

linux-image-generic-lts-trusty Generic Linux kernel image. This kernel has AUFS built in. This is required to run Docker.
linux-headers-generic-lts-trusty Allows packages such as ZFS and VirtualBox guest additions which depend on them. If you didn't install the headers for your existing kernel, then you can skip these headers for the"trusty" kernel. If you're unsure, you should include this package for safety.
xserver-xorg-lts-trusty Optional in non-graphical environments without Unity/Xorg. Required when running Docker on machine with a graphical environment.

To learn more about the reasons for these packages, read the installation instructions for backported kernels, specifically the LTS Enablement Stack — refer to note 5 under each version.
libgl1-mesa-glx-lts-trusty
為了更新linux內核並且安裝附加包, 通過以下步驟:
打開主機命令窗口.
更新包管理器.
$ sudo apt-get update

安裝必需包和可選包
$ sudo apt-get install linux-image-generic-lts-trusty

根據你的運行環境, 你可能需要根據之前提供表格所描述內容安裝其他內容.
重啟主機.
$ sudo reboot

重啟之後, 繼續安裝Docker.
安裝
確保你已經安裝過你的Ubuntu版本所需前提要求.
然後, 通過以下步驟安裝Docker:
用具有sudo許可權的用戶登陸Ubuntu.
Update your APT package index.
$ sudo apt-get update

安裝 Docker.
$ sudo apt-get install docker-engine

開始使用docker.
$ sudo service docker start

確認docker已被正確安裝.
$ sudo docker run hello-world

這個命令下載一個測試圖片並且在容器(container)中運行. 然後容器container運行, 列印出相關信息.說明安裝成功.

B. Docker搭建與使用

docker 命令與 Docker 引擎通訊之間通過 UnixSocket ,但是能夠有許可權訪問 UnixSocket 的用戶只有 root 和 docker 用戶組的用戶才能夠進行訪問,所以我們需要建立一個 docker 用戶組,並且將需要訪問 docker 的用戶添加到這一個用戶組當中來。

這里使用的是 阿里雲提供的鏡像加速 ,登錄並且設置密碼之後在左側的 Docker Hub 鏡像站點 可以找到專屬加速器地址,復制下來。
然後分開執行以下命令:

之後重新載入配置,並且重啟 Docker 服務

這里推薦使用 Portainer 作為容器的 GUI 管理方案。官方地址: https://portainer.io/install.html
安裝命令:

訪問你的 IP:9000 即可進入容器管理頁面。

名字為鏡像庫中的鏡像名,若出現許可權問題報錯,前面加上sudo即可。

參數說明:
-p 3306:3306 :將容器的3306埠映射到主機的3306埠
-v /mydata/mysql/log:/var/log/mysql :將配置文件夾掛載到主機
-v /mydata/mysql/data:/var/lib/mysql :將日誌文件夾掛載到主機
-v /mydata/mysql/conf:/etc/mysql :將配置文件夾掛載到主機
-e MYSQL_ROOT_PASSWORD=root :初始化root用戶的密碼

驗證,查看docker下的所有進程:docker ps

docker安裝的mysql,相當於linux系統中單開了一個linux專門用來安裝mysql。
-p 3306:3306 :將容器的3306埠映射到主機(vagrant開啟的虛擬機)的3306埠。
日誌也是將經常變動數據掛載到外部linux文件夾下。

  上面已經說到,將mysql容器中的配置文件掛載到本機中,所以直接修改本機目錄下的配置文件即可。

防止掛載時 redis.conf找不到而在conf文件夾下再次創建名為redis.conf的文件夾,所以預先創建。

mysql之前是進入容器,現在我們直接進入客戶端進行操作redis

賊好用啊,還有提示。

docker restart redis 重啟redis容器後,發現之前的數據都丟失了,因為保存在內存中。所以我們需要配置持久化。
因為之前已經將容器配置文件掛載到本機目錄下,所以直接修改本機redis.conf即可。

重啟驗證,OK。

C. linux docker 能安裝哪些系統

1.啟動一個Docker容器[root@localhost~]#dockerrun-i-tUbuntu/bin/bashUnabletofindimage『ubuntu』:Downloadcomplete511136ea3c5a:Downloadcompletec7b7c6419568:Downloadcomplete70c8faa62a44:Downloadcompleted735006ad9c1:DownloadcompleteStatus:Downloadednewerimageforubuntu:latest註:-i:打開容器中的STDIN-t:為容器分配一個偽tty終端從上面我們可以看出,首先Docker會檢查本地是否存在ubuntu鏡像,如果在本地沒有找到該鏡像的話,那麼Docker就會去官方的DockerHubRegistry查看DockerHub中是否有該鏡像。Docker一旦找到該鏡像,就會下載該鏡像並將其保存到本地的宿主機中。然後,Docker在文件系統內部用這個鏡像創建了一個新的容器。該容器擁有自己的網路、IP地址,以及一個用來可以和宿主機進行通信的橋接網路介面。最後,我們告訴Docker在新容器中要運行什麼命令。當容器創建完畢之後,Docker就會執行容器中的/bin/bash命令。這時間我們就可以看到容器內的shellroot@8c342c0c275c:/#註:8c342c0c275c代表容器的ID

D. docker用windows子系統運行msbuild

用戶可以根據自己的系統在Docker官網選擇Mac[1]或Windows[2],因為Docker可以在Mac系統中安裝後可以直接運行,這里就不再贅述。安裝完Docker,並注冊個人賬號,再雙擊啟動它這是因為Docker無法在Windows系統中直接運行,而需要創建一個Windows系統中的Linux虛擬機(VM)為Docker的正常運行搭建好底層依賴。雖然官方文檔[3]提供了hyper-V和WSL2兩種解決方案,但是WSL2是基於hpyer-V在WSL1的升級版,其功能,安裝方式也簡單方便,因此作者就選擇了WSL2的後端方式來運行Docker。

E. Docker中可以運行其他非linux系統嗎

1、windows目前還是依靠virtualbox實現基本系統,以後會出現兼容docker的windows docker,不過還早。
2、freebsd已經可以原生運行docker,需要linux模擬層。
3、mac需要用virtualbox使用docker。
doker上使用其他環境:
目前還不行。docker中目前只能跑linux。
因為1、LXC,2、和宿主機共享內核。

F. docker+ubuntu一鍵安裝寶塔

docker實例(ubuntu系統)中一鍵安裝寶塔系統來管理環境:
apt install wget && wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh
如果遇到說找不到wget包的錯誤,需要先執行一次apt源更新操作
apt update

G. linux docker 能安裝哪些系統

操作系統是Linux的電腦,如果硬體配置滿足條件的話,是可以安裝WIN 7系統的。WIN7 32位系統硬體配置要求:
1、CPU:1 GHz 32位
2、內存:1GB及以上內存
3、硬碟空間:16GB以上的硬碟,最好保證那個分區有20GB的空間。
4、顯卡:64MB以上的集成顯卡

WIN7 64位系統硬體配置要求:
1、CPU:1GHz以上64 位處理器
2、內存:2G以上內存
3、硬碟空間:20GB以上硬碟
4、顯卡:64MB以上,128M是打開Aero的最低配置。

H. docker主要用什麼操作系統

首先docker
是基於操作系統的一種容器,將服務進行封裝隔離資源控制。
然後linux操作系統,一般docker
都是安裝在linux類系統上。
雲操作系統你這里指的是
類似aws和阿里雲主機嗎?

I. docker 安裝 ubuntu 怎麼用

使用docker pull+ubuntu鏡像名稱,拉取一個ubuntu鏡像,然後使用ubuntu鏡像創建一個容器(命令 docker run+參數.....),在使用docker attach+容器名進入容器,這時你就已經進入ubuntu的系統了,可以執行ubuntu的所以命令,不懂為什麼就看下面。

首先你要明白什麼是docker,這樣給你說吧!docker就相當於是VMware,docker裡面的鏡像就相當於VMware在裝系統是使用的鏡像文件,docker裡面創建的容器就相當於是在VMware裡面創建的虛擬機並已使用鏡像文件裝好系統。
它能做什麼?虛擬機能做什麼他就能做什麼,就是一台伺服器虛擬化很多伺服器。為什麼使用docker而不選擇VMware,自己可以去網路一下。

J. 超值一篇分享,Docker:從入門到實戰過程全記錄

作者 | 天元浪子

來源 | CSDN博客

想要真正理解Docker,就不得不從虛擬化技術的發展歷程說起。普遍認為虛擬化技術經歷了物理機時代、虛擬機時代,目前已經進入到了容器化時代。可以說,Docker是虛擬化技術不斷發展的必然結果。

那麼,什麼是容器呢?容器和虛擬機有什麼不同?Docker和容器又是什麼關系呢?搞明白這幾個問題,Docker的概念就清晰了。

1.1 虛擬機和容器

藉助於VMWare等軟體,可以在一台計算機上創建多個虛擬機,每個虛擬機都擁有獨立的操作系統,可以各自獨立的運行程序。這種分身術雖然隔離度高(操作系統級),使用方便(類似物理機),但佔用存儲資源多(GB級)、啟動速度慢(分鍾級)的缺點也是顯而易見的。

相較於虛擬機,容器(Container)是一種輕量型的虛擬化技術,它虛擬的是最簡運行環境(類似於沙盒)而非操作系統,啟動速度快(秒級)、佔用存儲資源少(KB級或MB級),容器間隔離度為進程級。在一台計算機上可以運行上千個容器,這是容器技術對虛擬機的碾壓式優勢。

1.2 容器、鏡像和Docker

Docker是一個開源的應用容器引擎,可以創建容器以及基於容器運行的程序。Docker可以讓開發者打包他們的應用和依賴包到一個輕量級、可移植的容器中,然後發布到任何流行的Linux機器上,也可以實現虛擬化。

聽起來很簡單,但是在Docker和容器之間,還隱藏著一個鏡像的概念,令初學者頗感困惑。本質上,Docker鏡像是一個特殊的文件系統,它提供容器運行時所需的程序、庫、資源、配置等文件。Docker鏡像類似於一個py文件,它需要Docker的運行時(類似於Python解釋器)運行。鏡像被運行時,即創建了一個鏡像的實例,一個實例就是一個容器。

1.3 Docker 和 k8s

作為容器引擎,Docker為容器化的應用程序提供了開放的標准,使得開發者可以用管理應用程序的方式來管理基礎架構,實現快速交付、測試和部署代碼。隨著容器的大量使用,又產生了如何協調、調度和管理容器的問題,Docker的容器編排應運而生。

k8s是Google開源的一個容器編排引擎,它支持自動化部署、大規模可伸縮、應用容器化管理,是一個開源的,用於管理雲平台中多個主機上的容器化的應用,k8s的目標是讓部署容器化的應用簡單並且高效,k8s提供了應用部署、規劃、更新、維護的一種機制。

Docker和k8sr都是以containerd(容器化標准)作為運行時,因此使用Docker創建的鏡像完全可以在k8s中無障礙的使用。


2.1 在ubuntu中安裝

在linux系統中安裝Docker非常簡單,官方為我們提供了一鍵安裝腳本。這個方法也適用於Debian或CentOS等發行版。

安裝過程如果出現超時,不要灰心,多試幾次,總會成功的。安裝完成後,Docker只能被root用戶使用,可以使用下面的命令取消許可權限制:

然後,重啟docker服務:

最後,關閉當前的命令行,重新打開新的命令行就可以了。

順便提一下,如果在CentOS下安裝,可能會出現一堆類似於下面的錯誤:

這是由於docker和Podman沖突造成的,需要先卸載Podman:

2.2 在Win10中安裝

Docker的運行,依賴linux的環境,官方提供了Docker Desktop for Windows,但是它需要安裝Hyper-V,Hyper-V是微軟開發的虛擬機,類似於 VMWare 或 VirtualBox,僅適用於 Windows 10。這個虛擬機一旦啟用,QEMU、VirtualBox 或 VMWare Workstation 15 及以下版本將無法使用!如果你必須在電腦上使用其他虛擬機(例如開發 Android 應用必須使用的模擬器),請不要使用 Hyper-V!

我的電腦是win10家庭版,不能直接安裝hyper-v,需要將下面的命令保存到cmd文件中:

然後在cmd文件上點擊右鍵,選擇使用管理員運行。執行完畢後會重啟,在重啟的過程中進行安裝。

2.3 Hello world

docker服務啟動的情況下,運行下面的命令:

此命令的含義是:

第一次運行時,因為本地沒有ubuntu:20.04鏡像,docker會自動從鏡像伺服器下載。下載過程可能需要多試幾次,只要成功一次,以後執行就不再需要下載了。

docker官方還提供了一個hello-world鏡像,可以直接運行:

此命令省略了鏡像版本和運行參數,docker使用latest作為版本,即最新版本。

從hello world的例子中,也可以體驗到,docker實例的運行是非常快的。


docker官方的鏡像庫比較慢,在進行鏡像操作之前,需要將鏡像源設置為國內的站點。

新建文件/etc/docker/daemon.json,輸入如下內容:

然後重啟docker的服務:

3.1 列出本地所有鏡像

執行命令 docker images 可以查看

當前我本地只有剛才安裝的兩個鏡像。

3.2 從鏡像庫中查找鏡像

執行命令 docker search 鏡像名稱可以從docker鏡像庫中查找鏡像。

最好選擇官方(OFFICIAL)的鏡像,這樣的鏡像最穩定一些。

3.3 下載新的鏡像

執行命令docker pull 鏡像名稱:版本號即可下載新的鏡像。

鏡像下載後,就可以使用鏡像來創建容器了。


4.1 啟動容器

執行命令docker run即可啟動容器,也就是創建某個鏡像的實例。docker run命令非常復雜,可以先執行一個docker run --help來查看幫助:

比如我們要執行python的shell,需要添加-it參數,即:docker run -it python:3.8

4.2 將宿主機的文件掛載到容器

docker容器與宿主機是隔離的,要想讓容器內的程序能訪問宿主機上的文件,需要通過-v參數將宿主機的文件掛載到容器中。

比如我們在宿主機上有一個hello.py,可以列印hello,想要在python容器中執行,就需要進行掛載。-v後還需要接兩個參數,分別是宿主機的目錄和容器內的目錄,兩者使用:分隔,路徑必須都是絕對路徑。

我的hello.py保存在主目錄的/docker_test目錄中,將這個目錄掛載到容器的/docker_test目錄,然後在容器內執行python /docker_test/hello.py:

4.3 容器的埠映射

我們修改一下hello.py,創建一個socket服務端,並監聽5000埠,當有客戶端連接時,列印客戶端的地址,先客戶端發送hello,然後關閉連接:

在容器內執行:

接下來,嘗試用telnet命令連接,結果卻是失敗的。原因是,127.0.0.1是宿主機的ip地址,5000是容器的埠,這與我們的習慣稍微有些不同。事實上,docker的容器是非常輕量的,它並沒有自己的網路,要想訪問容器的埠,需要進行埠映射,將容器的某埠映射到宿主機的埠,客戶端連接時,只要與宿主機的埠進行連接就可以了。

需要注意的是,上面的代碼創建的伺服器,無論如何也不可能被客戶端連接,因為代碼中綁定了127.0.0.1的ip,在容器中運行時,需要綁定所有ip,即0.0.0.0。

然後,再使用-p參數,-p還需要三個參數,即宿主機的ip地址、宿主機的埠、容器的埠,三者之間使用:分隔。一般的,可以將宿主機的ip地址省略,只寫宿主機的埠:容器的埠即可。

這樣,就將容器的5000埠映射到了宿主機的5001埠,使用:

即可與容器中的伺服器進行連接。

4.4 容器管理

上面的服務運行之後,可以使用docker ps命令,查看運行中的容器:

顯示的內容有下面幾列:

要想結束容器,可以使用docker kill 容器ID命令。


一般而言,當我們的程序開發完成後,會連同程序文件與運行環境一起製作成一個新的鏡像。

要製作鏡像,需要編寫Dockerfile。DockeFile由多個命令組成,常用的命令有:

注意,Docker鏡像中有一個層的概念,每執行一個RUN命令,就會創建一個層,層過多會導致鏡像文件體積增大。盡量在RUN命令中使用&&連接多條shell命令,減少RUN命令的個數,可以有效減小鏡像文件的體積。

5.1 自製顯示文本文件內容鏡像

編寫cat.py,接收一個文件名,由python讀取文件並顯示文件的內容:

這個例子比較簡單,縮寫Dockerfile如下:

這個Dockerfile的含義是:

需要說明的是,ENTRYPOINT有兩種寫法:

這里採用第二種寫法,是因為我們要在外部給容器傳遞參數。執行命令編譯Docker鏡像:

這個命令中,-t的含義是目標,即生成的鏡像名為hello,版本號為1.0,別忘了最後那個.,這叫到上下文路徑,是指 docker 在構建鏡像,有時候想要使用到本機的文件(比如復制),docker build 命令得知這個路徑後,會將路徑下的所有內容打包。

這樣,我們的第一個鏡像就製作完成了,使用下面的命令執行它:

即可看到~/docker_test/cat/files/test.txt的內容。

5.2 自製web伺服器鏡像

我們使用tornado開發一個網站,而python的官方鏡像是沒有tornado庫的,這就需要在製作鏡像時進行安裝。

測試的ws.py如下:

編寫Dockerfile文件如下:

在此我們驗證一下CMD與ENTRYPOINT的區別。在Dockerfile所在有目錄下執行如下命令:

執行完成後,再使用docker images使用就可以看到生成的鏡像了,然後使用下面的命令運行:

在瀏覽器中輸入宿主機的ip和8000埠,就可以看到頁面了。

在這個例子中,我使用的運行命令是CMD,如果在docker run中指定的其他的命令,此命令就不會被執行,如:

此時,容器中被執行的是python命令,而不是我們的服務。在更多情況下,我們希望在docker run命令中為我們的服務傳參,而不是覆蓋執行命令,那麼,我們應該使用ENTRYPOINT而不是CMD:

上面這種寫法,是不支持傳遞參數的,ENTRYPOINT和CMD還支持另一種寫法:

使用這種寫法,docker run命令中的參數才可以傳遞給hello.py:

這個命令中,--port=9000被作為參數傳遞到hello.py中,因此容器內的埠就成了9000。

在生產環境中運行時,不會使用-it選項,而是使用-d選項,讓容器在後台運行:

這種方式下,即使當前的控制台被關閉,該容器也不會停止。

5.3 自製apscheler服務鏡像

接下來,製作一個使用apscheler編寫的服務鏡像,代碼如下:

Dockerfile也是信手拈來:

生成鏡像:

應該可以運行了,文件復制需要兩個目錄,在運行時,可以使用兩次-v來掛載不同的目錄:


前面用到的官方python鏡像大小足足882MB,在這個基礎上,再安裝用到的第三方庫,添加項目需要的圖片等資源,大小很容易就超過1個G,這么大的鏡像,網路傳給客戶非常的不方便,因此,減小鏡像的體積是非常必要的工作。


docker hub上有個一python:3.8-alpine鏡像,大小隻有44.5MB。之所以小,是因為alpine是一個採用了busybox架構的操作系統,一般用於嵌入式應用。我嘗試使用這個鏡像,發現安裝一般的庫還好,但如果想安裝numpy等就會困難重重,甚至網上都找不到解決方案。

還是很回到基本的路線上來,主流的操作系統鏡像,ubuntu的大小為72.9MB,centos的大小為209MB——這也算是我更喜歡使用ubuntu的一個重要原因吧!使用ubuntu作為基礎鏡像,安裝python後的大小為139MB,再安裝pip後的大小一下子上升到了407MB,要是再安裝點其他東西,很容易就趕上或超過python官方鏡像的大小了。

看來,尋常路線是很難壓縮鏡像文件體積了。幸好,還有一條曲線救國的路可走,這就是多階段構建法。

多階段構建的思想其實很簡單,先構建一個大而全的鏡像,然後只把鏡像中有用的部分拿出來,放在一個新的鏡像里。在我們的場景下,pip只在構建鏡像的過程中需要,而對運行我們的程序卻一點用處也沒有。我們只需要安裝pip,再用pip安裝第三方庫,然後將第三方庫從這個鏡像中復制到一個只有python,沒有pip的鏡像中,這樣,pip佔用的268MB空間就可以被節省出來了。

1、在ubuntu鏡像的基礎上安裝python:

然後運行:

這樣,就生成了python:3.8-ubuntu鏡像。

2、在python:3.8-ubuntu的基礎上安裝pip:

然後運行:

這樣,就生成了python:3.8-ubuntu-pip鏡像。

3、多階段構建目標鏡像:

這個dockerfile需要解釋一下了,因為它有兩個FROM命令。

第一個是以python:3.8-ubuntu-pip鏡像為基礎,安裝numpy,當然,在實際應用中,把所有用到的第三方庫出寫在這里。

第二個FROM是以FROM python:3.8-ubuntu鏡像為基礎,將第三方庫統統復制過來,COPY命令後的–from=0的意思是從第0階段進行復制。實際應用中再從上下文中復製程序代碼,添加需要的ENTRYPOINT等。

最後,再運行:

這然,用於我們項目的鏡像就做好了。比使用官方python鏡像構建的版本,小了大約750MB。


到此,我們的鏡像已經製作好了,可是,鏡像文件在哪,如何在生產環境下運行呢?

剛才使用docker images命令時,已經看到了生成的鏡像:

我們可以使用docker save命令將鏡像保存到指定的文件中,保存的文件是一個.tar格式的壓縮文件:

將hello.tar復制到生產環境的機器上,然後執行導入命令:

就可以使用了。