http://dockerpool.com/static/books/docker_practice/index.htmlhtml
安裝docker:linux
apt-get updatenginx
apt-get install -y docker.ioweb
sudo ln -sf /usr/bin/docker.io /usr/local/bin/dockerdocker
查看鏡像列表:docker imagesshell
建立並啓動一個容器:json
docker run -t -i ubuntu:14.04 /bin/bashubuntu
在容器中添加 json 和 gem 兩個應用:gem install jsonruby
修改:bash
exit退出,而後提交:
sudo docker commit -m "Added json gem" -a "Docker Newbee" 0b2616b0e5a8 ouruser/sinatra:v2
-m提交說明,-a指定更新的用戶信息+ID 倉庫/tag
用docker build來生成鏡像:
/sinatra/Dockerfile文件內容
Dockerfile文件內容:不能超過127層
# This is a comment
FROM ubuntu:14.04
MAINTAINER Docker Newbee <newbee@docker.com>
RUN apt-get -qq update
RUN apt-get -qqy install ruby ruby-dev
RUN gem install sinatra
運行 docker build -t="ouruser/sinatra:v2" .
'.'表明Dockerfile當前路徑
從本地文件系統導入鏡像:
cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
導出:
docker save -o ubuntu_14.04.tar ubuntu:14.04
或者docker export container > ubantu.rar
載入:
docker load --input ubuntu_14.04.tar
導入快照:
cat ubuntu.tar | sudo docker import - test/ubuntu:v1.0
這二者的區別在於容器快照文件將丟棄全部的歷史記錄和元數據信息
上傳鏡像:
docker push ouruser/sinatra
移除:
docker rm ouruser/sinatra
容器操做:
啓動容器:docker run ubuntu:14.04 /bin/echo 'Hello world'
後臺運行:docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
查看後臺運行的:docker ps 得到 ports names
獲取容器的輸出信息:docker logs names
進入後臺的docker: docker attach names 阻塞會併發
使用nsenter 進入後臺,安裝util-linux(2.24):
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
__________________________________華麗分割線————————————————————————
1,uname -a
2,ls -l /sys/class/misc/device-mapper
若是不知足,升級內核。
安裝:apt-get install -y docker.io
source /etc/bash_completion.d/docker.io 更新
docker維護版本:
apt-get install -y curl
curl -sSL https://get.docker.com/ubuntu/ |sh
啓動交互式容器:
docker run -i -t IMAGE /bin/bash
-i-t --interactive =ture --tty=ture
啓動守護式容器:docker run -i -t IMAGE /bin/bash
退出時候用 ctrl +p \q
使用docker attach
docker run -d
看日誌 docker -t -f --tail
看容器的進程 docker top
在容器中啓動新的進程:docker exec -d -i -t name command targ
中止運行中的容器:docker stop
docker kill
查看容器:docker inspect
自定義容器名字 dockerrun --name=fuhan -i -t ubuantu /bin/bash
從新啓動已經中止的容器 docker start -i fuhan
刪除已經中止的容器 docker rm
查看文檔 man docker stop
部署靜態網頁:
run -P :容器暴露全部端口進行映射。
-p :
從新啓動:docker start -i name
docker exec 33 ngix
鏡像操做:
刪除ubuntu全部鏡像 docker rmi $(docker images -q ubuntu)
docker search
使用國內鏡像pull鏡像:
"""
/etc/default/docker
添加:DOCKER_OPTS = "--registry-mirror=http://www.daoclould.io"
"""
或者:
echo "DOCKER_OPTS=\"\$DOCKER_OPTS --registry-mirror=http://2ebb2b81.m.daocloud.io\"" | sudo tee -a /etc/default/docker
sudo service docker restart
構建鏡像
docker commit -a fuhan -m wodejinxiang 經過容器構建:
1,docker run -it -p 80 --name my_image ubuntu /bin/bash
2,作修改
3,docker commit -a 'fuhan' -m 'nginx' my_image fuhan/fuhan01
就能夠看到fuhan/fuhan01這個新鏡像了
上傳:docker push
docker build 經過Dockerfile文件:
mkdir -p dockerfile/df_test
vi 編輯
docker build -t=name .
#註釋
FROM ubuntu:14.04
MAINTAINER fuhan "fuhan@126.com" 至關與commit -a屬性
RUN 分shell指令和【】指令
RUN apt-get update && apt-get install -y nginx
EXPOSE 80 容器運行時候依然須要用-p 80
CMD ENTERYPOINT 容器運行後運行的指令
ADD COPY VOLUME 設置鏡像的目錄和文件
WORKDIR ENV USER 指定鏡像的環境設置
ONBULID 相似觸發器
CMD 會被run裏面的運行命令覆蓋 ENTERYPOINT不會覆蓋
用ENTERYPOINT 寫命令,CMD寫參數
ADD 包涵解壓功能 【相對路徑 絕對路徑】
VOLUME添加捲
WORKDIR 設定工做目錄,須絕對路徑
ENV key=vale 環境參數
USER 指定用戶,默認root
ONBUILD鏡像觸發器,當一個鏡像被其餘鏡像做爲基礎鏡像時執行
容器間互相鏈接:--icc=true 默認
每次重啓容器,Ip地址會變化
docker run --name=cct3--link=cct1:webtest dormancypree/cct
webtest別名
能夠查看/etc/host文件
禁止:
/etc/default/docker
增長:DOCKER_OPTS='--icc=false'
特定鏈接:
--icc=false --iptables=true 修改文件
run --link=
設置好後須要到容器查 看iptables -L -n 若是有drop,則執行iptables -F
容器與外部鏈接
ps -ef|grep docker
查看服務器sysctl net.ipv4.conf.all.forwarding是否爲1,能夠轉發流量
鏡像沒有ifconfig :apt-get install net-tools
brctl show
從新指定docker 地址
ifconfig docker0 192.168.0.1
添加虛擬網橋:
brctl addbr br0
ifconfig br0 192.168.0.1 netmask 255.255.255.1
添加/etc/default/docker DOCKER_OPTS='bro'
重啓。servers docker restart
docker容器與外部連接:
--ip-forward=true
查看是否容許準發sysctl net.ipv4.conf.all.forwarding
iptables -t filter -L -n