国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

在docker容器中調用和執行宿主機的docker操作

瀏覽:2日期:2024-11-16 08:22:23

首先這個帖子,獻給docker新手。當然如果你是一個老手,文中分割線后的操作方法也是一種思路。

首先說一下,如何在docker中執行宿主機的docker操作,我們管它叫docker in docker。

至于為什么要在docker中操作宿主機的docker,優點不言而喻,你既可以將你的具體需求容器化部署,又不用直接在宿主機上安裝(假設我們沒有辦法在docker中操作宿主機的docker,那么我們只能將這樣的軟件程序直接安裝到宿主機上,這樣顯然是不利于管理和維護的)。

實現這種需求,其實非常簡單,你只需要將docker宿主機的docker文件和docker.sock文件掛載到容器中即可,具體為:

-v /var/run/docker.sock:/var/run/docker.sock

-v /usr/bin/docker:/usr/bin/docker

你要先找到你宿主機的docker和docker.sock位置,別掛載錯了,標準的Linux正常來說就是上面的位置。

你在啟動docker容器的時候,將上述兩個文件正常掛載后,就可以在docker中執行諸如 docker images 等等這樣的命令了。

如果出現問題 permission denied

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

…………………………………………………………

dial unix /var/run/docker.sock: connect: permission denied

解決方法

在容器所在的宿主機上直接給 docker.sock 777權限,命令 chmod 777 docker.sock

華麗麗的分割線

下面是針對群輝系統,你不用太關心這個系統是什么,總之就是這個系統在docker方面有一些特有的問題,導致你不能這么隨心所欲,所以我采用了一種變通的方法來處理(一種思路,拋磚引玉)先敘述一下現狀:

該系統提供了docker的UI管理工具,我們在這個工具上可以進行常規的掛載操作,但是如果我們想掛載上面的docker和docker.sock文件,就不行了,先看一下截圖:

在docker容器中調用和執行宿主機的docker操作

說一下圖上UI操作的局限性!

群輝官方進行了限制,你可以選擇的文件,是不可能選擇到 /usr/ /va/ 等這樣系統層面的文件的,也就是我們無法直接掛載docker和docker.sock文件。

做 ln -s 軟連接是否可行?

經嘗試,先通過ssh命令行在jenkins文件夾中創建2個軟連接(將docker和docker.sock進行軟連接),然后回到群輝的UI界面,依然不能選擇(因為群輝直接屏蔽了軟連接文件,你是看不到的)

那么如何解決呢?

我的方法是(軟連接的方法變通一下):

1、在圖上的jenkins目錄下隨便創建2個文件 docker 和 docker.sock 文件(命名正確即可)

2、然后在docker點擊“添加文件”按鈕,正常選擇這2個文件,進行掛載,你完全可以正常掛載并且完成其他配置,配置完畢后,暫時不要啟動docker容器。

3、登錄ssh進入群輝,將jenkins目錄中剛剛創建的2個文件刪除掉,然后把docker和docker.sock源文件創建軟連接到jenkins中。

root@test:cd /volume1/docker/jenkins/root@test:rm -rf docker docker.sockroot@test:ln -s /run/docker.sock /volume1/docker/jenkins/docker.sockroot@test:ln -s /usr/local/bin/docker /volume1/docker/jenkins/dockerroot@test:/volume1/docker/jenkins# lltotal 8drwxrwxrwx+ 1 Nuggets users 96 Jun 6 11:22 .drwxr-xr-x+ 1 root root 188 May 30 19:29 ..lrwxrwxrwx 1 root root 21 Jun 6 11:22 docker -> /usr/local/bin/dockerlrwxrwxrwx 1 root root 16 Jun 6 11:21 docker.sock -> /run/docker.sockdrwxrwxrwx+ 1 shanhongyu users 24 Jun 1 11:07 java_homedrwxrwxrwx+ 1 Nuggets users 4476 Jun 6 11:00 jenkins_homedrwxrwxrwx+ 1 shanhongyu users 82 Jun 1 11:12 maven_home

4、然后回到群輝UI,啟動容器,這樣就完美了。

(群輝不讓你選軟連接,但是linux和docker本質上是可以直接掛載軟連接的)

補充知識:使用docker在鏡像中運行宿主機程序

docker run命令用于在新容器中運行命令。docker run命令首先在指定的映像上創建一個可寫容器層,然后使用指定的命令啟動它。

也就是說,docker run相當于API /containers/create 和 /containers/(id)/start。

可以使用docker start重新啟動停止的容器,并使用其所有先前的更改完整。 請參閱docker ps -a查看所有容器的列表。

用法

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

Shell

例子

