獲取html
docker pullpython
docker pull +(倉庫:標籤)
docker pull registry.hub.docker.com/ubuntu:12.04
docker pull dl.dockerpool.com:5000/ubuntu:12.04golang
查看web
docker images
docker
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
倉庫 標記 鏡像ID號 建立時間 鏡像大小
建立1數據庫
docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2json
-m 來指定提交的說明信息,跟咱們使用的版本控制工具同樣;
-a 能夠指定更新的用戶信息;
0b2616b0e5a8 是用來建立鏡像的容器的 ID;
ouruser/sinatra:v2 指定目標鏡像的倉庫名和 tag 信息。
建立成功後會返回這個鏡像的 ID 信息。ubuntu
建立2安全
使用Dockerfilebash
docker build -t="ouruser/sinatra:v2" .
-t 標記來添加 tag,指定新的鏡像的用戶信息。
「.」 是 Dockerfile 所在的路徑(當前目錄),也能夠替換爲一個具體的 Dockerfile 的路徑。
建立3
docker import
cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
標籤
docker tag
docker tag 5db5f8471261 ouruser/sinatra:devel
載入與存出
docker save
docker save -o ubuntu_14.04.tar ubuntu:14.04
docker load
docker load --input ubuntu_14.04.tar
docker load < ubuntu_14.04.tar
上傳
docker push
docker push ouruser/sinatra
運行
docker run
docker run -t -i ubuntu:12.04 /bin/bash
移除
docker rmi
docker rmi training/sinatra
在刪除鏡像以前要先用 docker rm 刪掉依賴於這個鏡像的全部容器
啓動
docker run
docker run ubuntu:14.04 /bin/echo 'Hello world'
docker run -t -i ubuntu:14.04 /bin/bash
-t 選項讓Docker分配一個僞終端(pseudo-tty)並綁定到容器的標準輸入上,
-i 則讓容器的標準輸入保持打開
docker start
docker start +容器的id或name
啓動一箇中止狀態的容器
docker restart
docker restart + 容器ID
重啓一個運行狀態的容器
後臺運行(守護態運行)
docker run -d +.....
docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看容器
docker ps
docker ps -a
中止的容器也會列出
docker ps -q
只列出容器的id
docker inspect
列出容器的全部信息
docker logs
獲取容器的輸出信息
進入容器
docker attach
docker run -d -it ubuntu:14.04
docker attach +容器name
nsenter 命令
$ sudo docker run -idt ubuntu
243c32535da7d142fb0e6df616a3c3ada0b8ab417937c853a9e1c251f499f550
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
243c32535da7 ubuntu:latest "/bin/bash" 18 seconds ago Up 17 seconds nostalgic_hypatia
$ PID=$(docker-pid 243c32535da7)
10981
$ sudo nsenter --target 10981 --mount --uts --ipc --net --pid
root@243c32535da7:/#
.bashrc_docker
使用方法http://dockerpool.com/static/books/docker_practice/container/enter.html
導入導出容器
docker export
docker export 7691a814370e > ubuntu.tar
導出容器快照到本地文件
docker import
cat ubuntu.tar | sudo docker import - test/buntu:v1.0
docker import http://example.com/exampleimage.tgz example/imagerepo
中止容器
docker stop
docker stop +容器ID
刪除容器
docker rm
docker rm trusting_newton
docker rm -f +容器name
強制刪除運行中的容器
建立
使用 -v 標記來建立一個數據卷並掛載到容器裏
docker run -d -P --name web -v /webapp training/webapp python app.py
一次 run 中屢次使用能夠掛載多個數據卷
建立一個 web 容器,並加載一個數據捲到容器的 /webapp 目錄
*Dockerfile 中使用 VOLUME 來添加一個或者多個新的捲到由該鏡像建立的任意容器
掛載
使用 -v 標記指定掛載一個本地主機的目錄到容器中去
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
上面的命令加載主機的 /src/webapp 目錄到容器的 /opt/webapp 目錄
.
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
-P是指隨機映射一個 49000~49900 的端口到內部容器開放的網絡端口
Docker 掛載數據卷的默認權限是讀寫,用戶也能夠經過 :ro 指定爲只讀
-v 標記也能夠從主機掛載單個文件到容器中
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
這樣就能夠記錄在容器輸入過的命令了
*注意:若是直接掛載一個文件,會致使報錯誤信息。最簡單的辦法就直接掛載文件的父目錄
數據卷容器
一些持續更新的數據須要在容器之間共享,最好建立數據卷容器
數據卷容器,其實就是一個正常的容器,專門用來提供數據卷供其它容器掛載的
docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres
-d:後臺運行
--name:容器命名
-v:掛載目錄做爲數據卷"/dbdata"
在其餘容器中使用 --volumes-from 來掛載 dbdata 容器中的數據卷
docker run -d --volumes-from dbdata --name db1 training/postgres
docker run -d --volumes-from dbdata --name db2 training/postgres
docker run -d --volumes-from db1 --name db3 training/postgres
備份遷移恢復
備份
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
--volumes-from 標記來建立一個加載 dbdata 容器卷的容器,並從本地主機掛載當前到容器的 /backup 目錄
容器啓動後,使用了 tar 命令來將 dbdata 卷備份爲本地的 /backup/backup.tar
恢復
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
外部訪問
外部訪問容器中運行的網絡應用,能夠經過 -P 或 -p 參數來指定端口映射。
當使用 -P 標記時,Docker 會隨機映射一個 49000~49900 的端口到內部容器開放的網絡端口。
docker run -d -P training/webapp python app.py
使用-p(小寫的)則能夠指定要映射的端口,而且,在一個指定端口上只能夠綁定一個容器。
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
docker run -d -p 5000:5000 training/webapp python app.py三種-p格式:
ip:hostPort:containerPort //指定映射使用一個特定地址//映射到指定地址的指定端口
ip::containerPort //綁定 localhost 的任意端口到容器的 5000 端口//映射到指定地址的任意端口
hostPort:containerPort //本地的 5000 端口映射到容器的 5000 端口//映射全部接口地址
查看端口配置
docker port nostalgic_morse 5000
容器有本身的內部網絡和 ip 地址
docker inspect 能夠獲取全部的變量
-p 標記能夠屢次使用來綁定多個端口
docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py
容器互訪問
使用 --link 參數可讓容器之間安全的進行交互
--link 參數的格式爲 --link name:alias,其中 name 是要連接的容器的名稱,alias 是這個鏈接的別名
舉例
docker run -d --name db training/postgres
在啓動 db 容器的時候並無使用 -p 和 -P 標記,從而避免了暴露數據庫端口到外部網絡上
docker run -d -P --name web --link db:db training/webapp python app.py
此時,db 容器和 web 容器創建互聯關係
使用 env 命令來查看 web 容器的環境變量
docker run --rm --name web2 --link db:db training/webapp env
. . .
DB_NAME=/web2/db
DB_PORT=tcp://172.17.0.5:5432
DB_PORT_5000_TCP=tcp://172.17.0.5:5432
DB_PORT_5000_TCP_PROTO=tcp
DB_PORT_5000_TCP_PORT=5432
DB_PORT_5000_TCP_ADDR=172.17.0.5
. . .
除了環境變量,Docker 還添加 host 信息到父容器的 /etc/hosts 的文件
docker run -t -i --rm --link db:db training/webapp /bin/bash
root@aed84ee21bde:/opt/webapp# cat /etc/hosts
172.17.0.7 aed84ee21bde //web 容器的 ip 和主機名
. . .
172.17.0.5 db //db 容器的 ip 和主機名
.
用戶能夠連接多個子容器到父容器,好比能夠連接多個 web 到 db 容器上