Docker第三天常用命令
docker run ubuntu:15.10 /bin/echo "Hello world"
docker run 映象名(可選) 容器名 要執行的命令
執行容器
service docker status
檢視docker守護程序是否在執行(docker)
docker ps
檢視執行的容器
docker ps -a
顯示所有容器
docker run -i -t ubuntu:15.10 /bin/bash
進入互動式docker視窗
-t:在新容器內指定一個偽終端或終端。
-i:允許你對容器內的標準輸入 (STDIN) 進行互動。
docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done"
啟動後臺docker程序
-d 後臺啟動
docker logs 容器id
檢視容器內的標準輸出
docker stop 容器id
停止容器
docker restart 容器id
重啟容器
docker pull 映象
拉取映象(下載)
docker run -d -P training/webapp python app.py
啟動web程式
-d:讓容器在後臺執行。
-P:將容器內部使用的網路埠對映到我們使用的主機上。
docker run -d -P 5000:5000 training/webapp python app.py
埠對映到我們使用的主機上
-d:讓容器在後臺執行。
-P:將容器內部使用的網路埠對映到我們使用的主機上。
-P :是容器內部埠隨機對映到主機的高階口。
-p : 是容器內部埠繫結到指定的主機埠。
docker run -d -p 5000:5000 training/webapp python app.py
我們可以指定容器繫結的網路地址,比如繫結127.0.0.1。
docker run -d -p 127.0.0.1:5001:5000 training/webapp python app.py
預設都是繫結 tcp 埠,如果要繫結 UDP 埠,可以在埠後面加上 /udp。
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
docker run -d -P --name runoob training/webapp python app.py
當我們建立一個容器的時候,docker會自動對它進行命名。另外,我們也可以使用--name標識來命名容器
Docker 容器映象刪除
1.停止所有的container,這樣才能夠刪除其中的images:
docker stop $(docker ps -a -q)
如果想要刪除所有container的話再加一個指令:
docker rm $(docker ps -a -q)
2.檢視當前有些什麼images
docker images
3.刪除images,通過image的id來指定刪除誰
docker rmi <image id>
想要刪除untagged images,也就是那些id為<None>的image的話可以用
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
要刪除全部image的話
docker rmi $(docker images -q)
【Error response from daemon: conflict:
unable to delete 4ac2d12f10cd (must be forced)
- image is referenced in multiple repositories】
【來自守護程序的錯誤響應:衝突:無法刪除4ac2d12f10cd(必須強制) - 映像在多個儲存庫中被引用】
以上操作如不能刪除映象:執行如下
docker container ls -a 列出所有容器(docker ps -a -q)
刪除所有容器
docker rm -f $(docker container ls -a)
刪除映象
docker rmi 映象id
curl -s http://ip.cn
強制刪除容器db01、db02
docker rm -f db01 db02
docker port 容器id
可以檢視指定 (ID 或者名字)容器的某個確定埠對映到宿主機的埠號。
docker logs -f 容器id
檢視容器輸出日誌,類似linux tail -f
docker top 容器id
來檢視容器內部執行的程序
docker inspect 容器id
檢視 Docker 的底層資訊。它會返回一個 JSON 檔案記錄著 Docker 容器的配置和狀態資訊
docker ps -l
查詢最後一次建立的容器
docker rm 容器id
刪除不需要的容器
docker images
來列出本地主機上的映象
我們可以從 Docker Hub 網站來搜尋映象,Docker Hub 網址為: https://hub.docker.com/
我們也可以使用 docker search 命令來搜尋映象。比如我們需要一個httpd的映象來作為我們的web服務。
我們可以通過 docker search 命令搜尋 httpd 來尋找適合我們的映象。
docker search httpd
docker build
構建新的映象
接下來我們建立一個守護態的Docker容器,然後使用docker attach命令進入該容器。
docker run -itd ubuntu:14.04 /bin/bash
進入容器的幾種方法:
1、exec
通過docker ps 檢視需要進入的容器pid
執行
docker exec -it 246f35c432de /bin/bash
退出容器,不會關閉容器,一般使用這個方法。
2、attach
通過docker ps 檢視需要進入的容器pid
docker attach pid
退出容器會關閉容器,不推薦
3、ssh
在映象(或容器)中安裝SSH Server,這樣就能保證多人進入
容器且相互之間不受干擾了,相信大家在當前的生產環境中(沒有使用Docker的情況)也是這樣做的。
但是使用了Docker容器之後不建議使用ssh進入到Docker容
4、nsenter
系統預設將我們需要的nsenter安裝到主機中
如果沒有安裝的話,按下面步驟安裝即可(注意是主機而非容器或映象)
具體的安裝命令如下:
wget https://www.kernel.org/pub/linux/utils/util-linux/v2.24/util-linux-2.24.tar.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可以訪問另一個程序的名稱空間。所以為了連線到某個容器我們還需要獲取該容器的第一個程序的PID。
可以使用docker inspect命令來拿到該PID。
docker ps
可以使用docker inspect來檢視該容器的詳細資訊。
docker inspect 44fc0f0582d9
docker inspect 246f35c432de | grep Pid
如果要顯示該容器第一個進行的PID可以使用如下方式
docker inspect -f {{.State.Pid}} 44fc0f0582d9
在拿到該程序PID之後我們就可以使用nsenter命令訪問該容器了。
nsenter --target 3326 --mount --uts --ipc --net --pid
退出容器,不會關閉容器。
docker tag 命令,為映象新增一個新的標籤。
docker tag 映象id 映象名:標籤名(版本號)
docker run -p 80:80 --name mynginx -v $PWD/www:/www -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf -v $PWD/logs:/wwwlogs -d nginx
-p 80:80:將容器的80埠對映到主機的80埠
--name mynginx:將容器命名為mynginx
-v $PWD/www:/www:將主機中當前目錄下的www掛載到容器的/www
-v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf:將主機中當前目錄下的nginx.conf掛載到容器的/etc/nginx/nginx.conf
-v $PWD/logs:/wwwlogs:將主機中當前目錄下的logs掛載到容器的/wwwlogs
docker建立映象
兩種方法
1、通過更新已有的映象容器,並提交映象,來建立映象。
進入docker互動式視窗
docker run -i -t ubuntu /bin/bash
在容器中更新映象
apt-get update
退出互動式視窗
exit
提交映象
docker commit -m="has update" -a="runoob" e218edb10161 ubuntu:v2
-m:提交的描述資訊
-a:指定映象作者
e218edb10161:容器ID
ubuntu:v2 指定要建立的目標映象名和標籤(版本)
2、使用dockerfile來建立新的映象
1、建立一個dockerfile檔案
touch dockerfile
2、新增指令
FROM centos:6.7
MAINTAINER Fisher "[email protected]"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd runoob
RUN /bin/echo 'runoob:123456' |chpasswd
RUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/local
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一個指令都會在映象上建立一個新的層,每一個指令的字首都必須是大寫的。
第一條FROM,指定使用哪個映象源
RUN 指令告訴docker 在映象內執行命令,安裝了什麼。。。
然後,我們使用 Dockerfile 檔案,通過 docker build 命令來構建一個映象。
docker build -t runoob/centos:6.7 .
-t :指定要建立的目標映象名
.(上下文) :Dockerfile 檔案所在目錄,可以指定Dockerfile 的絕對路徑