Docker 命令筆記

docker pull ubuntu 下載ubuntu鏡像

docker pull http://hub.c.163.com/public/ubuntu:14.04 指明地址和版本號下載html

 

docker倉庫地址:hub.docker.com 帳戶:docker0325 密碼:ZB.8860244 當出現timeout異常是應該沒有登錄hub.docker.com docker loginpython

 

運行鏡像

docker run -it ubuntu bashlinux

 

查看鏡像信息

docker imagesnginx

images 子命令:git

                -a, -all=true|false 列出全部的鏡像文件(包括臨時文件),默認爲否github

                --digests=ture|false 列出鏡像的數字摘要值,默認爲否web

                -f, --filter=[] 過濾出全部的鏡像。redis

                --format=="TEMPLATE" 控制輸出的格式,如ID表明ID信息, Repository表明倉庫信息docker

                --no-trunc=true|false 對輸出結果中太長的部分是否進行截斷,如鏡像的ID信息,默認爲是shell

                -q,--quiet=true|false 僅輸出ID信息,默認爲否

               

添加鏡像標籤

docker tag ubuntu:latest myubuntu:latest

 

查看鏡像詳細信息

docker inspect ubuntu:14.04

 

查看鏡像歷史

docker history ubuntu:14.04      

 

搜索鏡像

docker search

                --automated=true|false 僅顯示自動建立的鏡像,默認爲否

                --no-trunc=true|false 輸出信息不截斷顯示,默認爲否

                -s, --stars=X 指定僅顯示評價爲指定星級以上的鏡像,默認爲0

 

刪除鏡像

docker rmi ubuntu

               

查看本機全部容器

docker ps -a

 

建立鏡像

基於已有鏡像的容器建立

1:首先運行容器,docker run -it ubuntu:14.04 /bin/bash

2:修改容器內容,好比在容器裏面添加一個文件 touch test

3:exit 退出容器,記住容器ID, 容器ID是 啓動容器後,root@322ced3aaala   其中322ced3aaala 就是容器ID

4:建立新鏡像, docker commit -m "Added a new file" -a "Docker Newbee" 322ced3aaala test:0.1

 

上傳鏡像

docker push user/ubuntu:0.1  用戶user上傳鏡像ubuntu 版本0.1

 

新建並啓動容器

docker run ubuntu /bin/echo 'Hello world'

 

守護態運行容器

docker run -d ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done"

8322eb713648fa4e8c1337a0960b3934f72bac115f21cb419003b3ed1546526a

啓動容器時調整容器使用的cpu權重和容器使用的內存大小,-c 設置權重,-m 設置內存大小 --cpuset 能夠綁定cpu --cpuset=0,1

docker run -d -c 1 -m 10m  ubuntu

docker run -d --cpuset-0,1 -m 10m ubuntu

 

查看容器輸出的日誌

docker logs 8322eb713648fa4e8c1337a0960b3934f72bac115f21cb419003b3ed1546526a     容器返回的id

 

終止容器

docker stop 8322eb713648fa4e8c1337a0960b3934f72bac115f21cb419003b3ed1546526a

 

查看全部容器ID

docker ps -qa

 

啓動容器

docker start

 

重啓容器

docker restartdocker

 

進入容器

docker exec -it 容器id /bin/bash

 

刪除容器

docker rm 容器id  

docker rm -f 容器id -f 可刪除正在運行的容器

 

docker 倉庫地址:

                https://hub.docker.com

               

重啓docker:

                service docker restart

 

搭建docker本地私有倉庫,並上傳本地鏡像到私有倉庫

1:docker run -d -p 5000:5000 registry ,下載registry容器,建立本地倉庫,默認地址:/var/lib/registry   

                docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry  可指定倉庫安裝地址

2:先pull一個小鏡像

                docker pull busybox

3:修改鏡像的tag

                docker tag busybox 127.0.0.1:5000/busybox

4:將打了tag的鏡像上傳到私有倉庫中

                docker push 127.0.0.1:5000/busybox

