Docker基礎命令集合

0x00 

快過年了,單位也沒什麼事情,研究了下Docker這個GO語言的編寫的東西,並將使用過程中的注意點和常用的操作來與大家分享一下

Docker這款應用其實已經發布很久了,2016年出了windows版本 從1.3後的一些改動也使得它越來越方便了

下面的命令都是基於Ubuntu來操作的(自己的有道筆記直接粘貼過來)


0x01
Docker基礎命令
關於Docker安裝:
ubuntu使用腳本安裝docker
wget -qO- https://get.docker.com/ | sh
centos安裝docker
yum -y install docker

centos使用腳本安裝docker
yum update
curl -fsSL https://get.docker.com/ | sh

windows安裝docker
更新
udo apt-get install lxc-docker

查Docker信息
sudo docker info
sudo docker logs -f +名字

容器操作基礎命令 (sudo docker run +)
-p 80(本地端口):80(容器進程佔用端口)
綁到特定的網絡接口
-p +主機IP :80:80
-p +主機IP ::80 綁定在隨機端口
-v $pwd(掛載的本地文件路徑) :www/html(容器的文件路徑)
-i -t ubuntu:15.10 /bin/bash 加載一個帶有交互式shell的鏡像到容器
-d tomcat 加載一個守護進程
-namd XX 給容器賦予名字
dokcer start+名字
docker stop+名字
docker kill +名字
docker rm +名字 (刪除容器)
docker top+名字(查看容器內進程)

查看docker詳細信息
sudo docker inspect +名字
sudo docker inspect --format '{{.State.Running}}' 名字
sudo docker inspect --format '{{ .NetworkSettings.IPAddress }}' 名字

在容器內運行進程
sudo docker exec  -i -t “容器ID” bash(前臺方式)
sudo docker exec -d tomcat touch /www/index.php(後臺方式-守護進程較多)
自動重啓容器
sudo docker run --restart=always/on-failure:5
看容器端口在本地映射情況
sudo docker port ID 80(容器進程自己的端口)

關於鏡像
docker images 查看所有的可用的本地鏡像
docker search +鏡像名字
拉取一個鏡像
docker pull +應用短標籤
commit方法創建一個鏡像
$ sudo docker commit -m="A new custom image" --author="James Turnbull" \ 4aab3ce3cb76 jamtur01/apache2:webserver

Docker file的方法提交一個鏡像
在鏡像目錄中創建Dockerfile文件
########################
#Version
FROM ubuntu:15.10(調用的鏡像)
MAINTAINER pygain "[email protected]"
RUN apt-get update
########################
build新的鏡像
進入鏡像目錄當中
sudo docker build -t "(鏡像名字):tags(短標籤)" (--no-cache)

上傳鏡像到Docker Hub
https://hub.docker.com註冊賬號,後create一個自己的public倉庫
sudo docker push 鏡像名字:短標籤

0x02
Dockerfile文件內參數值
CMD:
指定一個容器啓動時候要運行的命令,不同於RUN是在容器層被構建的時候執行
CMD ["/bin/bash","-l"] 將-l參數給予命令 /bin/bash
Dockerfile中只能指定一條CMD[],再多的會覆蓋,在docker run 這個鏡像的過程中如果存在其他的參數,則該參數會覆蓋Dockerfile當中的CMD[""]命令

ENTRYPOINT:
與CMD用法相同,但是docker run 的時候只會覆蓋相同命令
組合:
ENTRYPOINT ["/usr/sbin/nginx"] CMD ["-h"]
docker run 參數會給予nginx進程 ,沒有則默認參數 -h
確實需要,你也可以在運行時通過docker run的--entrypoint標誌覆蓋ENTRYPOINT指令。

WORKDIR:
當新的容器層啓動的時候 設置下一步工作的目錄
WORKDIR www/html
docker run -w +工作目錄 進行覆蓋

ENV:
ENV指令用來在鏡像的構建過程中設置環境變量
ENV RVM_PATH /home/rvm/
ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR
docker run -e "/home/rvm" 進行覆蓋

USER:
基於該鏡像的容器會以說明樣的身份去啓動
USER admin
USER 00 (uid)
USER xw:admin(admin組下的用戶)
docker run -u "xw:admin" 進行覆蓋

VOLUME:
用來向容器增加捲(特定目錄)
卷可以在容器間共享和重用。
一個容器可以不是必須和其他容器共享卷。
對卷的修改是立時生效的。
對卷的修改不會對更新鏡像產生影響。
卷會一直存在直到沒有任何容器再使用它。
卷功能讓我們可以將數據(如源代碼)、數據庫或者其他內容添加到鏡像中而不是將這些內容提交到鏡像中,並且允許我們在多個容器間共享這些內容
VOLUME ["/opt/project","/data"] 創建兩個在容器當中的掛載點

ADD:
將構建上下文中的文件或者目錄,外界的URL都複製到鏡像的目標目錄當中
ADD software.lic /opt/application/software.lic
ADD http://wordpress.org/latest.zip /root/wordpress.zip
ADD latest.tar.gz /var/www/wordpress/ (源歸檔類型文件將被分解存儲)
******這種對文件的添加或減少的操作自然也會使得之前的構建緩存變得無效*****
COPY
COPY conf.d/ /etc/apache2/
不對源文件進行提取或解壓 只進行復制操作
本地文件都放到和Dockerfile 同一個目錄下。不能複製該目錄之外的任何文件,因爲構建環境將會上傳到Docker守護進程,而複製是在Docker守護進程中進行的。任何位於構建環境之外的東西都是不可用的。COPY指令的目的位置則必須是容器內部的一個絕對路徑。

ONBUILD :
當該鏡像被用作其他鏡像的基礎鏡像的時候,該鏡像的觸發器會被執行
可以看做FROM +基礎鏡像名字 執行後馬上執行
當我們用這函數建立模板之後 所有以這個爲基礎鏡像的build過程都會在FROM之後馬上執行ONBUILD 後邊的代碼
只會在子鏡像當中觸發 不會在子孫鏡像當中觸發

0x03
下一篇會講到Docker在自動化測試過程中的用法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章