發現分享知識的重要性,隨性就把以前學習docker的筆記分享一下:亂,望海涵。html
https://hub.docker.com/python
docker官網:linux
http://docs.docker.com/linux/step_one/git
搭建私有倉庫:github
http://www.vpsee.com/2013/11/build-your-own-docker-private-regsitry-service/web
docker中文入門文檔:docker
1,http://dockerpool.com/static/books/docker_practice/install/ubuntu.html數據庫
2,http://www.docker.org.cn/book/docker/6_docker-search-image.htmlubuntu
1、安裝:ruby
wget -qO- https://get.docker.com/ | sh
apt-key adv --recv-keys --keyserver
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
wget -qO- https://get.docker.com/gpg | apt-key add -
apt-key adv --recv-keys --keyserver
wget -qO- https://get.docker.com/ | sh
另一個安裝docker的腳本:
curl https://releases.rancher.com/install-docker/1.12.sh | sh {速度快}
安裝ok
------------------------
usermod -aG docker live
啓動docker:
service docker start
下載鏡像:
docker pull ubuntu:12.04
docker pull ubuntu:14.04
docker pull registry.hub.docker.com/ubuntu:14.04
docker pull dl.dockerpool.com:5000/ubuntu:14.04
運行:
sudo docker run -t -i ubuntu:12.04 /bin/bash
列出:
docker images
Docker_build: file:
like this:
$ touch Dockerfile
# 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" .
-----------------------------------------------------
docker tag 命令來修改鏡像的標籤:
docker tag 5db5f8471261 ouruser/sinatra:devel
從本地文件系統導入:
https://openvz.org/Download/templates/precreated
cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
上傳鏡像:
docker push ouruser/sinatra (要註冊)
存出和載入鏡像
docker save -o ubuntu_14.04.tar ubuntu:14.04
載入鏡像
可使用 docker load 從導出的本地文件中再導入到本地鏡像庫,例如
$ sudo docker load --input ubuntu_14.04.tar
或
$ sudo docker load < ubuntu_14.04.tar
移除本地鏡像
若是要移除本地的鏡像,可使用 docker rmi 命令。注意 docker rm 命令是移除容器。
$ sudo docker rmi training/sinatra
$ docker stop $(docker ps -a -q)
2、Docker 容器
後臺運行:-d
docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done"
docker ps
查看log:docker logs insane_babbage
進入容器:
1,安裝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
接到容器,你還須要找到容器的第一個進程的 PID
PID=$(docker inspect --format "{{ .State.Pid }}" <container>)
或者:docker-pid (沒有這個命令)
進入容器:
$ nsenter --target $PID --mount --uts --ipc --net --pid
————————=============
完整例子:
$ 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,並將內容放到 .bashrc 中。
$ wget -P ~ https://github.com/yeasy/docker_practice/raw/master/_local/.bashrc_docker;
$ echo "[ -f ~/.bashrc_docker ] && . ~/.bashrc_docker" >> ~/.bashrc; source ~/.bashrc
5、導入容器快照
docker export 7691a814370e > ubuntu_snapshot.tar
使用 docker import 從容器快照文件中再導入爲鏡像:
cat ubuntu_snapshot.tar|docker import - test/ubuntu:v1.0
6、搭建私有倉庫
iop服務器(倉庫服務器):
sudo apt-get install swig (搞了半天,ubuntu14.04沒有這個包)
sudo apt-get install build-essential python-dev libevent-dev python-pip libssl-dev liblzma-dev libffi-dev
sudo git clone https://github.com/docker/docker-registry.git
cd docker-registry/
sudo python setup.py install
cd docker-registry/ && sudo cp config/config_sample.yml config/config.yml
cd docker-registry/ && sudo cp config/config.yml /usr/local/lib/python2.7/dist-packages/docker_registry-1.0.0_dev-py2.7.egg/docker_registry/lib/../../config/config.yml (搞了半天,沒這個文件報錯,源碼安裝的,路徑有點奇葩)
啓動:
sudo gunicorn --access-logfile - --error-logfile - -D -k gevent -b 0.0.0.0:5000 -w 4 --max-requests 100 docker_registry.wsgi:application
提交:
docker tag ba58 10.132.52.113:5000/test
docker push 10.132.52.113:5000/test
提交的時候報錯,由於https的緣由:解決:vi /etc/init/docker.conf
exec "$DOCKER" daemon $DOCKER_OPTS --insecure-registry 10.132.52.113:5000
查看:
curl http://10.132.52.113:5000/v1/search
拉下來:
docker pull 10.132.52.113:5000/test
7、管理數據卷
1,下面建立一個 web 容器,並加載一個數據捲到容器的 /webapp 目錄
mkdir /webapp
docker run -d -P --name web -v /webapp training/webapp python app.py
2,掛載一個主機目錄做爲數據卷:使用 -v 標記也能夠指定掛載一個本地主機的目錄到容器中去
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py [上面的命令加載主機的 /src/webapp 目錄到容器的 /opt/webapp 目錄。]
Docker 掛載數據卷的默認權限是讀寫,用戶也能夠經過 :ro 指定爲只讀:
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
3,掛載一個本地主機文件做爲數據卷:
docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash
數據卷容器
1,首先,建立一個命名的數據卷容器 dbdata:
docker run -d -v /dbdata --name dbdata training/postgres echo Data-only container for postgres
2,在其餘容器中使用 --volumes-from 來掛載 dbdata 容器中的數據卷。
docker run -d --volumes-from dbdata --name db1 training/postgres
docker run -d --volumes-from dbdata --name db2 training/postgres
3,還可使用多個 --volumes-from 參數來從多個容器掛載多個數據卷。 也能夠從其餘已經掛載了數據卷的容器來掛載數據卷。
docker run -d --name db3 --volumes-from db1 training/postgres
利用數據卷容器來備份、恢復、遷移數據卷
1,備份
2,恢復
恢復
若是要恢復數據到一個容器,首先建立一個帶有數據卷的容器 dbdata2。
$ sudo docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
而後建立另外一個容器,掛載 dbdata2 的容器,並使用 untar 解壓備份文件到掛載的容器卷中。
$ sudo docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
Docker 中的網絡
1,5000 端口映射到容器的 5000 端口
docker run -d -p 5000:5000 training/webapp python app.py
2, 映射到指定地址的指定端口
docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py
3,映射到指定地址的任意端口
docker run -d -p 127.0.0.1::5000 training/webapp python app.py
udp:
docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
查看映射端口配置
docker port nostalgic_morse 5000
容器互聯
自定義一個好記的容器命名:
$ docker run -d -P --name web training/webapp python app.py
也可使用 docker inspect 來查看容器的名字:
$ docker inspect -f "{{ .Name }}" aed84ee21bde
1,先建立一個新的數據庫容器
docker run -d --name db training/postgres
2,刪除以前建立的 web 容器
docker rm -f web
3,建立一個新的 web 容器,並將它鏈接到 db 容器
docker run -d -P --name web --link db:db training/webapp python app.py
4,查看 web 容器的環境變量
docker run --rm --name web2 --link db:db training/webapp env
web 容器中安裝 ping 命令來測試跟db容器的連通。
apt-get install -yqq inetutils-ping
---------
docker網絡
apt-get install bridge-utils
brctl show
自定義網橋:
1,$ sudo service docker stop
sudo ip link set dev docker0 down
sudo brctl delbr docker0
2, $ sudo brctl addbr bridge0
sudo ip addr add 192.168.5.1/24 dev bridge0
sudo ip link set dev bridge0
**工具:
https://github.com/jpetazzo/pipework
pipework
playground
示例:建立一個點到點鏈接
首先啓動 2 個容器:
$ sudo docker run -i -t --rm --net=none base /bin/bash root@1f1f4c1f931a:/# $ sudo docker run -i -t --rm --net=none base /bin/bash root@12e343489d2f:/#
找到進程號,而後建立網絡名字空間的跟蹤文件。
$ sudo docker inspect -f '{{.State.Pid}}' 1f1f4c1f931a 2989 $ sudo docker inspect -f '{{.State.Pid}}' 12e343489d2f 3004 $ sudo mkdir -p /var/run/netns $ sudo ln -s /proc/2989/ns/net /var/run/netns/2989 $ sudo ln -s /proc/3004/ns/net /var/run/netns/3004
建立一對 peer 接口,而後配置路由
$ sudo ip link add A type veth peer name B
$ sudo ip link set A netns 2989
$ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A
$ sudo ip netns exec 2989 ip link set A up
$ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A
$ sudo ip link set B netns 3004
$ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
$ sudo ip netns exec 3004 ip link set B up
$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B