6:刪除本地busybox鏡像,從私有倉庫pull下來該鏡像

    docker pull 127.0.0.1/busybox

 

 

 

Docker 多容器的數據共享 兩種方式1:數據卷方式 ,直接將本地文件夾掛載到容器。 2 數據卷容器,建立特定容器提供數據供其餘容器掛載

 

建立數據卷

 建立數據卷:掛載一個主機目錄做爲數據卷

docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py  ro是隻讀,默認權限是讀寫

 

建立數據卷容器

docker run -it -v /dbdata --name dbdata ubuntu

 

啓動兩個容器  掛載數據卷容器

docker run -it --volumes-from dbdata --name db1 ubuntu

docker run -it --volumes-from dbdata --name db2 ubuntu

 

 

備份數據卷容器裏面的數據卷

未學習

 

恢復數據卷的數據到容器裏

未學習

 

 

容器端口映射(外部訪問容器,映射真實端口到容器)

                                docker run -d -P training/webapp python app.py    -p(小寫)須要指定端口, -P(大寫)隨機分配端口映射

                                docker run -d -p 5000:5000 training/webapp python app.py

                綁定多個端口,屢次使用-p

                                docker run -d -p 5000:5000 -p 3000:80 training/webapp python app.py

                映射到指定地址的指定端口

                                docker run -d -p 127.0.0.1:5000:5000 training/webapp python app.py

                映射到指定地址的任意端口,綁定192.168.22.146的任意一個端口到容器的5000端口

                                docker run -d -p 192.168.22.146::5000 training/webapp python app.py

 

查看docker容器端口映射配置

docker port 容器名

 

容器互聯機制(多容器內互相訪問)

                1:首先建立一個數據庫容器

                docker run -d  --name db  training/postgres

                2:建立web容器並 link 數據庫容器,link name:alias

                docker run -d -P --name web --link db:db traning/webapp python.py

                3:此時進入web 容器,可使用  ping db 來測試容器是否相通   ubuntu 安裝ping 命令  apt-get install -yqq inetutils-ping

               

查看容器的公開信息,使用env 可查看web容器鏈接到db容器的配置信息

docker run --rm --name web2 --link db:db training/webapp eny

 

使用Dockerfile建立鏡像,sshd:dockerfile 是鏡像名:版本號 ,千萬注意最後的那個.不能丟掉

docker build -it sshd:dockerfile .

 

 

容器映射本地目錄,-p映射端口,-e 設置環境變量, -v將www文件夾映射到容器中的/var/www apache:ubuntu 是鏡像名

 

docker run -i -d -p 80:80 -e APACHE_SERVERNAME=test -v `pwd`/www:/var/www apache:ubuntu

 

 

Dockerfile 指令說明:

 

                FROM   指定所建立鏡像的基礎鏡像

                MAINTAINER   指定維護者信息

                RUN   運行指令

                CMD   指定啓動容器時默認執行的命令

                LABEL  指定生成鏡像的元數據標籤信息

                EXPOSE   聲明鏡像內服務所監聽的端口

                ENV   指定環境變量

                ADD   複製指定的<src>路徑下的內容到容器中的<dest>路徑下,<src>能夠爲URL,若是爲tar文件,會自動解壓到<dest>路徑下

                COPY   複製本地主機的<src>路徑下的內容到鏡像中的<dest>路徑下,通常狀況下推薦使用COPY,而不是ADD

                ENTRYPOINT 指定鏡像的默認入口

                VOLUME 建立數據卷掛載點

                USER   指定運行容器時的用戶名或者UID

                WORKDIR  配置工做目錄

                ARG  指定鏡像內使用的參數(例如版本號信息)

                ONBUILD 配置當所建立的鏡像做爲其餘鏡像的基礎鏡像時,所執行的建立操做指令。

                STOPSIGNAL  容器退出的信號值

                HEALTHCHECK  如何進行健康檢查

                SHELL   指定使用shell時的默認shell類型

 

 

               

Docker容器爲鏡像添加SSH服務

方式一:

