步驟1:為我們的容器創(chuàng)建第一個鏡像
站在用戶的角度思考問題,與客戶深入溝通,找到江南網(wǎng)站設(shè)計與江南網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設(shè)計制作、成都網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋江南地區(qū)。
# 以 centos 鏡像作為基礎(chǔ)鏡像,我們啟動自己的容器并在其中執(zhí)行/bin/bash命令
# 注:-t -i 參數(shù)用于創(chuàng)建一個虛擬的命令行。
sudo docker run -t -i centos /bin/bash
現(xiàn)在我們已經(jīng)成功的運行了自己的第一個容器,并且進(jìn)入到容器的命令行界面中。在容器中,我們執(zhí)行下面的命令:
yum -y update # 更新軟件包
yum install which # 安裝which命令
yum install git # 安裝Git
安裝完成后,按 Ctrl + d 來退出容器的命令行。
# 執(zhí)行sudo docker ps -a,可以看到被我們終止的容器
CONTAINER ID IMAGE COMMAND CREATED……
da9031d3568f centos:6.4 /bin/bash 5 minutes ago…..
把我們所做的改變提交到一個新的容器:
# 這里我們創(chuàng)建一個自己的基礎(chǔ)容器,容器中安裝好了文章中所需的常用工具。讀者的容器 id 可能與文章中的有所不同,以上一步 docker ps -a 的結(jié)果為準(zhǔn)。
sudo docker commit da90 custom/base
容器成功提交后,執(zhí)行 sudo docker images ,我們會看到剛才提交的容器(如下面的結(jié)果所示)。我們就以這個容器為基礎(chǔ)容器,再來創(chuàng)建一個新的容器。
REPOSITORY TAG IMAGE ID CREATED
custom/base latest 05b6cecd370b 2 minutes ago
centos 6.4 539c0211cd76 10 months ago
centos latest 539c0211cd76 10 months ago…
步驟2:創(chuàng)建新的容器,并安裝 apache
# 以 custom/base 容器為基礎(chǔ),運行一個新的容器。
sudo docker run -t -i custom/base /bin/bash
# 安裝 httpd
yum install httpd
步驟3:再次提交新的容器
按 Ctrl + d 來退出容器的命令行,然后執(zhí)行命令:
# 這個命令會把步驟2中我們安裝 httpd 帶來的改變提交到新的名為 custom/httpd 的容器鏡像中。你的容器 id 可能會和文章中有所不同,以 sudo docker ps -a 命令的結(jié)果為準(zhǔn)。
sudo docker commit aa6e2fc0b94c custom/httpd
你應(yīng)該已經(jīng)發(fā)現(xiàn)了,我們創(chuàng)建了一個帶有 http 服務(wù)器并可以復(fù)用的容器鏡像。你可以根據(jù)這種思想,為自己所需的每個組件都創(chuàng)建一個容器,然后把這些容器復(fù)用于開發(fā)環(huán)境或者生產(chǎn)環(huán)境。
步驟7:運行 http 服務(wù)器
# -v will Mount a volume from VM to the container which was also shared from host to Vagrant VM.
# -v 參數(shù)把主機共享給虛擬機的一個卷掛載到容器中
# -p forward VM port 80 to container port 80; VM port 80 is mapped to host port 8080 in Vagrantfile
# -p 參數(shù)把虛擬機的80端口映射到容器的80端口;虛擬機的80端口在 Vagrantfile 中被綁定到主機的8080端口,也就是:主機8080-虛擬機80-容器80
sudo docker run -t -i -p 80:80 -v /vagrant/htdocs:/var/www/html custom/httpd /bin/bash
# 啟動 Apache
apachectl -k start
下面是安裝 Docker 客戶端并在上面運行容器的簡單步驟。
1. 下載 Boot2Docker
在我們開始安裝之前,我們需要 Boot2Docker 的可執(zhí)行文件。可以從 它的 Github 下載最新版本的 Boot2Docker。在這篇指南中,我們從網(wǎng)站中下載版本 v1.6.1。我們從那網(wǎng)頁中用我們喜歡的瀏覽器或者下載管理器下載了名為 docker-install.exe 的文件。
2. 安裝 Boot2Docker
現(xiàn)在我們運行安裝文件,它會安裝 Window Docker 客戶端、用于 Windows 的 Git(MSYS-git)、VirtualBox、Boot2Docker Linux ISO 以及 Boot2Docker 管理工具,這些對于開箱即用地運行全功能的 Docker 引擎都至關(guān)重要。
3. 運行 Boot2Docker
安裝完成必要的組件之后,我們從桌面上的“Boot2Docker Start”快捷方式啟動 Boot2Docker。它會要求你輸入以后用于驗證的 SSH 密鑰。然后會啟動一個配置好的用于管理在虛擬機中運行的 Docker 的 unix shell。
為了檢查是否正確配置,運行下面的 docker version 命令。
docker version
4. 運行 Docker
由于 Boot2Docker Start 自動啟動了一個已經(jīng)正確設(shè)置好環(huán)境變量的 shell,我們可以馬上開始使用 Docker。請注意,如果我們要將 Boot2Docker 作為一個遠(yuǎn)程 Docker 守護進(jìn)程,那么不要在 docker 命令之前加 sudo。
現(xiàn)在,讓我們來試試 hello-world 例子鏡像,它會下載 hello-world 鏡像,運行并輸出 "Hello from Docker" 信息。
$ docker run hello-world
5. 使用命令提示符(CMD) 運行 Docker
現(xiàn)在,如果你想開始用命令提示符使用 Docker,你可以打開命令提示符(CMD.exe)。由于 Boot2Docker 要求 ssh.exe 在 PATH 中,我們需要在命令提示符中輸入以下命令使得 %PATH% 環(huán)境變量中包括 Git 安裝目錄下的 bin 文件夾。
set PATH=%PATH%;"c:\Program Files (x86)\Git\bin"
運行上面的命令之后,我們可以在命令提示符中運行 boot2docker start 啟動 Boot2Docker 虛擬機。
boot2docker start
注意: 如果你看到 machine does no exist 的錯誤信息,就運行 boot2docker init 命令。
然后復(fù)制上圖中控制臺標(biāo)出命令到 cmd.exe 中為控制臺窗口設(shè)置環(huán)境變量,然后我們就可以像平常一樣運行 docker 容器了。
6. 使用 PowerShell 運行 Docker
為了能在 PowerShell 中運行 Docker,我們需要啟動一個 PowerShell 窗口并添加 ssh.exe 到 PATH 變量。
$Env:Path="${Env:Path};c:\Program Files (x86)\Git\bin"
運行完上面的命令,我們還需要運行
boot2docker start
這會打印用于設(shè)置環(huán)境變量連接到虛擬機內(nèi)部運行的 Docker 的 PowerShell 命令。我們只需要在 PowerShell 中運行這些命令就可以和平常一樣運行 docker 容器。
7. 用 PUTTY 登錄
Boot2Docker 會在%USERPROFILE%.ssh 目錄生成和使用用于登錄的公共和私有密鑰,我們也需要使用這個文件夾中的私有密鑰。私有密鑰需要轉(zhuǎn)換為 PuTTY 的格式。我們可以通過 puttygen.exe 實現(xiàn)。
我們需要打開 puttygen.exe 并從 %USERPROFILE%.ssh\id_boot2docker 中導(dǎo)入("File"-"Load" 菜單)私鑰,然后點擊 "Save Private Key"。然后用保存的文件通過 PuTTY 用 docker@127.0.0.1:2022 登錄。
8. Boot2Docker 選項
Boot2Docker 管理工具提供了一些命令,如下所示。
如何進(jìn)入Docker容器
概述
在使用Docker創(chuàng)建了容器之后,大家比較關(guān)心的就是如何進(jìn)入該容器了,其實進(jìn)入docker容器有好幾多種方式,這里我們就講一下常用的幾種進(jìn)入Docker容器的方法。
進(jìn)入Docker容器比較常見的幾種做法如下:
使用docker attach
使用SSH
使用nsenter
使用exec
下面我們來逐一講一下每種方式。
一、使用docker attach進(jìn)入Docker容器
Docker提供了attach命令來進(jìn)入Docker容器。
接下來我們創(chuàng)建一個守護態(tài)的Docker容器,然后使用docker attach命令進(jìn)入該容器。
[plain] view plain copy
$ sudo docker run -itd ubuntu:14.04 /bin/bash
然后我們使用docker ps查看到該容器信息,接下來就使用docker attach進(jìn)入該容器
[plain] view plain copy
$ sudo docker attach 44fc0f0582d9
可以看到我們已經(jīng)進(jìn)入到該容器中了。
但在,使用該命令有一個問題。當(dāng)多個窗口同時使用該命令進(jìn)入該容器時,所有的窗口都會同步顯示。如果有一個窗口阻塞了,那么其他窗口也無法再進(jìn)行操作。下來我們來演示一下。打開兩個窗口,都使用attach命令進(jìn)入同一個容器里面。如下所示:
接下來我們只在第一個窗口進(jìn)行操作,可以看到第一個窗口的操作同步到第二個窗口顯示了,如下:
因為這個原因,所以docker attach命令不太適合于生產(chǎn)環(huán)境,平時自己開發(fā)應(yīng)用時可以使用該命令。
二、使用SSH進(jìn)入Docker容器
在生產(chǎn)環(huán)境中排除了使用docker attach命令進(jìn)入容器之后,相信大家第一個想到的就是ssh。在鏡像(或容器)中安裝SSH Server,這樣就能保證多人進(jìn)入容器且相互之間不受干擾了,相信大家在當(dāng)前的生產(chǎn)環(huán)境中(沒有使用Docker的情況)也是這樣做的。但是使用了Docker容器之后不建議使用ssh進(jìn)入到Docker容器內(nèi)。關(guān)于為什么不建議使用,請參考如下幾篇文章:
Why you don't need to run SSHd in your Docker containers
上面這篇文章是英文的,如果英語不好的話可以參考如下譯文
為什么不需要在 Docker 容器中運行 sshd
三、使用nsenter進(jìn)入Docker容器
在上面兩種方式都不適合的情況下,還有一種比較方便的方法,即使用nsenter進(jìn)入Docker容器。關(guān)于什么是nsenter請參考如下文章:
在了解了什么是nsenter之后,我們需要把nsenter安裝到主機中(注意是主機而非容器或鏡像),具體的安裝命令如下:
[plain] view plain copy
$ wget https:/。。。r.gz
$ tar -xzvf util-linux-2.24.tar.gz
$ cd util-linux-2.24/
$ ./configure --without-ncurses
$ make nsenter
$ sudo cp nsenter /usr/local/bin
安裝好nsenter之后可以查看一下該命令的使用。
nsenter可以訪問另一個進(jìn)程的名稱空間。所以為了連接到某個容器我們還需要獲取該容器的第一個進(jìn)程的PID??梢允褂胐ocker inspect命令來拿到該PID。
docker inspect命令使用如下:
[plain] view plain copy
$ sudo docker inspect --help
inspect命令可以分層級顯示一個鏡像或容器的信息。比如我們當(dāng)前有一個正在運行的容器
可以使用docker inspect來查看該容器的詳細(xì)信息。
[plain] view plain copy
$ sudo docker inspect 44fc0f0582d9
由其該信息非常多,此處只截取了其中一部分進(jìn)行展示。如果要顯示該容器第一個進(jìn)行的PID可以使用如下方式
[plain] view plain copy
$ sudo docker inspect -f {{.State.Pid}} 44fc0f0582d9
在拿到該進(jìn)程PID之后我們就可以使用nsenter命令訪問該容器了。
[plain] view plain copy
$ sudo nsenter --target 3326 --mount --uts --ipc --net --pid
其中的3326即剛才拿到的進(jìn)程的PID
當(dāng)然,如果你認(rèn)為每次都輸入那么多參數(shù)太麻煩的話,網(wǎng)上也有許多做好的腳本供大家使用。
地址如下:
四、使用docker exec進(jìn)入Docker容器
除了上面幾種做法之外,docker在1.3.X版本之后還提供了一個新的命令exec用于進(jìn)入容器,這種方式相對更簡單一些,下面我們來看一下該命令的使用:
[plain] view plain copy
$ sudo docker exec --help
接下來我們使用該命令進(jìn)入一個已經(jīng)在運行的容器
[plain] view plain copy
$ sudo docker ps
$ sudo docker exec -it 775c7c9ee1e1 /bin/bash
網(wǎng)上還有一種做法是使用nsinit,沒有親身實踐過所以不在此羅列了,有興趣的話可以嘗試一下。
當(dāng)前Ubuntu 系統(tǒng)下的 Docker 的安裝包只提供64位。如果你想運行32位的 Docker,你需要。
安裝 Docker
通過 apt-get 安裝 Docker 簡直是小菜一碟。
$ sudo apt-get install docker.io
如果你不是 root 組的用戶,你可以把自己加入到 docker 用戶組。下面的命令可以讓沒有 root 權(quán)限的用戶使用 Docker:
$ sudo usermod -a -G docker $USER
重新登錄,以便讓你的用戶組權(quán)限生效。
下一步是編輯 Docker 配置文件,確定 Docker 可執(zhí)行文件的路徑:
$ sudo vi /etc/default/docker.io
DOCKER= /usr/bin/docker.io
重啟 Docker 服務(wù):
$ sudo service docker.io restart
管理 Docker Container 容器
如果你想在新的 Docker 容器下創(chuàng)建一個新的 Ubuntu 操作系統(tǒng),你首先需要 pull 一個 的 Docker 鏡像。下面的命令可以通過網(wǎng)絡(luò)下載 Docker 鏡像:
$ docker pull ubuntu
你可以使用下面的命令啟動 Docker 里面的 Ubuntu 系統(tǒng)。最后的參數(shù) /bin/bash 表示一旦容器啟動,首先會執(zhí)行簡單的 bash。
$ docker run -i -t ubuntu /bin/bash
上面的命令會立即啟動 Ubuntu container 容器(這是一個完美的容器!),然后它會提供一個 shell 提示符運行環(huán)境給你?,F(xiàn)在開始你可以通過這個沙箱環(huán)境訪問一個完整的 Ubuntu 系統(tǒng)了。
輸入 exit 命令退出 Docker 容器。
你也可以用下面的命令進(jìn)入不同的系統(tǒng)。比如 Fedora:
$ docker.io run -i -t fedora /bin/bash
如果系統(tǒng)中還不存在 Fedora Docker 鏡像,這個命令會自動下載它,然后啟動這個 Fedora 的 Docker 容器。
如果你想要開啟指定版本的系統(tǒng),比如 Ubuntu 13.04,你可以使用下面的命令:
$ docker.io run -i -t ubuntu:13.04 /bin/bash
Container 容器網(wǎng)絡(luò)設(shè)置
Docker 使用 Linux 橋接技術(shù)與其他容器通信,以及連通外網(wǎng)。安裝完 Docker 后你應(yīng)該可以看到 docker0 這個網(wǎng)橋,這是 Docker 默認(rèn)創(chuàng)建的。你創(chuàng)建的每個容器都會通過這個網(wǎng)橋連接到網(wǎng)絡(luò)。
自定義 Linux 網(wǎng)橋
如果你想自定義網(wǎng)橋,你可以執(zhí)行以下步驟。你可以在這個網(wǎng)橋后面分配一個子網(wǎng),并為這個子網(wǎng)分配地址。下面的命令會為 Docker 子網(wǎng)分配 10.0.0.0/24 地址段:
$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0
$ sudo ifconfig br0 10.0.0.1 netmask 255.255.255.0
然后在 /etc/default/docker.io 文件的 DOCKER_OPTS 變量里添加 -b=br0 選項,并重啟 Docker 服務(wù):
$ sudo service docker.io restart
到目前為止,任何創(chuàng)建的容器都會連上 br0 網(wǎng)橋,它們的 IP 地址會從 10.0.0.0/24 中自動分配(譯注:在10.0.0.2到10.0.0.254之間隨機分配)。
其他自定義設(shè)置
你可以通過 /etc/default/docker.io 文件的 DOCKER_OPTS 變量設(shè)置其他一些屬性:
-dns 8.8.8.8 -dns 8.8.4.4 : 為容器指定 DNS 服務(wù)器。
-icc=false : 將容器與其他容器隔離出來
疑難解答
1、當(dāng)你運行 docker.io 命令時,你可能會遇到以下問題:
dial unix /var/run/docker.sock: no such file or directory
這個錯誤可能是由于 Docker 后臺進(jìn)程沒有啟動。檢查下 Docker 后臺進(jìn)程的狀態(tài),確認(rèn)它已經(jīng)處于啟動狀態(tài):
$ sudo service docker.io status$ sudo service docker.io start
分享標(biāo)題:Linux進(jìn)容器命令,進(jìn)容器的命令
地址分享:http://aaarwkj.com/article38/dsigcpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護、企業(yè)網(wǎng)站制作、自適應(yīng)網(wǎng)站、電子商務(wù)、品牌網(wǎng)站建設(shè)、手機網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)