分配名稱并分配偽TTY(-name,-it)

$ docker run --name test -it debian root@d6c0fe130dba:/# exit 13$ echo $?13$ docker ps -a | grep testd6c0fe130dba debian:7 '/bin/bash' 26 seconds ago Exited (13) 17 seconds ago test

Shell

此示例使用debian:latest映像運行一個名為test的容器。 -it 指示Docker分配連接到容器的stdin的偽TTY; 在容器中創建一個交互式的bash shell。 在該示例中,bash shell通過輸入exit 13退出。該退出代碼傳遞給docker run的調用者,并記錄在測試容器的元數據中。

捕獲容器ID(-cidfile)

$ docker run --cidfile /tmp/docker_test.cid ubuntu echo 'test'

Shell

這將創建一個容器并打印測試到控制臺。--cidfile標志使Docker嘗試創建一個新文件,并將容器ID寫入它。如果文件已經存在,Docker將返回一個錯誤。 Docker運行退出時,Docker將關閉此文件。

完整的容器功能(-privileged)

$ docker run -t -i --rm ubuntu bashroot@bc338942ef20:/# mount -t tmpfs none /mntmount: permission denied

Shell

這將不起作用,因為默認情況下,大多數潛在的危險內核功能被丟棄; 包括cap_sys_admin(這是掛載文件系統所需的)。 但是,--privileged標志將允許它運行:

$ docker run -t -i --privileged ubuntu bashroot@50e3f57e16e6:/# mount -t tmpfs none /mntroot@50e3f57e16e6:/# df -hFilesystem Size Used Avail Use% Mounted onnone 1.9G 0 1.9G 0% /mnt

Shell

設置工作目錄[-w]

$ docker run -w /path/to/dir/ -i -t ubuntu pwd

Shell

-w允許在目錄中執行命令,這里是/path/to/dir/。 如果路徑不存在,則在容器內創建。

為每個容器設置存儲驅動程序選項

$ docker run -it --storage-opt size=120G fedora /bin/bash

Shell

掛載tmpfs(-tmpfs)

$ docker run -d --tmpfs /run:rw,noexec,nosuid,size=65536k my_image

Shell

--tmpfs標志使用rw,noexec,nosuid,size = 65536k選項將一個空tmpfs裝載到容器中。

掛載卷(-v,-read-only)

$ docker run -v `pwd`:`pwd` -w `pwd` -i -t ubuntu pwd

Shell

-v標志將當前工作目錄裝載到容器中。 -w允許在當前工作目錄中執行命令,將目錄更改為pwd返回的值。所以這個組合使用容器執行命令,但在當前工作目錄中。

$ docker run -v /doesnt/exist:/foo -w /foo -i -t ubuntu bash

Shell

當綁定卷的主機目錄不存在時,Docker將自動在主機上創建此目錄。 在上面的示例中,Docker將在啟動容器之前創建/doesnt/exists文件夾。

$ docker run --read-only -v /icanwrite busybox touch /icanwrite/here

Shell

卷可以與--read-only組合使用,以控制容器寫入文件的位置。 --read-only標志將容器的根文件系統掛載為只讀禁止寫入容器的指定卷以外的位置。

以上這篇在docker容器中調用和執行宿主機的docker操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Docker
相關文章:
主站蜘蛛池模板: 日本午色www高清视频 | 色www永久免费网站国产 | 亚洲欧美一区二区三区久本道 | 久久99视频精品 | 欧美一区亚洲 | 日本一区二区高清免费不卡 | 亚洲精品综合 | 国产精品所毛片视频 | 欧美一级特黄aaaaaa在线看片 | 成年人性网站 | 一区二区在线欧美日韩中文 | 久草视频官网 | 免费观看呢日本天堂视频 | 国产一级一片免费播放 | 国产大片线上免费观看 | 国产手机国产手机在线 | 久久精品视频99 | 国产在线不卡免费播放 | 免费看毛片网 | 亚洲综合色一区二区三区另类 | 国产一区二区免费不卡在线播放 | 成人毛片高清视频观看 | 欧美亚洲黄色 | 精品视频 久久久 | 一级看片 | 影院亚洲| 欧美一区二区三区视频 | 国产一级精品毛片 | 欧美人禽杂交狂配毛片 | 色琪琪一本到影院 | 日韩国产欧美精品综合二区 | tom影院亚洲国产日本一区 | 日韩在线观看视频网站 | 成年人视频免费网站 | 100000免费啪啪18免进 | 亚洲天堂色视频 | 国产男女视频在线观看 | 国产在视频线精品视频二代 | 亚洲乱码国产一区网址 | 国产精品一区久久 | 成人a网站 |