安裝openssh服務,基於Commit方式

 

運行容器:

docker run -it ubuntu:14.04 /bin/bash

 

                               

                                apt-get update

                                apt-get install openssh-server -y

                                mkdir -p /var/run/sshd

                               

                                啓動ssh服務

                                /usr/sbin/sshd -D &

                               

                                此時查看容器的22端口

                                netstat -tunlp

                               

                                修改SSH服務的安全登錄配置,取消pam登錄限制

                                 sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

               

                                建立.ssh目錄,並將須要登錄的公鑰信息(通常爲本地主機用戶目錄下的.ssh/id_rsa.pub文件,可由ssh-keygen -t rsa 命令生成)複製到authorized_keys文件中

                                mkdir root/.ssh

                                vi /root/.ssh/authorized_keys

                               

                                建立自動啓動SSH服務的可執行文件run.sh

                                vi /run.sh

                                 #!/bin/bash

                                 /usr/sbin/sshd -D

                                 

                                 添加權限

                                 chmod +x run.sh

                                 

                                 退出容器 exit

                                 

                                 保存鏡像

                                 docker commit 容器id sshd:ubuntu

 

                                在宿主機就可使用 ssh 宿主機ip -p 10022 實現免密登錄容器了。

 

方式二:

                安裝openssh,使用Dockerfile建立               

                                1:首先建立工做目錄

                                                mkdir sshd_ubuntu

                                2:建立Dockerfile和run.sh文件

                                                touch Dockerfile run.sh

                                3:編寫run.sh

                                #!/bin/bash

                                /usr/sbin/sshd -D

                                4:在宿主機上生成SSH密鑰對,並建立authorized_keys文件

                                ssh-keygen -t rsa

                                cat ~/.ssh/id_rsa.pub >authorized_keys

                                5:編寫Dockerfile文件

                                                #設置繼承鏡像

                                                FROM ubuntu:14.04

 

                                                #做者信息

                                                MAINTAINER docer_user (binbin.zhang)

 

                                                #下面開始 運行更新命令

                                                RUN apt-get update

 

                                                #安裝ssh服務

                                                RUN apt-get install -y openssh-server

                                                RUN mkdir -p /var/run/sshd

                                                RUN mkdir -p /root/.sshd

                                                #取消pam限制

                                                RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd

 

                                                #複製配置文件到相應位置,並賦予腳本可執行權限

                                                ADD authorized_keys /root/.ssh/authorized_keys

                                                ADD run.sh /run.sh

                                                RUN chmod 755 /run.sh

 

                                                #開放端口

                                                EXPOSE 22

 

                                                #設置自啓動命令

                                                CMD ["/run.sh"]

                                6:建立鏡像

                                在sshd_ubuntu文件夾下執行:

                                docker build -t sshd:dockerfile .

                                看到Successfully built $鏡像id ,說明建立成功

                                7:測試鏡像,運行容器,經過 docker logs 容器id 可查看啓動log

                                docker run -d -p 10122:22 sshd:dockerfile

                                8:在宿主機執行 ,192.168.22.147是個人宿主機ip

                                ssh 192.168.22.147 -p 10122

                                成功登錄到容器後,說明鏡像建立沒問題。

                               

                               

Dockerfile 安裝Apache

                                1:建立一個apache_ubuntu的工做目錄,在其中建立Dockerfile文件,run.sh文件和sample文件夾

                                                mkdir apache_ubuntu

                                                cd apache_ubuntu

                                                touch Dockerfile run.sh

                                                mkdir sample

                                2:編寫Dockerfile文件      

 

                                                #設置繼承自用戶建立的sshd鏡像

                                                FROM sshd:dockerfile

                                                                                               

                                                #建立者的基本信息

                                                MAINTAINER docker_user (binbin.zhang)

                                                                                               

                                                #設置環境變量,全部操做都是非交互式的

                                                ENV DEBIAN_FRONTEND noninteractive

                                                                                               

                                                #安裝

                                                RUN apt-get -yq install apache2 &&\

                                                                                rm -rf /var/lib/apt/lists/*

                                                #設置系統的時區,由於在web應用中常常會用到時區這個系統變量。

                                                RUN echo "Asia/Shanghai" > /etc/timezone && \

                                                                                 dpkg-reconfigure -f noninteractive tzdata

                                                                                               

                                                ##添加用戶的腳本,並設置權限,這會覆蓋以前放在這個位置的腳本

                                                ADD run.sh /run.sh

                                                RUN chmod 755 /*.sh

                                                                                               

                                                #添加一個示例的web站點,刪掉默認安裝在apache文件夾下面的文件,並將用戶添加的示例用軟鏈接 連接到 /var/www/html 目錄下面

                                                RUN mkdir -P /var/lock/apache2 && mkdir -P /app && rm -fr /var/www/html && ln -s /app /var/www/html

                                                                                               

                                                copy sample/ /app

                                                                                               

                                                #設置apache 相關的一些變量,在容器啓動的時候可使用-e參數替代

                                                ENV APACHE_RUN_USER www-data

                                                ENV APACHE_RUN_GROUP www-data

                                                ENV APACHE_LOG_DIR /var/log/apache2

                                                ENV APACHE_PID_FILE /var/run/apache2.pid

                                                ENV APACHE_RUN_DIR /var/run/apache2

                                                ENV APACHE_LOCK_DIR /var/lock/apache2

                                                ENV APACHE_SERVERADMIN admin@localhost

                                                ENV APACHE_SERVERNAME localhost

                                                ENV APACHE_SERVERALIAS docker.localhost

                                                ENV APACHE_DOCUMENTROOT /var/www

                                                                                               

                                                #設置端口

                                                EXPOSE 80

                                                                                               

                                                WORKDIR /app

                                                                                               

                                                CMD ["/run.sh"]

                                3:在sample文件夾下新建index.html

                                                <!DOCTYPE html>

                                                <html>

                                                                <body>

                                                                                <p>Hello Docker!</p>

                                                                </body>

                                                </html>

                                4:編寫run.sh腳本,腳本內容是啓動apache服務

                                                #!/bin/bash

                                                exec apache2 -D FOREGROUND

                                5:編譯鏡像

                                                docker build -t apache:ubuntu .

                                5:運行鏡像 經過 docker logs 容器id 可查看啓動log

                                                docker run -d -P apache:ubuntu

                                6:測試

                                                ssh 127.0.0.1:80

                                               

                                               

Dockerfile 安裝Nginx

                                1:建立工做目錄

                                                mkdir nginx_ubuntu

                                                cd nginx_ubuntu

                                                touch Dockerfile run.sh

                                2:編寫Dockerfile文件

                                                #設置繼承自建立的sshd鏡像

                                                FROM sshd:dockerfile

                                               

                                                #設置建立者的基本信息

                                                MAINTAINER binbin (bbz17640380550@163.com)

                                               

                                                #安裝nginx,設置nginx以非daemon啓動

                                                RUN \

                                                                apt-get install -y nginx && \

                                                                rm -rf /var/lib/apt/lists/* && \

                                                                echo "\ndaemon off;" >> /etc/nginx/nginx.conf && \

                                                                chown -R www-data:www-data /var/lib/nginx

                                                               

                                                #設置系統時區

                                                RUN echo "Asia/Shanghai" > /etc/timezone && \

                                                    dpkg-reconfigure -f noninteractive tzdata

                                               

                                                #添加腳本,設置權限。

                                                ADD run.sh /run.sh

                                                RUN chmod 755 /*.sh

                                               

                                                #定義能夠被掛載的目錄,分別是虛擬主機的掛載目錄,證書目錄,配置目錄和日誌目錄

                                                VOLUME ["/etc/nginx/sites-enabled","/etc/nginx/certs","/etc/nginx/conf.d","/var/log/nginx"]

                                               

                                                #定義工做目錄

                                                WORKDIR /etc/nginx

                                               

                                                #定義輸出命令

                                                CMD ["/run.sh"]

                                               

                                                #定義輸出端口

                                                EXPOSE 80

                                                EXPOSE 443

                                               

                                3:編寫run.sh腳本文件      

                                                #!/bin/bash

                                                /usr/sbin/sshd &

                                                /usr/sbin/nginx

                               

                                4:編譯建立nginx鏡像

                                                docker build  -t nginx:stable .

                               

                                5:運行nginx鏡像 經過 docker logs 容器id 可查看啓動log

                                                docker run -d -P nginx:stable

                                6:查看自動映射的端口

                                                docker ps

                                7:檢查

                                                curl 127.0.0.1:$映射80的端口

                                               

                                               

Dockerfile 安裝Tengine 淘寶的加強版nginx

                                1:建立工做目錄:

                                                mkdir tengine_ubuntu

                                                touch Dockerfile

                                2:編寫Dockerfile文件

                               

                                                #繼承咱們建立的sshd鏡像

                                                FROM sshd:dockerfile

                                               

                                                #建立者信息

                                                MAINTAINER binbin.zhang(bbz17640380550@163.com)

                                               

                                                #安裝編譯環境

                                                RUN apt-get install -y build-essential debhelper make autoconf automake patch

                                                RUN apt-get install -y dpkg-dev fakeroot pbuilder gnupg dh-make libssl-dev libpcre3-dev git-core

                                               

                                                #設置系統時區

                                                RUN echo "Asia/Shanghai" > /etc/timezone && \

                                                    dpkg-reconfigure -f noninteractive tzdata

                                                               

                                                #建立Nginx用戶

                                                RUN adduser --disabled-login --gecos 'Tengine' nginx

                                               

                                                # tengine 安裝的shell腳本

                                                WORKDIR /home/nginx

                                                RUN su nginx -c 'git clone https://github.com/alibaba/tengine.git'

                                               

                                                WORKDIR /home/nginx/tengine

                                                RUN su nginx -c 'mv package/debian .'

                                               

                                                ENV DEB_BUILD_OPTIONS nocheck

                                               

                                                RUN su nginx -c 'dpkg-buildpackage -rfakeroot -uc -b'

                                               

                                                WORKDIR /home/nginx

                                                RUN dpkg -i tengine_2.0.2-1_amd64.deb

                                               

                                                #定義掛載的目錄

                                                VOLUME ["/data","/etc/nginx/sites-enabled","/var/log/nginx"]

                                               

                                                #讓Nginx運行在非Daemo模式

                                                RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf

                                               

                                                #定義工做目錄

                                                WORKDIR /etc/nginx

                                               

                                                #添加腳本,設置權限。

                                                ADD run.sh /run.sh

                                                RUN chmod 755 /*.sh

                                               

                                                #定義輸出命令

                                                CMD ["/run.sh"]

                                               

                                                #定義輸出端口

                                                EXPOSE 80

                                                EXPOSE 443

                                               

                                3:編寫run.sh文件

                                                #!/bin/bash

                                                /usr/sbin/sshd &

                                                /usr/sbin/nginx

                                4:編譯dockfile文件 建立鏡像

                                                docker build -t nginx:alibaba .

                                5:啓動容器,並查看端口映射信息 經過 docker logs 容器id 可查看啓動log

                                docker run -d -P nginx:alibaba

                                docker ps

                                6:測試容器

                                curl 127.0.0.1:映射80的端口

 

Dockerfile 安裝 Tomcat                  

                                1:準備jdk1.8,和tomcat8.5

                                2:建立工做目錄

                                 mkdir tomcat8.5_jdk1.8

                                 touch Dockerfile run.sh

                                 將jdk1.8和tomcat8.5 cp 到此目錄

                                此時目錄結構,Dockerfile apache-tomcat-8.5.32 jdk1.8.0_181 run.sh

                               

                                3:編寫Dockerfile文件

                                                #繼承咱們建立的sshd鏡像

                                                FROM sshd:dockerfile

                                               

                                                #做者信息

                                                MAINTAINER binbin.zhang(bbz17640380550@163.com)

                                               

                                                ##設置環境變量,全部操做都是非交互式的

                                                ENV DEBIAN_FRONTEND noninteractive

                                               

                                                #設置系統時區

                                                RUN echo "Asia/Shanghai" > /etc/timezone && \

                                                    dpkg-reconfigure -f noninteractive tzdata

                                               

                                                #安裝跟Tomcact用戶認證相關的軟件

                                                RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \

                                                                apt-get clean && \

                                                                rm -rf /var/lib/apt/lists/*

                                                               

                                                #設置tomcat的環境變量,如有其餘的環境變量須要設置,也能夠在這裏添加

                                                ENV CATALINA_HOME /tomcat

                                                ENV JAVA_HOME /jdk

                                               

                                                #複製tomcat 和 jdk 文件到鏡像中

                                                ADD apache-tomcat-8.5.32 /tomcat

                                                ADD jdk1.8.0_181 /jdk

                                               

                                                ADD run.sh /run.sh

                                               

                                                RUN chmod +x /*.sh

                                                RUN chmod +x /tomcat/bin/*.sh

                                                RUN chmod +x /jdk/bin/*

                                               

                                                EXPOSE 8080

                                                CMD["/run.sh"]

                                               

                                4:編寫run.sh

                                                #!/bin/bash

                                                /usr/sbin/sshd -D &

                                                exec ${CATALINA_HOME}/bin/catalina.sh run

                                5:編譯dockfile文件,建立鏡像        

                                                docker build -t tomcat8.5:jdk1.8

                                6:啓動tomcat容器 經過 docker logs 容器id 可查看啓動log

                                                docker run -d -P tomcat8.5:jdk1.8

                                7:查看端口映射

                                                docker ps

                                                                                               

                                                                                               

Docker 安裝 rabbitmq

                                docker pull rabbitmq:management

                                docker run -d --name rabbit -p 15672:15672 -p 5672:5672 -v /var/lib/rabbitmq:/var/lib/rabbitmq -v /var/log/rabbitmq:/var/log/rabbitmq  rabbitmq:management

                               

Docker 安裝 Jenkins   ps(-u 是講執行命令的用戶權限內置到容器裏,0是root用戶的id  -d是以守護進程方式運行,-p綁定端口, -v掛載宿主機文件夾) 

                                docker run -d -u 0 -p 8081:8080 -p 50000:50000 -v /var/lib/jenkins:/var/jenkins_home jenkins

                               

Docker 安裝GitLab

                                docker run -d --detach  --hostname gitlab.example.com --publish 443:443 --publish 80:80 --publish 23:23  --name gitlab --restart always  --volume /srv/gitlab/config:/etc/gitlab  --volume /src/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab  gitlab/gitlab-ce:latest

                               

                                登陸用戶名:root

                               

Docker 安裝Redis

                               

                                1:docker run --name redis-container -d redis

                                2:進入redis容器

                                docker exec -it 容器id /bin/bash

                                3:查看容器運行時間和內存情況,環境變量(命令分別是:uptime,free,env)

                                4:運行redis 客戶端

                                docker run -it --link redis-container:db --entrypoint redis-cli redis -h db

                               

Docker 核心技術:

1:Linux操做系統的命名空間

利用Linux操做系統的命名空間的特性,Docker實現了每一個容器都有本身的命名空間,運行在其中的應用都像是在獨立的操做系統環境中同樣。命名空間機制保證了容器之間彼此互不影響。

                1-1:進程命名空間:

每一個進程命名空間有一套本身的進程號管理方法。進程命名空間是一個父子關係的結構,子空間中的進程對於父空間的進程是可見的。

例如查看Docker 主進程的進程號是8137

ps -ef|grep docker

root      8137  1200  0 08:51 ?        00:00:00 docker-containerd-shim -namespace moby -workdir /var/lib/docker/containerd/daemon/io.containerd.runtime.v1.linux/moby/adfd7a83fae0e705d49732a8178bdfc153bfa4d45aad69461e4c18aa42c9fbfe -address /var/run/docker/containerd/docker-containerd.sock -containerd-binary /usr/bin/docker-containerd -runtime-root /var/run/docker/runtime-runc

此時運行一個容器例如:docker run -d ubuntu /bin/sh -c "while true:do echo hello world;sleep 1;done"

查看新建容器的進程,能夠看到當前的進程的父進程號是8137

ps -ef|grep while

root      8153  8137  0 08:51 ?        00:00:00 /bin/sh -c while true;do echo hello world;sleep 1;done

                1-2:網絡命名空間

物理主機的物理網卡 經過網橋的方式將每一個容器的虛擬網口 鏈接在一塊兒。實現了網絡命名空間的隔離

                1-3:IPC命名空間

Linux常見的進程間交互方法-》IPC ,容器中進程交互也採用了IPC,同一個IPC命名空間內的進程能夠彼此可見,容許進行交互,不一樣空間的進程則沒法交互。

                1-4:掛載命名空間

掛載命名空間容許不一樣命名空間的進程看到的文件結構不一樣,這樣每一個命名空間中的進程所看到的文件目錄彼此被隔離。

                1-5:UTS命名空間

容許每一個容器擁有獨立的主機名和域名,從而能夠虛擬出一個獨立主機名和網絡空間的環境,默認狀況下容器ID,就是容器的主機名。

                1-6:用戶命名空間

每一個容器能夠有不一樣的用戶和組id,每一個容器內部均可以有root用戶,但和宿主機的root不在一個命名空間。

 

2:控制組

控制組是Linux內核的一個特性。主要用來對共享資源的隔離,限制,審計等等、

                2-1:資源限制

                主要是能夠限制容器使用宿主機內存的上限

                2-2:優先級

                能夠指定某個容器使用cpu的優先級。

                2-3:資源審計

                用來統計系統實際上把多少資源用到合適的目的上,可使用cpuacct子系統記錄某個進程使用的cpu時間

                2-4:隔離

                爲組隔離命名空間,這樣一個組不會看到另外一個組的進程,網絡鏈接和文件系統

                2-5:控制C

                掛起,恢復,重啓動等操做。

                安裝Docker後,用戶能夠在 /sys/fs/cgroup/memory/docker 目錄下看到對Docker組應用的各類限制。

好比:memory_limit_in_bytes 文件是配置對Docker用戶組中的全部進程使用的物理內存總量的限制,能夠改變文件內容進行對內存總量限制的修改。

3:聯合文件系統

Docker鏡像自身是由多個文件層組成,每一層有惟一編號。

經過docker history ubuntu:14.04 能夠看到ubuntu14.04鏡像 有哪些層組成的。

Docker全部的存儲都在Docker目錄下,以ubuntu爲例,在/var/lib/ubuntu 其中aufs目錄是文件系統所在,aufs中存儲着Docker鏡像相關數據和信息。

新版本的docker文件系統已經被Overlay取代了。

 

4:Linux網絡虛擬化

                網絡建立的過程

                1:建立一對虛擬接口,分別放到本地主機和新容器的命名空間上。

                2:本地主機的一端虛擬藉口鏈接到默認的docker0的網橋上,並具備一個以veth開頭的惟一名字。例如veth1234

                3:容器一端的虛擬接口將放到新建立的容器中,並修更名字做爲eth0,這個接口只在容器的命名空間可見

                4:從網橋可用地址段中獲取一個空閒地址分配給容器的eth0,並配置默認路由網關爲docker0網卡的內部接口docker0的ip地址。

 

Docker 搭建私有倉庫幾大要素  這部分我沒有詳細實踐,具體可自行百度,或者查看《Docker技術入門與實戰》第18章

                 使用Nginx代理私有倉庫的容器地址,讓其餘機器能夠訪問私有倉庫。

                 對私有倉庫進行用戶名密碼認證(基於Nginx)

                 證書認證,可經過openssl本身生成證書或者從網上申請證書。我的以爲 通常公司不須要證書認證。

                 

 

Docker 安全防禦檢測工具:

                1:Docker Bench:按照CIS Docker 規範包括主機配置,Docker引擎,配置文件權限,鏡像管理,容器運行時環境,安全項等六大方面進行掃描檢查。

                使用方法:docker run -it --net host --pid host --cap-add audit_control -v /var/lib:/var/lib -v /var/run/docker.sock:/var/run/docker.sock -v /usr/lib/systemd:/usr/lib/systemd -v /etc:/etc --label docker_bench_security docker/docker-bench-security

               

                2:clair:對容器的文件層進行掃描從而發現漏洞 使用方法不介紹了,自行百度吧很簡單。

               

Docker 高級網絡功能:

                這部分我也不作詳細解釋了。

                正常狀況下使用docker 建立容器時 默認的網絡便可。  若是真的須要配置容器的DNS 主機名或者網橋之類的。看看《Docker技術入門與實戰》的第20章吧,當工具書來使用就能夠了。

               

Docker 構建跨主機容器網絡:

                實現這個功能,須要利用libnetwor插件,在libnetwork的網絡方案中,要實現跨主機容器網絡須要一個網絡信息管理機制,一個鍵值數據庫便可。例如,Consul,Etcd,Zookeeper等工具均可以知足。

1:配置網絡信息管理數據庫

 以Consul爲例,啓動一個progrium/consul容器,並映射服務到本地的8500端口

            docker run -d -p 8500:8500 -h consul progrium/consul -server -bootstrap

2:配置Docker主機

啓動兩臺Docker主機n1和n2,分別安裝好最新的docker-enginne ,確保這兩臺主機之間能夠經過IP地址互相訪問,另外,都能訪問到數據庫節點的8500端口。

配置主機的Docker服務啓動選項:

DOCKER_OPTS=「$DOCKER_OPTS –cluster-store=consul://<CONSUL_NODE>:8500  --cluster-advertise=eth0:2376」

重啓docker服務

sudo service doker restart

 

3:建立網絡

在任意一個節點上建立網絡multi,例如在n1上執行命令。

 docker network create -d overlay multi

建立成功後,能夠同時在n1和n2上查看到新的網絡multi的信息

docker network ls

4:測試網絡

1:在n1上啓動一個容器c1,經過--net選項制定連接到multi網絡上,查看網絡信息,其中一個接口eth0已經連接到multi的網絡上。

在n1上執行:docker run -it –name=c1 –net=multi busybox

2:在n2上啓動一個容器c2,一樣鏈接到multi網絡上,經過ping c1進行測試

在n2上執行:docker run -it –name=c2 -net=multi busybox

            ping  c1

若是能夠ping通,說明跨主機容器網絡已經構建完成了。

 

 

Docker 開源項目(簡單介紹  詳細信息須要去github瞭解,或者自行百度)

1:Etcd-----高可用的鍵值數據庫

2:Docker三劍客之Docker Machine

            Docker Machine負責使用Docker的第一步,在多種平臺上快速安裝Docker環境。它支持多種平臺,讓用戶能夠在很短期內搭建一套Docker主機集羣。

3:Docker三劍客之Docker Compose

            Docker Compose它可讓用戶經過編寫一個簡單的模板文件,快速的建立和管理基於Docker容器的應用集羣

4:Docker 三劍客之Docker Swarm

                Docker Swarm提供容器集羣服務,使用它能夠將多個Docker 主機封裝爲單個大型的虛擬主機,快速打造一套容器雲平臺。

5:Mesos-----優秀的集羣資源調度平臺

                Mesos項目是源自UC Berkeley對集羣資源進行抽象和管理的開源項目,相似於操做系統內核,用戶可使用它很容易地實現分佈式應用的自動化調度。

6:Kubernetes--------生產級容器集羣平臺(K8S)

                打算詳細看一下《Kubernetes 權威指南》  我有pdf,若有須要私信我吧  bbz17640380550@163.com

一張圖總結Docker命令:

 

相關文章
相關標籤/搜索