docker stop scriptpython
#!/bin/bashlinux
CID_LIST=$(docker ps -q | xargs)
if [ "$CID_LIST" = "" ]; then
echo "no containers running."
else
docker stop $CID_LIST
fi
echo "all containers closed."git
--------------------------------------------------------------------------------github
#!/bin/bash
PWD_DIR=$(cd "$(dirname "$0")"; pwd)
echo "current dir path:"$PWD_DIR
export ROOT=$PWD_DIR
cd $ROOTweb
---------------------------------------------------------------------------------redis
# 使用ubuntu運行一個交互性的shell, # 分配一個僞終端,附帶stdin和stdout(輸入/輸出流) # 若是你想退出分離出來的僞終端, # 可使用CTRL -p+CTRL -q --就像先按CTRL -p 而後CTRL -q sudo docker run -i -t ubuntu /bin/bash
docker進程常用root用戶運行,從docker的0.5.2版本開始,docker的進程綁定Unix Socket來代替一個TCP端口,在默認狀況下Unix Socket屬於root用戶,因此在默認狀況下,你須要賦予權限sudodocker
從0.5.3版本開始,若是你(或者你安裝的docker)建立的時候用的docker或者添加用戶的unix羣組,當docker進程啓動的時候,這個docker進程會把Unix socket的讀寫(read/writable)的全部權交給docker羣組.docker進程通常必須root用戶運行,可是你運行docker客戶端的用戶是docker組的,這個時候你就不須要加sudo就能夠運行所有的客戶端命令shell
警告:docker羣組必須是和root等價的bootstrap
# 若是不存在docker羣組,添加一個用戶羣組 sudo groupadd docker # Add the connected user "${USER}" to the docker group. # Change the user name to match your preferred user. # You may have to logout and log back in again for # this to take effect. sudo gpasswd -a ${USER} docker # Restart the docker daemon. sudo service docker restart
警告ubuntu
改變默認的docker進程綁定的TCP端口或者Unix docker的用戶組,將會 經過容許非root用戶得到root權限來修改主機,會增長你的安全風險!
使用 -H 他能夠運行你改變docker進程監聽指定的IP和端口。默認狀況下,他會監聽 unix:///var/run/docker.sock只容許本地的root用戶鏈接,你能夠設置他 0.0.0.0:4243 或者指定主機IP給任何用戶,可是這不是咱們所推薦的,由於那麼低權限將會得到root正在運行的主機進程的訪問權限!
一樣,docker客戶端可使用-H 來指定鏈接的端口
-H 受權主機和端口的格式是這樣的:tcp://[host][:port] or unix://path
舉個例子
-H 當空的時候 將會使用默認值就像沒有 -H同樣
-H 也能夠用簡短的方式受權TCP綁定: host[:port] or :port
# Run docker in daemon mode sudo <path to>/docker -H 0.0.0.0:5555 -d & # Download an ubuntu image sudo docker -H :5555 pull ubuntu
你能夠是用多個 -H 例如你想監聽你全部的TCP和Unix socket
# Run docker in daemon mode sudo <path to>/docker -H tcp://127.0.0.1:4243 -H unix:///var/run/docker.sock -d & # Download an ubuntu image, use default Unix socket sudo docker pull ubuntu # OR use the TCP port sudo docker -H tcp://127.0.0.1:4243 pull ubuntu
# 開啓一個很是有用的長時間工做進程 JOB=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done") # 到目前爲止的收集的輸出 sudo docker logs $JOB # 殺死這個進程 sudo docker kill $JOB
sudo docker ps
# 爲容器綁定4444端口,並告訴網絡監聽4444 JOB=$(sudo docker run -d -p 4444 ubuntu:12.10 /bin/nc -l 4444) # 查看個人容器用的公共端口 PORT=$(sudo docker port $JOB 4444 | awk -F: '{ print $2 }') # 鏈接公共端口 echo hello world | nc 127.0.0.1 $PORT # 確認網絡鏈接是否工做 echo "Daemon received: $(sudo docker logs $JOB)"
------------------------------------------------------------------------------------------------------------------------------------------------------------------
功能劃分 |
命令 |
環境信息相關 |
|
系統運維相關 |
|
日誌信息相關 |
|
Docker Hub服務相關 |
|
單個字符的參數能夠放在一塊兒組合配置,例如
docker run -t -i --name test busybox sh
能夠用這樣的方式等同:
docker run -ti --name test busybox sh
Boolean參數形式如: -d=false。注意,當你聲明這個Boolean參數時,好比 docker run -d=true,它將直接把啓動的Container掛起放在後臺運行。
參數如 --name=「」 定義一個字符串,它僅能被定義一次。同類型的如-c=0 定義一個數字,它也只能被定義一次。
Docker後臺進程是一個常駐後臺的系統進程,值得注意的是Docker使用同一個文件來支持客戶端和後臺進程,其中角色切換經過-d來實現。這個後臺進程是用來管理容器的,使用Docker --help能夠獲得更詳細的功能參數配置, 以下圖:
Docker後臺進程參數清單以下表:
參數 |
解釋 |
--api-enable-cors=false |
開放遠程API調用的 CORS 頭信息。這個接口開關對想進行二次開發的上層應用提供了支持。 |
-b, --bridge="" |
掛載已經存在的網橋設備到 Docker 容器裏。注意,使用 none 能夠停用容器裏的網絡。 |
--bip="" |
使用 CIDR 地址來設定網絡橋的 IP。注意,此參數和 -b 不能一塊兒使用。 |
-D, --debug=false |
開啓Debug模式。例如:docker -d -D |
-d, --daemon=false |
開啓Daemon模式。 |
--dns=[] |
強制容器使用DNS服務器。例如: docker -d --dns 8.8.8.8 |
--dns-search=[] |
強制容器使用指定的DNS搜索域名。例如: docker -d --dns-search example.com |
-e, --exec-driver="native" |
強制容器使用指定的運行時驅動。例如:docker -d -e lxc |
-G, --group="docker" |
在後臺運行模式下,賦予指定的Group到相應的unix socket上。注意,當此參數 --group 賦予空字符串時,將去除組信息。 |
-g, --graph="/var/lib/docker" |
配置Docker運行時根目錄 |
-H, --host=[] |
在後臺模式下指定socket綁定,能夠綁定一個或多個 tcp://host:port, unix:///path/to/socket, fd://* 或 fd://socketfd。例如: $ docker -H tcp://0.0.0.0:2375 ps 或者 $ export DOCKER_HOST="tcp://0.0.0.0:2375" |
--icc=true |
啓用內聯容器的通訊。 |
--ip="0.0.0.0" |
容器綁定IP時使用的默認IP地址 |
--ip-forward=true |
啓動容器的 net.ipv4.ip_forward |
--iptables=true |
啓動Docker容器自定義的iptable規則 |
--mtu=0 |
設置容器網絡的MTU值,若是沒有這個參數,選用默認 route MTU,若是沒有默認route,就設置成常量值 1500。 |
-p, --pidfile="/var/run/docker.pid" |
後臺進程PID文件路徑。 |
-r, --restart=true |
重啓以前運行中的容器 |
-s, --storage-driver="" |
強制容器運行時使用指定的存儲驅動,例如,指定使用devicemapper, 能夠這樣: docker -d -s devicemapper |
--selinux-enabled=false |
啓用selinux支持 |
--storage-opt=[] |
配置存儲驅動的參數 |
--tls=false |
啓動TLS認證開關 |
--tlscacert="/Users/dxiao/.docker/ca.pem" |
經過CA認證過的的certificate文件路徑 |
--tlscert="/Users/dxiao/.docker/cert.pem" |
TLS的certificate文件路徑 |
--tlskey="/Users/dxiao/.docker/key.pem" |
TLS的key文件路徑 |
--tlsverify=false |
使用TLS並作後臺進程與客戶端通信的驗證 |
-v, --version=false |
顯示版本信息 |
注意,其中帶有[] 的啓動參數能夠指定屢次,例如
$ docker run -a stdin -a stdout -a stderr -i -t ubuntu /bin/bash
info
使用方法: docker info
例子:
[fedora@docker-devel-cli docker]$ sudo docker -D info Containers: 0 Images: 32 Storage Driver: devicemapper Pool Name: docker-252:1-130159-pool Data file: /var/lib/docker/devicemapper/devicemapper/data Metadata file: /var/lib/docker/devicemapper/devicemapper/metadata Data Space Used: 1616.9 Mb Data Space Total: 102400.0 Mb Metadata Space Used: 2.4 Mb Metadata Space Total: 2048.0 Mb Execution Driver: native-0.2 Kernel Version: 3.11.10-301.fc20.x86_64 Debug mode (server): false Debug mode (client): true Fds: 11 Goroutines: 14 EventsListeners: 0 Init SHA1: 2c5adb59737b8a01fa3fb968519a43fe140bc9c9 Init Path: /usr/libexec/docker/dockerinit Sockets: [fd://]
使用說明:
這個命令在開發者報告Bug時會很是有用,結合docker vesion一塊兒,能夠隨時使用這個命令把本地的配置信息提供出來,方便Docker的開發者快速定位問題。
version
使用方法: docker version
使用說明:
顯示Docker的版本號,API版本號,Git commit, Docker客戶端和後臺進程的Go版本號。
attach
使用方法: docker attach [OPTIONS] CONTAINER
例子:
$ ID=$(sudo docker run -d ubuntu /usr/bin/top -b) $ sudo docker attach $ID top - 17:21:49 up 5:53, 0 users, load average: 0.63, 1.15, 0.78 Tasks: 1 total, 1 running, 0 sleeping, 0 stopped, 0 zombie %Cpu(s): 1.0 us, 0.7 sy, 0.0 ni, 97.7 id, 0.7 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 2051644 total, 723700 used, 1327944 free, 33032 buffers KiB Swap: 0 total, 0 used, 0 free. 565836 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 1 root 20 0 19748 1280 1008 R 0.0 0.1 0:00.04 top $ sudo docker stop $ID
使用說明:
使用這個命令能夠掛載正在後臺運行的容器,在開發應用的過程當中運用這個命令能夠隨時觀察容器內進程的運行情況。開發者在開發應用的場景中,這個命令是一個很是有用的命令。
build
使用方法:docker build [OPTIONS] PATH | URL | -
例子:
$ docker build . Uploading context 18.829 MB Uploading context Step 0 : FROM busybox ---> 769b9341d937 Step 1 : CMD echo Hello world ---> Using cache ---> 99cc1ad10469 Successfully built 99cc1ad10469
使用說明:
這個命令是從源碼構建新Image的命令。由於Image是分層的,最關鍵的Base Image是如何構建的是用戶比較關心的,Docker官方文檔給出了構建方法,請參考這裏。
commit
使用方法:docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
例子:
$ sudo docker ps ID IMAGE COMMAND CREATED STATUS PORTS c3f279d17e0a ubuntu:12.04 /bin/bash 7 days ago Up 25 hours 197387f1b436 ubuntu:12.04 /bin/bash 7 days ago Up 25 hours $ docker commit c3f279d17e0a SvenDowideit/testimage:version3 f5283438590d $ docker images | head REPOSITORY TAG ID CREATED VIRTUAL SIZE SvenDowideit/testimage version3 f5283438590d 16 seconds ago 335.7 MB
使用說明:
這個命令的用處在於把有修改的container提交成新的Image,而後導出此Imange分發給其餘場景中調試使用。Docker官方的建議是,當你在調試完Image的問題後,應該寫一個新的Dockerfile文件來維護此Image。commit命令僅是一個臨時建立Imange的輔助命令。
cp
使用方法: cp CONTAINER:PATH HOSTPATH
使用說明:
使用cp能夠把容器內的文件複製到Host主機上。這個命令在開發者開發應用的場景下,會須要把運行程序產生的結果複製出來的需求,在這個狀況下就可使用這個cp命令。
diff
使用方法:docker diff CONTAINER
例子:
$ sudo docker diff 7bb0e258aefe C /dev A /dev/kmsg C /etc A /etc/mtab A /go A /go/src A /go/src/github.com A /go/src/github.com/dotcloud ....
使用說明:
diff會列出3種容器內文件狀態變化(A - Add, D - Delete, C - Change )的列表清單。構建Image的過程當中須要的調試指令。
export
使用方法:docker export CONTAINER
例子:
$ sudo docker export red_panda > latest.tar
使用說明:
把容器系統文件打包並導出來,方便分發給其餘場景使用。
images
使用方法:docker images [OPTIONS] [NAME]
例子:
$ sudo docker images | head REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE <none> <none> 77af4d6b9913 19 hours ago 1.089 GB committest latest b6fa739cedf5 19 hours ago 1.089 GB <none> <none> 78a85c484f71 19 hours ago 1.089 GB $ docker latest 30557a29d5ab 20 hours ago 1.089 GB <none> <none> 0124422dd9f9 20 hours ago 1.089 GB <none> <none> 18ad6fad3402 22 hours ago 1.082 GB <none> <none> f9f1e26352f0 23 hours ago 1.089 GB tryout latest 2629d1fa0b81 23 hours ago 131.5 MB <none> <none> 5ed6274db6ce 24 hours ago 1.089 GB
使用說明:
Docker Image是多層結構的,默認只顯示最頂層的Image。不顯示的中間層默認是爲了增長可複用性、減小磁盤使用空間,加快build構建的速度的功能,通常用戶不須要關心這個細節。
import / save / load
使用方法:
docker import URL|- [REPOSITORY[:TAG]] docker save IMAGE docker load
使用說明:
這一組命令是系統運維裏很是關鍵的命令。加載(兩種方法: import, load),導出(一種方法: save)容器系統文件。
inspect
使用方法:
docker inspect CONTAINER|IMAGE [CONTAINER|IMAGE...]
例子:
$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' $INSTANCE_ID
使用說明:
查看容器運行時詳細信息的命令。瞭解一個Image或者Container的完整構建信息就能夠經過這個命令實現。
kill
使用方法:
docker kill [OPTIONS] CONTAINER [CONTAINER...]
使用說明:
殺掉容器的進程。
port
使用方法:
docker port CONTAINER PRIVATE_PORT
使用說明:
打印出Host主機端口與容器暴露出的端口的NAT映射關係
pause / unpause
使用方法:
docker pause CONTAINER
使用說明:
使用cgroup的freezer順序暫停、恢復容器裏的全部進程。詳細freezer的特性,請參考官方文檔。
ps
使用方法:
docker ps [OPTIONS]
例子:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4c01db0b339c ubuntu:12.04 bash 17 seconds ago Up 16 seconds webapp d7886598dbe2 crosbymichael/redis:latest /redis-server --dir 33 minutes ago Up 33 minutes 6379/tcp redis,webapp/db
使用說明:
docker ps打印出正在運行的容器,docker ps -a打印出全部運行過的容器。
rm
使用方法:
docker rm [OPTIONS] CONTAINER [CONTAINER...]
例子:
$ sudo docker rm /redis /redis
使用說明:
刪除指定的容器。
rmi
使用方法:
docker rmi IMAGE [IMAGE...]
例子:
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE test1 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) test2 latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) $ sudo docker rmi fd484f19954f Error: Conflict, cannot delete image fd484f19954f because it is tagged in multiple repositories 2013/12/11 05:47:16 Error: failed to remove one or more images $ sudo docker rmi test1 Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 $ sudo docker rmi test2 Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 $ sudo docker images REPOSITORY TAG IMAGE ID CREATED SIZE test latest fd484f19954f 23 seconds ago 7 B (virtual 4.964 MB) $ sudo docker rmi test Untagged: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8 Deleted: fd484f19954f4920da7ff372b5067f5b7ddb2fd3830cecd17b96ea9e286ba5b8
使用說明:
指定刪除Image文件。
run
使用方法:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
例子:
$ sudo docker run --cidfile /tmp/docker_test.cid ubuntu echo "test"
使用說明:
這個命令是核心命令,能夠配置的參數多達28個參數。詳細的解釋能夠經過docker run --help列出。官方文檔中提到的 Issue 2702:"lxc-start: Permission denied - failed to mount" could indicate a permissions problem with AppArmor. 在最新版本的Dcoker中已經解決。
start / stop / restart
使用方法:
docker start CONTAINER [CONTAINER...]
使用說明:
這組命令能夠開啓(兩個:start, restart),中止(一個:stop)一個容器。
tag
使用方法:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
使用說明:
組合使用用戶名,Image名字,標籤名來組織管理Image。
top
使用方法:
docker top CONTAINER [ps OPTIONS]
使用說明:
顯示容器內運行的進程。
wait
使用方法:
docker wait CONTAINER [CONTAINER...]
使用說明:
阻塞對指定容器的其餘調用方法,直到容器中止後退出阻塞。
events
使用方法:
docker events [OPTIONS]
使用說明:
打印容器實時的系統事件。
history
使用方法:
docker history [OPTIONS] IMAGE
例子:
$ docker history docker IMAGE CREATED CREATED BY SIZE 3e23a5875458790b7a806f95f7ec0d0b2a5c1659bfc899c89f939f6d5b8f7094 8 days ago /bin/sh -c #(nop) ENV LC_ALL=C.UTF-8 0 B 8578938dd17054dce7993d21de79e96a037400e8d28e15e7290fea4f65128a36 8 days ago /bin/sh -c dpkg-reconfigure locales && locale-gen C.UTF-8 && /usr/sbin/update-locale LANG=C.UTF-8 1.245 MB be51b77efb42f67a5e96437b3e102f81e0a1399038f77bf28cea0ed23a65cf60 8 days ago /bin/sh -c apt-get update && apt-get install -y git libxml2-dev python build-essential make gcc python-dev locales python-pip 338.3 MB 4b137612be55ca69776c7f30c2d2dd0aa2e7d72059820abf3e25b629f887a084 6 weeks ago /bin/sh -c #(nop) ADD jessie.tar.xz in / 121 MB 750d58736b4b6cc0f9a9abe8f258cef269e3e9dceced1146503522be9f985ada 6 weeks ago /bin/sh -c #(nop) MAINTAINER Tianon Gravi <admwiggin@gmail.com> - mkimage-debootstrap.sh -t jessie.tar.xz jessie http://http.debian.net/debian 0 B 511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158 9 months ago 0 B
使用說明:
打印指定Image中每一層Image命令行的歷史記錄。
logs
使用方法:
docker logs CONTAINER
使用說明:
批量打印出容器中進程的運行日誌。
login
使用方法:
docker login [OPTIONS] [SERVER]
使用說明:
登陸Hub服務。
pull / push
使用方法:
docker push NAME[:TAG]
使用說明:
經過此命令分享Image到Hub服務或者自服務的Registry服務。
search
使用方法:
docker search TERM
使用說明:
經過關鍵字搜索分享的Image。
經過以上Docker命令行的詳細解釋,能夠強化對Docker命令的全面理解。考慮到Docker命令行的發展變化很是快,讀者能夠參考官方的命令行解釋文檔更新相應的命令行解釋。另外,經過以上Docker命令行的分析,能夠知道Docker命令行架構設計的特色在於客戶端和服務端的運行文件是同一個文件,內部實現代碼應該是重用的設計。筆者但願開發者在開發相似的命令行應用時參考這樣的設計,減小先後臺容錯的複雜度。