① docker怎麼清理容器的文件
# 殺死所有正在運行的容器.
alias dockerkill='docker kill $(docker ps -a -q)'
# 刪除所有已經停止的容器.
alias dockercleanc='docker rm $(docker ps -a -q)'
# 刪除所有未打標簽的鏡像.
alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
# 刪除所有已經停止的容器和未打標簽的鏡像.
alias dockerclean='dockercleanc || true && dockercleani'
另附上docker常用命令
docker version #查看版本
docker search tutorial#搜索可用docker鏡像
docker pull learn/tutorial #下載鏡像
docker run learn/tutorial echo "hello word"#在docker容器中運行hello world!
docker run learn/tutorial apt-get install -y ping#在容器中安裝新的程序
保存鏡像
首先使用docker ps -l命令獲得安裝完ping命令之後容器的id。然後把這個鏡像保存為learn/ping。
提示:
1.運行docker commit,可以查看該命令的參數列表。
2.你需要指定要提交保存容器的ID。(譯者按:通過docker ps -l 命令獲得)
3.無需拷貝完整的id,通常來講最開始的三至四個字母即可區分。(譯者按:非常類似git裡面的版本號)
正確的命令:
docker commit 698 learn/ping
② 詳解Docker——你需要知道的Docker進階知識五
Dockerfile 是一個文本文件,其中包含了構建 Docker 鏡像需要執行的命令序列。使用 docker build 命令從 Dockerfile 中讀取指令來構建鏡像。
構建鏡像時,該過程的第一件事是將 Dockerfile 文件所在目錄下的所有內容發送給 Docker 守護進程。所以大多數情況下,最好創建一個新的目錄,在其中保存 Dockerfile ,以及構建鏡像所需的其它文件。Dockerfile 文件所在目錄也被稱為構建上下文(context)。
使用 FROM 指令指定一個基礎鏡像,後續指令將在此鏡像基礎上運行:
在 Dockerfile 中可以指定一個用戶,後續的 RUN , CMD 以及 ENTRYPOINT 指令都會使用該用戶身份去執行,該用戶必須已存在。
除了指定用戶之外,還可以使用 WORKDIR 指定當前工作目錄(CWD), RUN , CMD , COPY , ADD 指令將在指定的工作目錄中執行。
RUN 指令用於執行命令,該指令有兩種形式:
例如我們執行更新命令:
CMD 的使用方式跟 RUN 類似,不過在一個 Dockerfile 文件中只能有一個 CMD 指令,如果有多個,則只有最後一個會生效。該指令指定了啟動容器時要執行的命令,例如:
可以在 docker run 時指定命令來覆蓋默認的 CMD 命令,比如 docker run image echo"hello shiyanlou" 。
CMD 指令還有一種特殊用法。在 Dockerfile 中,如果使用 ENTRYPOINT 指令指定了入口命令,則 CMD 指令的內容會作為 ENTRYPOINT 指令的參數:
ENTRYPOINT 指令會覆蓋 CMD 指令作為容器運行時的默認指令,並且該指令不會被 docker run 時指定的指令覆蓋,如下示例:
上述文件構建出來的鏡像,使用 docker run image 等同於 docker run image ls-a-l 。使用 docker run image-i-s 等同於 docker run image ls-a-i-s 。即 CMD 指令的值會被當作 ENTRYPOINT 指令的參數附加到 ENTRYPOINT 指令的後面,只有 CMD 指令可以被覆蓋。
COPY 和 ADD 都用於將構建上下文中的文件,目錄等復制到鏡像中。使用方式如下:
`` 可以指定多個,但是其路徑不能超出構建上下文范圍,即必須在 Dockerfile 同級或子目錄中。
不需要預先存在,不存在時會自動創建,如果使用相對路徑,則 為相對於工作目錄的路徑。塌陪
COPY 和 ADD 的不同之處在於,ADD 可伏衫或以添加遠程文件,並且 `` 可以是 gzip 或 tar 等格式的壓縮文件,添加時會自動進行解壓。
ENV 指令用於設置環境變數:
VOLUME 指令指定要創建的掛載路徑,在容器運行時,將為每個掛載路徑創建一個匿名卷並掛載上去:
上述指令將會在容器運行時,創建兩個匿名卷,並分別掛載到容器中的 /data1 和 /data2 路徑。
學習了上面這些常見的 Dockerfile 指令之後,可以使用這些指令來構建一個鏡像。如下所示,構建一個提供 ssh 服務的鏡像:
構建鏡像
查看鏡像
啟動容器
查看已經啟動的容器
測試遠程登錄
Compose 是運行由多個容器組成的 Docker 應用的工具,使用 Compose 可以一次啟動一組有關聯的服務,每個服務由來自同一鏡像的單個或多個容器組成。
在復雜應用中,應用一般由多個服務(service)組成,例如一個網站後台通常包含 Web 服務、資料庫服務、緩存缺伍服務、消息隊列服務等。
使用 Compose 的步驟如下:
目前有三種版本的 Compose 文件格式:
下載 docker-compose-Linux-x86_64
下載成功後,為了方便使用,可以將其添加到 PATH 路徑下
執行完成後,就能夠在終端下直接使用 docker-compose 命令了:
接下來我們將創建一個 Web 應用,該應用包含兩個容器:
項目目錄結構如下:
首先編輯 app/web/web.py 文件,寫入下面的內容:
上述代碼創建了一個簡單的 Web 應用。該應用會連接 redis 服務,在訪問 / 頁面時,自動將變數 number 加 1。
編輯 app/web/requirements.txt 文件,輸入如下內容:
requirements.txt 文件存放了 Web 應用依賴的第三方庫包的名稱和版本信息。
編輯 app/web/Dockerfile 文件,添加如下內容
上述 Dockerfile 定義了 Web 應用鏡像,該鏡像基於 python:2.7 基礎鏡像,在其基礎上安裝了應用依賴的庫包,並通過 CMD 指令指定了應用的啟動命令。
編輯 app/docker-compose.yml 文件:
該 docker-compose.yml 文件定義了兩個服務,分別為 web 和 redis 服務,並且配置了 web 服務的埠映射和掛載目錄。 depends_on 定義了依賴關系,被依賴的服會先啟動。
進入 app 目錄,執行 docker-compose up 命令來啟動應用:
啟動成功後,就可以打開網址 127.0.0.1:8001 來訪問 Web 應用了。
另外一些命令:
③ docker常用命令
1、 service docker start // 啟動docker
2、 docker images // 查看docker所安裝的鏡像
3、 docker search [name] 查詢某個鏡像 例如查詢mysql docker search mysql
4、 docker pull [name] 拉取某個鏡像 例如mysql docker pull mysql
5、 docker pull [name] [:tag] tag版本肢鍵號 如果不寫默認拉取最新的版本
例如: docker pull mysql:5.7
6、 docker rmi [imgaeId] 刪除命令,imageId是鏡像id
2.1 新建一個新的容器 docker pull centos
2.2 docker run [可選參數] image名字
參數說明
--name="Name" 給容器命名
-d 後台方式運行
-p [主機埠]:[容器埠] 指定容器的埠 例如啟動tomcat 命令: docker run -p 8081:8080 tomcat 解釋:8081是對外訪問(伺服器)的埠。8080是docker裡面的tomcat埠. tomcat是鏡像拉取下來後的名字. 例:若別人訪問。IP+8081埠才能訪問到tomcat啟動的項目
-P 大寫P是隨機指定埠
-it 與容器交互,就是進入到容器裡面
命令: docker run -it [鏡像名稱] /bin/bash 例子: docker run -it centos /bin/bash
docker ps 查看運行派行中的容器
docker ps -q 只查詢運行容器的編號,一般與下面-a合並使用, docker ps -aq
docker ps -a 查看曾經運行過的容器
docker ps -a -n=1 加上-n可以指定查詢最近幾個運行的容器、
Ctrl+p+q 這樣退出就不會停止容器
docker rm -f [容器id] 指定刪除某個運行的容器
docker rm -f $(docker ps -aq) 刪除全部運行的容器
docker start [容器id] 啟動容器
docker restart [容器id] 重啟容器
docker stop [容器id] 停止容器
docker kill [容器id] 強制停止容器
docker run -d [鏡像名] 例如: docker run -d centos
但是有問題, docker ps 查詢不到運行的容器
原因:docker容器用後台運行,就必須要有一個前台進程,docker發現沒有應用,所以就自動停止
docker logs -tf --tail 10 [容器id]
t的意思是時間戳,f保留日誌列印窗口,tail持續列印,10列印最後10條
docker top [容器id]
docker inspect [容器id]
方式一: docker exec -it [containt_id] /bin/bash // 進入該鏡像內部
docker cp [容器id]:[容器路徑] [主機路歷帶巧徑]
④ docker容器下搭建python環境
1)進入容器
docker exec -it 容器id(或容器名) /bin/bash
查看當前操作系統cat /etc/issue
Debian GNU/Linux 10 \n \l
這里查到的是Debian系統(不是ubuntu, 也不是centos),這里yum是沒有的,所以不能用yum安裝了,這里用apt-get代替yum
先執行更新apt-get
apt-get update
2)在當前容器目錄下(自己的虛擬機:/usr/local/tomcat)
mkdir python3
cd python3/
執行命令:wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
解壓:tar -xvf Python-3.6.8.tgz
cd Python-3.6.8/
然後執行:./configure --prefix=/usr/local/tomcat/python3,會報錯:configure: error: no acceptable C compiler found in $PATH
apt-get 安裝依賴包
這個是因為缺少gcc相關依賴包,使用apt-get代替yum安裝相關依賴包
apt-get -y install gcc automake autoconf libtool make
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo
make編譯安裝
./configure --prefix=/usr/local/tomcat/python3 --with-ssl
make
make install
最後:添加軟鏈接
添加python3軟鏈接
ln -s /var/jenkins_home/python3/bin/python3.6 /usr/bin/python3
添加pip3軟鏈接
ln -s /var/jenkins_home/python3/bin/pip3 /usr/bin/pip3
註:
ssl問題
如果pip3安裝的時候遇到報ssl相關問題:pip is configured with locations that require TLS/SSL, however the ssl mole in Python is not available.
這個是因為缺少ssl依賴包,網上的解決方案是yum install openssl-devel ,由於Debian系統沒有yum,用apt-get安裝
apt-get -y install openssl libssl-dev
安裝完成之後只能解決系統自帶的python2對應的pip安裝問題,無法解決python3的pip3安裝問題。
解決辦法:上面編譯的時候需加上參數 --with-ssl
./configure --prefix=/usr/local/tomcat/python3 --with-ssl
重新執行make和make install 就可以了