① Docker-埠映射
docker容器在啟動的時候,如果不指定埠映射參數,在容器外部是無法通過網路來訪問容器內的網路應用和服務的。
亦可使用Dockerfile文件中的EXPOSE指令來配置。
例如:(不推薦使用)
例如:
以上指令會將容器的80埠隨機映射到宿主機的一個埠上。
例如:
以上指令會將容器的80埠映射到宿主機的8000埠上。
以上指令會將容器的ip192.168.0.100和80埠,隨機映射到宿主機的一個埠上。
以上指令會將容器的ip192.168.0.100和80埠,映射到宿主機的8000埠。
② Docker 映射文件
Docker 可以映射文件,需要注意,文件路徑必須完整,並且映射的文件必須存在,如果不存在,會認為是目錄。映射的文件內容會傳遞到容器,並不是將鏡像中現有的文件復制出來。所以,如果需要映射單個文件,需要先編輯好並放置在目錄中。
③ Docker 如何知道需要映射的目錄
一般在Dockerfile文件裡面會有說明"VOLUME",比如你的nginx鏡像可以查看其構建的Dockerfile,或者官方描述。如果都沒有就通過查看鏡像安裝過程來獲取需要掛在的目錄。
④ Docker 入門 (07) 部署nginx 並且映射本地配置文件
目標:
1. 利用docker部署一個nginx容器
2.為nginx 容器設置配置文件 , 並且映射到宿主機(本機)
操作步驟:
1.拉取nginx鏡像,並嘗試簡單運行(忘記怎麼操作請參考第五節)
2.在本地新增配置文件 , 為了後面映射容器使用 ,我習慣是放到 /etc/docker/nginx-config , 按你個人習慣新增
3.進入config ,我們需要創建一個簡單配置文件 , 這里就來個簡單的吧
4.因為我稍後需要佔用的是8080埠 , 請確認雲伺服器端是否開放
5. 萬事俱備 , 嘗試啟動吧
6. 使用你的 伺服器ip+8080埠訪問測試 , 看到您的寫的 index,html 內容, 代表啟動成功!
7.具體映射位置 可以 使用 docker exec -it [容器ID] /bin/bash 命令去參考對應映射文件 ,原理就應該明白了
結語:
通過本節的 nginx 映射本地配置文件 , 應該掌握對docker映射文件的基本使用了 , 希望大家都把自己的nginx跑起來吧
⑤ 如何把docker進程把啟動文件映射到容器內
Docker容器運行後,如何進入容器進行操作呢?起初我是用SSH。如果只啟動一個容器,用SSH還能應付,只需要將容器的22埠映射到本機的一個埠即可。當我啟動了五個容器後,每個容器默認是沒有配置SSH Server的,安裝配置SSHD,映射容器SSH埠,實在是麻煩。 我發現很多Docker鏡像都是沒有安裝SSHD服務的,難道有其他方法進入Docker容器?有很多種方法,包括使用 docker attach 命令或 nsenter 工具等。 使用 attach 命令有時候並不方便。當多個窗口同時 attach 到同一個容器的時候,所有窗口都會同步顯示。 nsenter 可以訪問另一個進程的名字空間。 為了連接到容器,你還需要找到容器的第一個進程的 PID,可以通過下面的命令獲取。 PID=$(docker inspect –format 「{{ .State.Pid }}」 <container>) //將<container>換成你的容器id 通過這個 PID,就可以連接到這個容器: $ nsenter –target $PID –mount –uts –ipc –net –pid 更簡單的,建議大家下載 .bashrc_docker,並將內容放到 .bashrc 中。
⑥ Docker映射配置文件到宿主機
最近在做mysql中間件的docker,搞了mycat、mysql route都拉不起來容器,最後試試proxysql可以,proxysql官方發布了鏡像,感覺比較可靠。但是遇到一個小問題,筆者以前寫過一篇文章-Docker MySQL數據持久化,用數據卷掛載的方式將mysql的數據(映射數據目錄)持久化到宿主機。那麼配置文件也是有必要來映射的,注意就可以避免在容器內安裝編輯器。
容器內有apt 和ap-get工具,安裝前要apt update(或者apt-get update,較慢)更新軟體列表,然後apt install(或者apt-get install),這樣會增大容器空間,是沒有必要的。筆者以前就是這樣操作的,但是比較麻煩,而且容器如果是內部網路的話來安裝的話就更加不方便了。筆者在映射數據目錄時使用-v /home/mysql/data:/var/lib/mysql 。但是使用同樣的分發,今天在映射proxysql的配置文件proxysql.cnf時遇到一個麻煩。
先看看筆者掛載時遇到的問題: Are you trying to mount a directory onto a file。
都是文件,那裡來的目錄呢。映射的意思是將可以將宿主機目錄掛載到容器中,那麼可能就是將/home/mycentos/proxysql.cnf設別為一個目錄了,因為容器內/etc/proxysql.cnf的是真實存在的文件。在/home/mycentos/目錄下ls -l查看一下。
果然是目錄!輾轉反側找到原因是 docker啟動容器進行掛載的時候,如果路徑不存在,那麼docker會自動創建一個目錄。
筆者的home/mycentos/目錄下沒有proxysql.cnf文件,掛載時docker就新建了一個proxysql.cnf的目錄,但是這個對於掛載數據目錄時是十分有用的,對於配置文件來說是不行的。於是筆者在目錄home/mycentos/下新建了一個proxysql.cnf文件,再次運行docker run成功(前面運行失敗的容器需要刪除,不然名稱沖突)。
docker run -itd --name proxysql -p 16032:6032 -p 16033:6033 -p 16070:6070 -v /home/mycentos/proxysql.cnf:/etc/proxysql.cnf proxysql/proxysql
掛載後,容器內的/etc/proxysql.cnf配置文件是空的,不掛載的情況下是保持默認配置文件內容的,使用徐需要在編輯/home/mycentos/proxysql.cnf文件,然後進入容器後/etc/proxysql.cnf配置文件會跟隨改變的。但是配置文件為空,那麼就要從頭開始配置,這對於配置文件很多的話是不方便的,保留原來的配置配置文件,再在裡面修改會更加方便。這里筆者只能想到先運行一個容器,然後docker cp拷貝容器內的文件或者文件夾,在刪除這個容器,另外開一個配置文件映射的容器。
映射配置文件避免在容器內進行apt操作,使得容器膨脹過大。比如你要安裝編輯器vi,首先要apt update更新,然後apt install ,相比於在容器外對其進行操作來說,更加麻煩沒必要。
⑦ 如何把docker進程把啟動文件映射到容器內
1.安裝Docker在開始前,我們首先得確保在Linux主機中已經安裝了Docker。這里,我運行的是CentOS7主機,我們將運行yum管理器和下面的命令來安裝Docker。#yuminstalldocker#systemctlrestartdocker.service2.創建Dockerfile現在,Docker守護進程已經在運行中了,我們現在准備創建自己的FirefoxDocker容器。我們要創建一個Dockerfile,在其中我們要輸入需要的配置來創建一個可以工作的Firefox容器。為了運行Docker鏡像我們需要使用最新版本的CentOS。要創建Docker鏡像,我們需要用文本編輯器創建一個名為Dockerfile的文件。#nanoDockerfile接著,在Dockerfile中添加下面的行並保存。#!/bin/bashFROMcentos:7RUNyuminstall-yfirefox#用你自己的uid/gid替換下面的0RUNexportuid=0gid=0RUNmkdir-p/home/developerRUNecho"developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash">>/etc/passwdRUNecho"developer:x:${uid}:">>/etc/groupRUNecho"developerALL=(ALL)NOPASSWD:ALL">>/etc/sudoersRUNchmod0440/etc/sudoersRUNchown${uid}:${gid}-R/home/developerUSERdeveloperENVHOME/home/developerCMD/usr/bin/firefox注意:在第四行的配置中,用你自己的用戶和組id來替換0。我們可以用下面的命令在shell或者終端中得到uid和gid。#id$USER3.構造Docker容器下面我們就要根據上面的Dockerfile構建一個容器。它會安裝firefox瀏覽器和它需要的包。它接著會設置用戶許可權並讓它可以工作。這里鏡像名是firefox,你可以根據你的需要命名。#dockerbuild--rm-tfirefox.4.運行Docker容器現在,如果一切順利,我們現在可以在運行在CentOS7鏡像中的Docker容器裡面運行我們的GUI程序也就是Firefox瀏覽器了。#dockerrun-ti--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unixfirefox總結在Docker容器中運行GUI程序是一次很棒的體驗,它對你的主機文件系統沒有任何的傷害。它完全依賴你的Docker容器。本教程中,我嘗試了CentOS7Docker中的Firefox。我們可以用這個技術嘗試的GUI程序。
⑧ 如何把docker進程把啟動文件映射到容器內
953b7cc14:~$ docker ps
docker: error while loading shared libraries: libdevmapper.so.1.02: cannot open shared object file: No such file or directory
⑨ 基於 Docker 安裝 Nginx,啟動運行,外網訪問,映射配置文件
基於 Docker 安裝 Nginx
查找Nginx鏡像
語法:docker search nginx
示例:
獲取Nginx鏡像
示例:
啟動nginx容器實例
說明:--name nginx nginx 第一個nginx是通過--name指定的nginx容器實例的名稱,另一個nginx表示nginx倉庫的名稱。
查看nginx容器實例的進程信息
通過ps -ef | grep nginx查看
進入nginx容器內
殺死nginx容器實例
停止nginx實例
啟動nginx容器實例
重啟nginx容器實例
移除nginx容器實例
案例
暴露外部埠
基於docker run -d --name nginx nginx方法啟動nginx後,Docker 容器並沒有對外暴露訪問的埠,即無法通過當前主機外部瀏覽器器訪問nginx。那麼該怎麼樣呢?
語法:
-p 80:80:通過-p來指定Docker容器中nginx實例對外開放的埠。本例中,第一個80埠是對外開放的埠,第二個80埠指對外開放的埠映射到容器里的埠號。
示例:
通過當前主機外的瀏覽器訪問nginx,如下圖:
指定外部的配置文件
語法:
說明:
-v: 表示掛載一個本機目錄或文件到容器里。
-v /develop/nginx/nginx.conf:/etc/nginx/nginx.conf:將/develop/nginx/nginx.conf配置文件掛載到容器中/etc/nginx/nginx.conf這個配置文件中。
-v /develop:/develop:將/develop這個目錄掛載到容器里的/develop這個目錄里。
示例:
注意事項:指定外部配置文件,同時需要指定nginx的首頁面,否則會拋出404錯誤,原因就是因為nginx找不到配置文件中默認的index頁面。
本例中,使用/develop/apps/static/index.html替代了容器里的nginx默認的index頁面,同時,-v /develop:/develop掛載根目錄即可訪問子目錄。
指定網路模式:--net=bridge 默認模式
其中8080是指主機的埠,而80是指容器的埠
我們先看一下埠的狀態
docker是運行在Linux上的,在Windows中運行docker,實際上還是在Windows下先安裝了一個Linux環境,然後在這個系統中運行的docker。也就是說,服務中使用的localhost指的是這個Linux環境的地址,而不是我們的宿主環境Windows。我們可以通過命令:
找到這個Linux的ip地址,一般情況下這個地址是192.168.99.100,然後在Windows的瀏覽器中,輸入這個地址,加上服務的埠即可啟用了。