天天看點

Docker

目錄 1.1    容器引擎核心技術    1 1.2    特性    1 1.3    說明    1 1.4    部署    2 1.5    操作    2 1.6    Docker Image制作    5 1.7    Docker Image釋出    7 1.8    容器端口映射    8

  1. 容器引擎核心技術

    Namespace:實作Container的程序、網絡、消息、檔案系統和主機名的隔離;

    Cgroup:實作對資源的配額和度量;

  2. 特性

    檔案系統隔離:每個程序容器運作在一個完全獨立的根檔案系統裡;

    資源隔離:系統資源根據需求配置設定到不同的容器中;

    網絡隔離:麼米格容器運作在自己的網絡空間,虛拟接口和IP位址;

    日志記錄:Docker會 手機并記錄每個程序容器的标準流(stdout/stderr/stdin),用于實時檢索或批量檢索;

    變更管理:容器檔案系統的變更可送出到新的鏡像中,并可重複使用以建立更多的容器,無需使用模闆或手動配置;

    互動式Shell:Docker可配置設定一個虛拟終端并關聯到任何容器的标準輸入上。

  3. 說明

    Docker鏡像及資料存放于/var/lib/docker目錄

    [root@kazihuo ~]# du -sh /var/lib/docker/*

    24K    /var/lib/docker/containers

    406M    /var/lib/docker/devicemapper

    664K    /var/lib/docker/image

    44K    /var/lib/docker/network

    0    /var/lib/docker/swarm

    0    /var/lib/docker/tmp

    0    /var/lib/docker/trust

    24K    /var/lib/docker/volumes

  4. 部署

    [root@kazihuo ~]# mv local.repo local.repo.bak

    [root@kazihuo ~]# wget -O /etc/yum.repos.d/Centos_Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

    [root@kazihuo ~]# yum -y install docker-io

    [root@kazihuo ~]# systemctl start docker

    [root@kazihuo ~]# docker search centos

    #從Docker Hub中搜尋符合條件的鏡像

    [root@kazihuo ~]# docker pull centos

    #從Docker Hub中拉取或更新指定鏡像

    or

    本地導入指定image

    [root@kazihuo ~]# docker load -i centos-latest-docker-image.tar

    # -i:指定載入的鏡像歸檔

  5. 操作

    檢視所有本地鏡像:

    [root@kazihuo ~]# docker images

    運作容器:

    [root@kazihuo ~]# cat /etc/redhat-release

    CentOS Linux release 7.2.1511 (Core)

    [root@kazihuo ~]# docker run -it --name=test-centos docker.io/centos:latest /bin/bash

    #-i:以互動模式運作容器;-t:為容器重新配置設定一個僞輸入終端;-d 表示守護模式, 容器在背景運作;--name 為容器命名;docker.io/centos:latest 格式為鏡像名:版本;/bin/bash 進入bash指令行

    [root@a94e89783f11 /]# cat /etc/redhat-release

    CentOS Linux release 7.4.1708 (Core)

    長久運作:

    [root@kazihuo ~]# JOB=$(docker run -d centos /bin/bash -c "while true;do echo hello world;sleep 1;done")

    # -d:背景運作容器,并傳回容器ID;-c:待完成

    [root@kazihuo ~]# echo $JOB

    64f37b2fb689076e9b3c169ab9ab4505448c394388c312643a6d54f05fda3756

    容器日志讀取:

    [root@kazihuo ~]# docker logs $JOB

    hello world

    ···

    檢視運作中容器:

    [root@kazihuo ~]# docker ps

    檢視所有容器:

    [root@kazihuo ~]# docker ps -a

    CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

    64f37b2fb689 centos "/bin/sh -c 'while tr" 13 minutes ago Up 13 minutes desperate_albattani

    a94e89783f11 centos "/bin/bash" 4 hours ago Exited (137) 18 minutes ago elegant_kare

    12fe2d95c2a2 centos "/bin/bash" 4 hours ago Exited (127) 4 hours ago sleepy_banach

    殺死容器:

    [root@kazihuo ~]# docker kill 64f37b2fb689

    啟動、停止、重新開機:

    [root@kazihuo ~]# docker start 64f37b2fb689

    [root@kazihuo ~]# docker stop 64f37b2fb689

    [root@kazihuo ~]# docker restart 64f37b2fb689

    删除容器:

    [root@kazihuo ~]# docker rm 64f37b2fb689

    注:正在運作的容器在删除前先将容器關閉,或者加-f強制删除

    檢視容器網絡:

    [root@kazihuo ~]# ifconfig

    docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

    inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0

    inet6 fe80::42:8fff:fed0:be33 prefixlen 64 scopeid 0x20<link>

    ether 02:42:8f:d0:be:33 txqueuelen 0 (Ethernet)

    RX packets 28641 bytes 1172564 (1.1 MiB)

    RX errors 0 dropped 0 overruns 0 frame 0

    TX packets 30689 bytes 105377292 (100.4 MiB)

    TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

    配置容器root密碼:

    [root@01b16f44a3f9 ~]# echo 000000|passwd --stdin root

    注:預設無密碼

  6. Docker Image制作

    法一:

    docker commit

    #儲存container的目前狀态到image後,生成對應的image

    法二:

    docker build

    #使用Dockerfile自動化制作image

    法一實操:

    [root@kazihuo ~]# docker run -ti centos /bin/bash

    [root@c4e377bf5c01 ~]# yum -y install net-tools

    [root@c4e377bf5c01 ~]# exit

    REPOSITORY TAG IMAGE ID CREATED SIZE

    docker.io/centos latest 3fa822599e10 5 weeks ago 203.5 MB

    c4e377bf5c01 centos "/bin/bash" 18 minutes ago Exited (0) About a minute ago reverent_kare

    [root@kazihuo ~]# docker commit c4e377bf5c01 centos:net-tool

    sha256:c45c0a7b6a1a2d0db6c94d5d932b741f408507b86da50ab41280421258d86e68

    centos net-tool c45c0a7b6a1a 15 seconds ago 350.3 MB

    [root@kazihuo ~]# docker run -ti centos:net-tool /bin/bash

    [root@0f1037105498 /]# rpm -qa net-tools

    net-tools-2.0-0.22.20131004git.el7.x86_64

    法二實操:

    [root@kazihuo ~]# mkdir /docker-build

    [root@kazihuo ~]# cd /docker-build/

    [root@kazihuo /docker-build]# cat Dockerfile

    FROM centos

    MAINTAINER kazihuo <[email protected]>

    RUN yum -y install httpd

    ADD start.sh /usr/local/bin/start.sh

    ADD index.html /var/www/html/index.html

    注釋:

    FROM #基于指定鏡像

    MAINTANER #鏡像建立者

    RUN #安裝軟體

    ADD #将檔案<src>拷貝到container的檔案系統對應的路徑<dest>,所有拷貝到container中的檔案和檔案夾權限是07555,uid和gid是0

    [root@kazihuo /docker-build]# echo "/usr/sbin/httpd -DFOREGROUND"> start.sh

    注:以上相當于執行systemctl start httpd

    [root@kazihuo /docker-build]# chmod a+x start.sh

    [root@kazihuo /docker-build]# echo "docker image build test" > index.html

    build建立新的image文法:

    # docker build -t 父鏡像名:自己定義的鏡像名 Dockerfile檔案所在路徑

    [root@kazihuo /docker-build]# docker bulid -t centos:httpd .

    [root@kazihuo /docker-build]# docker images

    centos httpd 40aba19c5ebb 20 seconds ago 327 MB

    centos net-tool c45c0a7b6a1a 35 minutes ago 350.3 MB

    docker.io/centos latest 3fa822599e10 5 weeks ago 203.5 MB

  7. Docker Image釋出

    Save Image To TarBall

    Push Image To Docker Hub

    儲存image到tar包

    文法:docker save -o 導出的鏡像名.tar 本地鏡像名

    [root@kazihuo /docker-build]# docker save -o centos-httpd-docker-image.tar centos:httpd

    [root@kazihuo /docker-build]# ls

    centos-httpd-docker-image.tar Dockerfile index.html start.sh

  8. 容器端口映射

    使用centos:httpd鏡像啟動一個容器,将容器中的80端口映射到docker實體上的9000端口

    [root@kazihuo ~]# docker run -d -p 9000:80 centos:httpd /bin/bash -c /usr/local/bin/start.sh

    01b16f44a3f96814c5368e417c07ef48fad2fe7013ff78718293ff012e97421b

    01b16f44a3f9 centos:httpd "/bin/bash -c /usr/lo" 23 seconds ago Up 22 seconds 0.0.0.0:9000->80/tcp elegant_hopper

    [root@kazihuo ~]# curl http://127.0.0.1:9000

    docker image build test

    [root@kazihuo ~]# docker exec -ti 01b16f44a3f9 /bin/bash

    [root@01b16f44a3f9 ~]# echo kazihuo > /var/www/html/test.html

    [root@kazihuo ~]# curl http://127.0.0.1:9000/test.html

    kazihuo

-------------------------------------------------------------

作者:

羅穆瑞

出處:

http://www.cnblogs.com/kazihuo/

轉載請保留此段聲明,且在文章頁面明顯位置給出原文連結,謝謝!

------------------------------------------------------------------------------

如果覺得這篇文章對你有小小的幫助的話,記得在右下角點個“推薦”哦,部落客在此感謝!