centos7下docker1.12.5學習筆記


一、Docker簡介

Docker是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然后發布到任何流行的Linux機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

Docker組成 Docker Client 和 Docker Server
Docker組件 鏡像(Image) 容器(Container) 倉庫(Repository)

二、Docker應用場景

1. 簡化配置
2. 代碼流水線(Code Pipeline)管理
3. 提高開發效率
4. 隔離應用
5. 整合服務器
6. 調試能力Docker
7. 多租戶環境
8. 快速部署

 

三、Docker安裝
請更新自已的yum源,避免安裝超時

http://mirrors.aliyun.com/help/centos
http://mirrors.163.com/.help/centos.html
> yum install docker-engine

或者如下(老式寫法)

> yum install docker-io
> yum install docker.io

添加開機啟動

> chkconfig docker on
> chkconfig --list docker

啟動docker

> systemctl start docker.service

停止docker

> systemctl stop docker.service

 

四、Docker鏡像
查看版本號

> docker version

查看docker層面信息,images,containers數等

> docker info

搜索centos鏡像

> docker search centos

下載鏡像

> docker pull centos

如果下載時出現超時,請換如下,詳細請看http://get.daocloud.io/

> docker pull daocloud.io/library/centos:latest

查看鏡像

> docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
daocloud.io/library/centos   latest              67591570dd29        4 weeks ago         191.8 MB

刪除鏡像

> docker rmi 鏡像ID

 

五、Docker容器
創建一個容器,並運行/bin/echo程序

> docker run daocloud.io/library/centos /bin/echo "hello world"

查看所有容器

> docker ps -a

--name給容器起個名稱
-i開啟輸入終端,-t表示使用終端
該命令通過centos鏡像來創建一個mydocker容器,然后運行指定的一個程序,程序退出那容器也退出。

> docker run --name mydocker -it daocloud.io/library/centos /bin/bash

退出容器

> exit

重新啟動原有容器,98c6f96292c1表示容器ID

> docker restart 98c6f96292c1

讓容器在后台運行,如果鏡像沒有下載,會自動幫我們下載nginx鏡像

> docker run -d --name mynginx daocloud.io/library/nginx:1.7.1 nginx

刪除容器

> docker rm 容器ID

停止容器

> docker stop 容器ID

進入容器(不建議)

> docker attach 容器ID

獲取容器的PID

> docker inspect --format "{{.State.Pid}}" 容器名稱

通過容器PID進入容器

> nsenter --target 容器PID --mount --uts --ipc --net --pid

如果nsenter沒有需要安裝

> yum install -y util-linux

 

六、Docker網絡
查看主機網橋信息

> brctl show

如果提示沒有此命令請安裝

> yum install bridge-utils

在容器中查看路由表

> ip ro li

隨機映射(把容器中的端口隨機映射到主機端口)

> docker run -d -P --name mynginx2 daocloud.io/library/nginx:1.7.1 nginx

把容器80端口映射到主機88端口

> docker run -d -p 88:80 --name mynginx2 daocloud.io/library/nginx:1.7.1 nginx

映射端口的方式:

-p 主機端口:容器端口
-p ip:主機端口:容器端口
-p ip::容器端口
-p 主機端口:容器端口 -p 主機端口:容器端口

 

七、Docker數據管理
1、數據卷
主機創建數據卷並掛載到容器/data下

> docker run -it --name 111 -v /data daocloud.io/library/centos

把主機的/data掛載到容器的/data2下

> docker run -it --name 222 -v /data:/data2 daocloud.io/library/centos

如果發現容器中/data2無法寫入文件,請關閉selinux。

只讀

> docker run -it --name 333 -v /data:/data2:ro daocloud.io/library/centos

查看數據卷創建在哪了

> docker inspect -f {{.Mounts}} 容器名
> docker inspect -f {{.Config.Volumes}} 容器名

以下寫法是老式寫法

> docker inspect -f {{.Volumes}} 容器名

 
2、數據卷容器
把一個容器當作數據容器來掛載

> docker run -it --name 444 --volumes-from 容器名 daocloud.io/library/centos

 
八、手動構建Docker鏡像
我們如何自已創建一個nginx鏡像?

首先創建一個centos空容器

> docker run -it --name mynginx daocloud.io/library/centos

安裝一些必要的庫

> yum install wget gcc gcc-c++ make openssl-devel

下載pcre和nginx源碼

> wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz
> wget http://mirrors.sohu.com/nginx/nginx-1.10.3.tar.gz

把源碼移動到/usr/local/src下並解壓

> mv *.gz /usr/local/src
> tar xf pcre-8.39.tar.gz
> tar xf nginx-1.10.3.tar.gz

創建用戶

> useradd -s /sbin/nologin -M nginx

進入nginx目錄

> ./configure --prefix=/usr/local/nginx \
--with-pcre=/usr/local/src/pcre-8.39 \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module
> make && make install

讓nginx在前台運行(不能讓nginx在后台運行)

> vi /usr/local/nginx/conf/nginx.conf
daemon off;

提交我們自已創建的鏡像

> docker commit -m "my nginx" 容器ID lackone/mynginx:1

