docker 隨筆

docker 學習筆記

docker鏡像

  • 獲取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容器

  • 啓動
    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
    強制刪除運行中的容器

docker倉庫

  • 私有倉庫
  • 公有倉庫

docker數據卷

  • 建立
    使用 -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

docker網絡

  • 外部訪問
    外部訪問容器中運行的網絡應用,能夠經過 -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 容器上

相關文章
相關標籤/搜索