我們來使用我們創建的鏡像

> docker run -d -p 99:80 --name 666 lackone/mynginx:1 /usr/local/nginx/sbin/nginx

然后我們通過主機IP:99就可以訪問容器內的nginx服務器了。


九、Docker的Dockerfile

1.基礎鏡像信息
2.維護者信息
3.鏡像操作指令
4.容器啟動時執行指令

創建一個目錄

> mkdir /data/dockerfile
> cd /data/dockerfile

創建一個Dockerfile文件,首字母大寫

> vi Dockerfile
#This is Dockerfile
#Version 1.0
#Author: lackone

#基礎鏡像
FROM daocloud.io/library/centos

#維護者信息
MAINTAINER lackone

#COPY文件,如果是壓縮包會自動解壓
#注意壓縮包必須與Dockerfile同目錄
ADD pcre-8.39.tar.gz /usr/local/src
ADD nginx-1.10.3.tar.gz /usr/local/src

#執行命令
RUN yum install wget gcc gcc-c++ make openssl-devel
RUN useradd -s /sbin/nologin -M nginx

#當前工作目錄
WORKDIR /usr/local/src/nginx-1.10.3

#執行命令
RUN ./configure --prefix=/usr/local/nginx \
--with-pcre=/usr/local/src/pcre-8.39 \
--user=nginx \
--group=nginx \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_stub_status_module
RUN make && make install
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf

#目錄掛載
#VOLUME

#端口
EXPOSE 80

#聲明環境變量
ENV PATH /usr/local/nginx/sbin:$PATH
#運行nginx,進程要一直運行下去
CMD ["nginx"]

構建鏡像

> docker build -t 名稱:標識 /data/dockerfile/

 
十、Docker資源隔離和限制(cgroup)

首先我們創建一個壓力測試鏡像

> mkdir /data/stress
> wget http://mirrors.aliyun.com/repo/Centos-7.repo
> wget http://people.seas.harvard.edu/~apw/stress/stress-1.0.4.tar.gz
> vi Dockerfile
FROM daocloud.io/library/centos
ADD Centos-7.repo /etc/yum.repos.d/CentOS-Base.repo
ADD stress-1.0.4.tar.gz /usr/local/src
RUN yum makecache
RUN yum install -y make automake autoconf gcc gcc-c++
WORKDIR /usr/local/src/stress-1.0.4
RUN ./configure --prefix=/usr/local/stress
RUN make && make install
ENV PATH /usr/local/stress/bin:$PATH
#CMD與ENTRYPOINT的區別在於執行docker run時參數傳遞的方式不同
ENTRYPOINT ["stress"]

#構建stress鏡像

> docker build -t stress:1 .

創建容器並測試
--rm表示容器退出自動刪除

> docker run -it --rm --name test stress:1 --cpu 1

-c是docker限制的cpu使用份額
--cpu是傳遞給stress的參數

> docker run -it --rm -c 512 --name test stress:1 --cpu 1

--cpuset-cpus=0表示第一顆CPU

> docker run -it --rm --cpuset-cpus=0 --name test stress:1 --cpu 1

-m 128m表示docker限制的內存大小
--vm-bytes表示stress測試使用的內存大小

> docker run -it --rm -m 128m --name test stress:1 --vm-bytes 128m --vm-hang 0

 
十一、Docker網絡
1、橋接模式
默認docker網絡使用的是橋接模式
當docker啟動時會創建一個docker0的虛擬網橋,創建容器時會創建一個網橋接口,通過網橋轉發。

> brctl show
bridge name    bridge id        STP enabled    interfaces
docker0        8000.0242c41e7d80    no        vethaa35584
                                              vethbd1676b

2、host模式
容器與主機共用一個Network Namespace,共享主機網絡信息。
3、container復用方式
與另一個容器共用一個Network Namespace,而不是和宿主機共享。
4、none方式
容器擁有自已的Network Namespace,但不進行任何網絡配置,沒有網卡,IP,路由信息。

十二、Docker的Registry

把Registry下載下來

> docker pull daocloud.io/library/registry:0.5.9

創建容器並運行,啟動了一個私有的倉庫,主機監聽6666端口

> docker run -d -p 6666:5000 daocloud.io/library/registry:0.5.9

首先創建一個tag,指定倉庫的IP、端口、目錄和容器名

> docker tag 鏡像ID 192.168.1.233:6666/test/mynginx:1

查看鏡像

> docker images

push鏡像到本地倉庫

> docker push 192.168.1.233:6666/test/mynginx:1

如果無法push成功請修改下面配置,因為要走https

> vi /etc/sysconfig/docker

去掉下面的#號,並修改如下,改成自已的IP和端口

INSECURE_REGISTRY='--insecure-registry 192.168.1.233:6666'

然后重啟服務

> systemctl restart docker.service

現在我們就可以把我們push的鏡像下載下來了

> docker pull 192.168.1.233:6666/test/mynginx:1

 
十三、Docker的WEB管理工具

Shipyard

> curl -s https://shipyard-project.com/deploy | bash -s

Shipyard默認訪問端口是8080,默認用戶名和密碼是admin和shipyard


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM