docker

第1章 Docker容器介紹

1.1 docker是什么

Docker 是 Docker.Inc 公司開源的一個(gè)基于 LXC技術(shù)之上構(gòu)建的Container容器引擎循诉, 源代碼托管在 GitHub 上, 基于Go語言并遵從Apache2.0協(xié)議開源捏浊。
Docker是通過內(nèi)核虛擬化技術(shù)(namespaces及cgroups等)來提供容器的資源隔離與安全保障等寿谴。由于Docker通過操作系統(tǒng)層的虛擬化實(shí)現(xiàn)隔離,所以Docker容器在運(yùn)行時(shí)吊洼,不需要類似虛擬機(jī)(VM)額外的操作系統(tǒng)開銷份帐,提高資源利用率膏萧。

1.2 容器與虛擬機(jī)對(duì)比


1.3 docker的三個(gè)重要概念

Image(鏡像):
那么鏡像到底是什么呢?Docker 鏡像可以看作是一個(gè)特殊的文件系統(tǒng)饮怯,除了提供容器運(yùn)行時(shí)所需的程序闰歪、庫、資源蓖墅、配置等文件外库倘,還包含了一些為運(yùn)行時(shí)準(zhǔn)備的一些配置參數(shù)(如匿名卷、環(huán)境變量论矾、用戶等)教翩。
Container(容器)
容器(Container)的定義和鏡像(Image)幾乎一模一樣,也是一堆層的統(tǒng)一視角贪壳,唯一區(qū)別在于容器的最上面那一層是可讀可寫的饱亿。
Repository(倉庫)
鏡像倉庫是 Docker 用來集中存放鏡像文件的地方,類似于我們之前常用的代碼倉庫。
通常彪笼,一個(gè)倉庫會(huì)包含同一個(gè)軟件不同版本的鏡像钻注,而標(biāo)簽就常用于對(duì)應(yīng)該軟件的各個(gè)版本 。
我們可以通過<倉庫名>:<標(biāo)簽>的格式來指定具體是這個(gè)軟件哪個(gè)版本的鏡像配猫。如果不給出標(biāo)簽幅恋,將以 Latest 作為默認(rèn)標(biāo)簽。


1.4 docker的組成部分

docker是傳統(tǒng)的CS架構(gòu)分為docker client和docker server
Docker 客戶端是 Docker 用戶與 Docker 交互的主要方式泵肄。當(dāng)您使用 Docker 命令行運(yùn)行命令時(shí)捆交,Docker 客戶端將這些命令發(fā)送給服務(wù)器端,服務(wù)端將執(zhí)行這些命令凡伊。
Docker 命令使用 Docker API 零渐。Docker 客戶端可以與多個(gè)服務(wù)端進(jìn)行通信。


第2章 Docker安裝部署

2.1 國內(nèi)源安裝docker-ce

這里我們使用清華源:
https://mirrors.tuna.tsinghua.edu.cn/help/docker-ce/
操作步驟:

yum remove docker docker-common docker-selinux docker-engine
yum install -y yum-utils device-mapper-persistent-data lvm2
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
yum install docker-ce
systemctl start docker

2.2 國內(nèi)遠(yuǎn)鏡像加速配置

[root@docker01 ~]# cat /etc/docker/daemon.json 
{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
[root@docker01 ~]# systemctl restart docker

2.3 快速安裝

思路:
1.開啟yum緩存
2.全新環(huán)境安裝docker
3.將緩存的包全部打包出來
4.安裝的時(shí)候使用rpm -ivh *.rpm方式安裝

2.4 運(yùn)行第一個(gè)容器

運(yùn)行一個(gè)Hello world

docker run alpine /bin/echo "Hello world"

第3章 Docker鏡像和容器管理

3.1 鏡像相關(guān)命令

3.1.1 搜索鏡像

選擇鏡像建議:
1.優(yōu)先選擇官方的
2.選擇星星多的

docker search centos

3.1.2 獲取鏡像

docker pull centos
docker pull busybox
docker pull busybox:1.29

3.1.3 查看鏡像

docker images

3.1.4 刪除鏡像

docker rmi centos

3.1.5 導(dǎo)出鏡像

docker save -o centos.tar centos:latest

3.1.6 導(dǎo)入鏡像

docker load  < centos.tar

3.2 容器相關(guān)命令

3.2.1 啟動(dòng)容器

docker run -d -p 80:80 nginx 
docker run --name mydocker -t -i centos /bin/bash

3.2.2 停止容器

docker stop 

3.2.3 查看容器

docker ps 
docker ps -a 
docker ps -q
docker ps -aq

3.2.4 進(jìn)入容器

docker exec會(huì)分配一個(gè)新的終端tty
docker exec -it 容器ID  /bin/bash 
docker attach會(huì)使用同一個(gè)終端
docker attach 容器ID

3.2.5 刪除容器

刪除單個(gè)容器

docker rm 容器ID

批量刪除容器

docker stop $(docker ps -q)
docker rm $(docker ps -aq)

第4章 Docker網(wǎng)絡(luò)管理

4.1 隨機(jī)映射端口

docker run -P 

4.2 指定映射端口

-p 宿主機(jī)端口:容器端口

-p 80:80 -p 443:443
-p 宿主機(jī)IP:宿主機(jī)端口:容器端口

如果想多個(gè)容器使用8080端口系忙,可以通過添加多個(gè)IP地址實(shí)現(xiàn)

ifconfig eth0:1 10.0.1.13 up
docker run -d -p 10.0.1.11:8080:80 nginx:latest
docker run -d -p 10.0.1.13:8080:80 nginx:latest

進(jìn)入容器里修改站點(diǎn)目錄诵盼,然后訪問測(cè)試

docker exec -it bdb2a4e7e24d /bin/bash
echo "web01" > /usr/share/nginx/html/index.html
docker exec -it 31c1de138dda /bin/bash
echo "web02" > /usr/share/nginx/html/index.html

訪問測(cè)試:

[root@docker01 ~]# curl 10.0.1.11:8080
web02
[root@docker01 ~]# curl 10.0.1.13:8080
web01

第5章 Docker數(shù)據(jù)卷管理

5.1 持久化數(shù)據(jù)卷

-v 宿主機(jī)目錄:容器內(nèi)目錄
下面我們來創(chuàng)建一個(gè)html5小游戲

5.1.1 創(chuàng)建游戲代碼目錄

mkdir /data/xiaoniao -p
cd /data/
unzip xiaoniaofeifei.zip  -d xiaoniao /

5.1.2 創(chuàng)建容器并映射數(shù)據(jù)卷

docker run -d  -p 80:80 -v /data/xiaoniao:/usr/share/nginx/html nginx:latest
docker ps

5.1.3 訪問游戲頁面

10.0.1.11

5.2 持久化數(shù)據(jù)卷容器

--volumes-from (跟某一個(gè)已經(jīng)存在的容器掛載相同的卷)

查看當(dāng)前容器有哪些卷

docker volume ls

下面我們利用容器卷創(chuàng)建一個(gè)小游戲

5.2.1 創(chuàng)建一個(gè)容器卷

docker run -d  -p 8080:80 --volume xiaoniao:/usr/share/nginx/html nginx:latest
docker volume ls

5.2.2 查看卷的目錄

docker volume inspect xiaoniao

5.2.3 復(fù)制代碼目錄到容器卷目錄

\cp -a /data/xiaoniao/* /var/lib/docker/volumes/xiaoniao/_data/

5.2.4 使用容器卷創(chuàng)建新容器

docker run -d  -p 8090:80 --volume xiaoniao:/usr/share/nginx/html nginx:latest

5.3 實(shí)驗(yàn)-訪問不同端口展示不同頁面

需求:
訪問8080端口,展示xiaoniao首頁
訪問8090端口银还,展示游戲集合頁面

5.3.1 準(zhǔn)備nginx配置文件

[root@docker01 ~]# cat /data/game.conf 
server {
    listen       8080;
    server_name  localhost;
    location / {
        root   /opt/game/;
        index  index.html index.htm;
    }
}

server {
    listen       8090;
    server_name  localhost;
    location / {
        root   /opt/xiaoniao/;
        index  index.html index.htm;
    }
}

5.3.2 上傳代碼目錄

[root@docker01 /data]# ll 
總用量 18896
drwxr-xr-x 5 root root       73 9月   7 23:03 game
-rw-r--r-- 1 root root      309 9月   7 22:57 game.conf
-rw-r--r-- 1 root root 19248295 8月  28 09:48 html5.zip
drwxr-xr-x 3 root root       92 9月   7 22:15 xiaoniao
-rw-r--r-- 1 root root    91014 9月   7 22:11 xiaoniaofeifei.zip

5.3.3 創(chuàng)建容器并掛載

需要掛載的內(nèi)容:
1.nginx配置文件
2.游戲目錄
創(chuàng)建容器命令

docker run -d -p 8080:8080 -p 8090:8090 -v /data/game.conf:/etc/nginx/conf.d/game.conf -v /data/game:/opt/game -v /data/xiaoniao:/opt/xiaoniao nginx:latest   

5.3.4 訪問測(cè)試

10.0.1.11:8080
10.0.1.11:8090

第6章 Docker鏡像手動(dòng)構(gòu)建

6.1 手動(dòng)制作游戲鏡像

下面我們基于centos容器制作一個(gè)新鏡像风宁,并安裝nginx服務(wù)

6.1.1 啟動(dòng)一個(gè)容器并安裝nginx

[root@docker01 ~]# docker run -it centos /bin/bash
[root@0ede2760ba65 /]# yum install wget install openssh-clients -y 
[root@0ede2760ba65 /]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@0ede2760ba65 /]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
[root@0ede2760ba65 /]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
[root@0ede2760ba65 /]# cat /etc/yum.repos.d/nginx.repo  
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
[root@0ede2760ba65 /]# yum makecache fast
[root@0ede2760ba65 /]# yum install nginx -y

6.1.2 上傳代碼目錄并配置nginx配置文件

[root@0ede2760ba65 /]# scp -r 10.0.1.11:/data/* /opt/
[root@0ede2760ba65 /]# ll /opt/
total 18896
drwxr-xr-x 5 root root       73 Sep  7 16:02 game
-rw-r--r-- 1 root root      303 Sep  7 16:02 game.conf
-rw-r--r-- 1 root root 19248295 Sep  7 16:02 html5.zip
drwxr-xr-x 3 root root       92 Sep  7 16:02 xiaoniao
-rw-r--r-- 1 root root    91014 Sep  7 16:02 xiaoniaofeifei.zip
[root@0ede2760ba65 /]# cp /opt/game.conf /etc/nginx/conf.d/

6.1.3 將容器提交為新的鏡像

[root@docker01 ~]# docker ps -aq
0ede2760ba65
[root@docker01 ~]# docker commit 0ede2760ba65 game:v1
sha256:a61d28fbfe27ebe36d4b73825b55e5f94097083273ab56dccce0453ce2bd6d38

6.1.4 測(cè)試鏡像功能是否可用

[root@docker01 ~]# docker run -d -p 8080:8080 -p 8090:8090 game:v1  nginx -g 'daemon off;'
f58f209d4761c4bdd9bb164c0050a94a3273b1ee0e57eafe29e48b1517c72950

6.1.5 將新鏡像導(dǎo)出

docker save -o game_v1.tar game:v1

6.2 手動(dòng)制作云盤鏡像

6.2.1 創(chuàng)建容器

docker run -d -p 80:80 --name clould game:v1  nginx -g 'daemon off;'

6.2.2 進(jìn)入容器安裝php并求改運(yùn)行用戶

[root@d0c987bcefa2 /]# yum install php-fpm -y
[root@d0c987bcefa2 /]# php-fpm -v
PHP 5.4.16 (fpm-fcgi) (built: Oct 30 2018 19:32:20)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
[root@d0c987bcefa2 /]# sed -i '/^user/c user = nginx' /etc/php-fpm.d/www.conf
[root@d0c987bcefa2 /]# sed -i '/^group/c group = nginx' /etc/php-fpm.d/www.conf
[root@d0c987bcefa2 /]# sed -i '/daemonize/s#no#yes#g' /etc/php-fpm.conf     
[root@d0c987bcefa2 /]# php-fpm -c /etc/php.ini -y /etc/php-fpm.conf
[root@d0c987bcefa2 /]# php-fpm -c /etc/php.ini -y /etc/php-fpm.conf                                   
[root@d0c987bcefa2 /]# ps -ef|grep php
root         77      0  0 21:43 ?        00:00:00 php-fpm: master process (/etc/php-fpm.conf)
nginx        78     77  0 21:43 ?        00:00:00 php-fpm: pool www
nginx        79     77  0 21:43 ?        00:00:00 php-fpm: pool www
nginx        80     77  0 21:43 ?        00:00:00 php-fpm: pool www
nginx        81     77  0 21:43 ?        00:00:00 php-fpm: pool www
nginx        82     77  0 21:43 ?        00:00:00 php-fpm: pool www

6.2.3 配置nginx

[root@d0c987bcefa2 /]# cat /etc/nginx/conf.d/cloud.conf   
server {
    listen 80;
    server_name localhost;
    root /code;
    index index.php index.html;

    location ~ \.php$ {
        root /code;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}
[root@d0c987bcefa2 /]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@d0c987bcefa2 /]# nginx -s reload

6.2.4 下載代碼目錄

[root@d0c987bcefa2 /]# mkdir /code
[root@d0c987bcefa2 /]# cd /code/
[root@d0c987bcefa2 code]# scp -r 10.0.1.11:/data/kod/* /code/
[root@d0c987bcefa2 code]# ls
ChangeLog.md  README.MD  app  config  data  index.php  plugins  static
[root@d0c987bcefa2 code]# chown -R nginx:nginx /code/

6.2.5 測(cè)試

[root@d0c987bcefa2 code]# curl -I 127.0.0.1
HTTP/1.1 302 Moved Temporarily
Server: nginx/1.16.1
Date: Sat, 07 Sep 2019 21:53:17 GMT
Content-Type: text/html; charset=utf-8
Connection: keep-alive
X-Powered-By: PHP/5.4.16
Set-Cookie: KOD_SESSION_ID_9d6d9=ljq63o0tmcscon6eb3gdpqscf4; path=/
Set-Cookie: KOD_SESSION_ID_9d6d9=ljq63o0tmcscon6eb3gdpqscf4; path=/
Set-Cookie: KOD_SESSION_ID_9d6d9=ljq63o0tmcscon6eb3gdpqscf4; path=/
Set-Cookie: KOD_SESSION_SSO=bboh1p0h1uc50tfibrg67dnra7; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: KOD_SESSION_ID_9d6d9=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT; path=/
Set-Cookie: kod_name=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT
Set-Cookie: kodToken=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT
Set-Cookie: X-CSRF-TOKEN=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT
Location: ./index.php?user/login

6.2.6 提交新的鏡像

[root@docker01 ~]# docker commit d0c987bcefa2 kod:v1
sha256:169df6e8db11bd044e3e05237f2947783f9cc7a65b643dc9206ecf05fdc4a3ea

6.2.7 編寫啟動(dòng)腳本并提交新鏡像

[root@docker01 ~]# docker exec -it c14835183fb5 /bin/bash
[root@c14835183fb5 /]# cat init.sh     
#!/bin/bash
php-fpm -c /etc/php.ini -y /etc/php-fpm.conf
nginx -g 'daemon off;'
[root@c14835183fb5 /]# chmod +x init.sh 
[root@docker01 ~]# docker commit c14835183fb5 kod:v2
sha256:c05ebdf400aa7f7a27aa857df0d9c75c42943db89abca66f79101771db8e9585

6.2.8 啟動(dòng)測(cè)試

[root@docker01 ~]# docker stop $(docker ps -qa)
[root@docker01 ~]# docker run -d -p 80:80 kod:v2 /bin/bash /init.sh
dccf4aea5471713872e4fefaca45f7fac3bffec8f5f602570863ed14231dea1a
[root@docker01 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                            NAMES
dccf4aea5471        kod:v2              "/bin/bash /init.sh"     36 seconds ago      Up 35 seconds       0.0.0.0:80->80/tcp                               magical_napier

6.2.9 添加GD庫

此時(shí)打開頁面提示缺少GD庫,進(jìn)入容器內(nèi)安裝php支持插件
[root@dccf4aea5471 /]yum install php-mbstring php-gd -y
然后重啟容器
[root@docker01 ~]# docker restart dccf4aea5471

6.2.10 訪問測(cè)試沒問題后提交新鏡像

[root@docker01 ~]# docker commit dccf4aea5471 kod:v2
sha256:23051ce545a2eb6bb50bb2307bd9cfbaf6139e52f205a4126fb1d8d974c417f4

第7章 Dockerfile自動(dòng)構(gòu)建Docker鏡像

7.1 Dockerfile操作命令說明

Docker通過對(duì)于在Dockerfile中的一系列指令的順序解析實(shí)現(xiàn)自動(dòng)的image的構(gòu)建
  通過使用build命令蛹疯,根據(jù)Dockerfiel的描述來構(gòu)建鏡像
  通過源代碼路徑的方式
  通過標(biāo)準(zhǔn)輸入流的方式
Dockerfile指令:
  只支持Docker自己定義的一套指令戒财,不支持自定義
  大小寫不敏感,但是建議全部使用大寫
  根據(jù)Dockerfile的內(nèi)容順序執(zhí)行
FROM:
  FROM {base鏡像}
  必須放在DOckerfile的第一行捺弦,表示從哪個(gè)baseimage開始構(gòu)建
MAINTAINER:
  可選的饮寞,用來標(biāo)識(shí)image作者的地方
RUN:
  每一個(gè)RUN指令都會(huì)是在一個(gè)新的container里面運(yùn)行,并提交為一個(gè)image作為下一個(gè)RUN的base
  一個(gè)Dockerfile中可以包含多個(gè)RUN列吼,按定義順序執(zhí)行
  RUN支持兩種運(yùn)行方式:
    RUN <cmd> 這個(gè)會(huì)當(dāng)作/bin/sh -c “cmd” 運(yùn)行
    RUN [“executable”幽崩,“arg1”,寞钥。慌申。],Docker把他當(dāng)作json的順序來解析理郑,因此必須使用雙引號(hào)蹄溉,而且executable需要是完整路徑
  RUN 都是啟動(dòng)一個(gè)容器、執(zhí)行命令您炉、然后提交存儲(chǔ)層文件變更柒爵。第一層 RUN command1 的執(zhí)行僅僅是當(dāng)前進(jìn)程,一個(gè)內(nèi)存上的變化而已赚爵,其結(jié)果不會(huì)造成任何文件餐弱。而到第二層的時(shí)候宴霸,啟動(dòng)的是一個(gè)全新的容器,跟第一層的容器更完全沒關(guān)系膏蚓,自然不可能繼承前一層構(gòu)建過程中的內(nèi)存變化瓢谢。而如果需要將兩條命令或者多條命令聯(lián)合起來執(zhí)行需要加上&&。如:cd /usr/local/src && wget xxxxxxx
CMD:
  CMD的作用是作為執(zhí)行container時(shí)候的默認(rèn)行為(容器默認(rèn)的啟動(dòng)命令)
  當(dāng)運(yùn)行container的時(shí)候聲明了command驮瞧,則不再用image中的CMD默認(rèn)所定義的命令
  一個(gè)Dockerfile中只能有一個(gè)有效的CMD氓扛,當(dāng)定義多個(gè)CMD的時(shí)候,只有最后一個(gè)才會(huì)起作用 
CMD定義的三種方式:
  CMD <cmd> 這個(gè)會(huì)當(dāng)作/bin/sh -c "cmd"來執(zhí)行
  CMD ["executable","arg1",....]
  CMD ["arg1","arg2"]论笔,這個(gè)時(shí)候CMD作為ENTRYPOINT的參數(shù) 
EXPOSE 聲明端口
  格式為 EXPOSE <端口1> [<端口2>...]采郎。
  EXPOSE 指令是聲明運(yùn)行時(shí)容器提供服務(wù)端口,這只是一個(gè)聲明狂魔,在運(yùn)行時(shí)并不會(huì)因?yàn)檫@個(gè)聲明應(yīng)用就會(huì)開啟這個(gè)端口的服務(wù)蒜埋。在 Dockerfile 中寫入這樣的聲明有兩個(gè)好處,一個(gè)是幫助鏡像使用者理解這個(gè)鏡像服務(wù)的守護(hù)端口最楷,以方便配置映射整份;另一個(gè)用處則是在運(yùn)行時(shí)使用隨機(jī)端口映射時(shí),也就是 docker run -P 時(shí)籽孙,會(huì)自動(dòng)隨機(jī)映射 EXPOSE 的端口烈评。
entrypoint:
  entrypoint的作用是,把整個(gè)container變成了一個(gè)可執(zhí)行的文件犯建,這樣不能夠通過替換CMD的方法來改變創(chuàng)建container的方式讲冠。但是可以通過參數(shù)傳遞的方法影響到container內(nèi)部
  每個(gè)Dockerfile只能夠包含一個(gè)entrypoint,多個(gè)entrypoint只有最后一個(gè)有效
  當(dāng)定義了entrypoint以后适瓦,CMD只能夠作為參數(shù)進(jìn)行傳遞
entrypoint定義方式:
  entrypoint ["executable","arg1","arg2"]竿开,這種定義方式下,CMD可以通過json的方式來定義entrypoint的參數(shù)玻熙,可以通過在運(yùn)行container的時(shí)候通過指定command的方式傳遞參數(shù)
  entrypoint <cmd>否彩,當(dāng)作/bin/bash -c "cmd"運(yùn)行命令
ADD & COPY:
  當(dāng)在源代碼構(gòu)建的方式下,可以通過ADD和COPY的方式揭芍,把host上的文件或者目錄復(fù)制到image中
  ADD和COPY的源必須在context路徑下
  當(dāng)src為網(wǎng)絡(luò)URL的情況下胳搞,ADD指令可以把它下載到dest的指定位置卸例,這個(gè)在任何build的方式下都可以work
  ADD相對(duì)COPY還有一個(gè)多的功能称杨,能夠進(jìn)行自動(dòng)解壓壓縮包
ENV:
  ENV key value
  用來設(shè)置環(huán)境變量,后續(xù)的RUN可以使用它所創(chuàng)建的環(huán)境變量
  當(dāng)創(chuàng)建基于該鏡像的container的時(shí)候筷转,會(huì)自動(dòng)擁有設(shè)置的環(huán)境變量 
WORKDIR:
  用來指定當(dāng)前工作目錄(或者稱為當(dāng)前目錄)
  當(dāng)使用相對(duì)目錄的情況下姑原,采用上一個(gè)WORKDIR指定的目錄作為基準(zhǔn) 
USER:
  指定UID或者username,來決定運(yùn)行RUN指令的用戶 
ONBUILD:
  ONBUILD作為一個(gè)trigger的標(biāo)記呜舒,可以用來trigger任何Dockerfile中的指令
  可以定義多個(gè)ONBUILD指令
  當(dāng)下一個(gè)鏡像B使用鏡像A作為base的時(shí)候锭汛,在FROM A指令前,會(huì)先按照順序執(zhí)行在構(gòu)建A時(shí)候定義的ONBUILD指令
  ONBUILD <DOCKERFILE 指令> <content>
VOLUME:
  用來創(chuàng)建一個(gè)在image之外的mount point,用來在多個(gè)container之間實(shí)現(xiàn)數(shù)據(jù)共享
  運(yùn)行使用json array的方式定義多個(gè)volume
  VOLUME ["/var/data1","/var/data2"]
  或者plain text的情況下定義多個(gè)VOLUME指令

7.2 使用Dockerfile創(chuàng)建云盤

7.2.1 準(zhǔn)備需要的文件

[root@docker01 ~/dockerfile/kod]# ls
CentOS-Base.repo  cloud.conf  dockerfile  epel.repo  init.sh  kodexplorer4.40.zip  nginx.repo

7.2.2 編寫dockerfile

[root@docker01 ~/dockerfile/kod]# cat dockerfile 
FROM centos:latest

ADD CentOS-Base.repo  /etc/yum.repos.d/CentOS-Base.repo
ADD epel.repo  /etc/yum.repos.d/epel.repo
ADD nginx.repo  /etc/yum.repos.d/nginx.repo
RUN yum install nginx php-fpm unzip php-gd php-mbstring -y 

RUN rm -rf /etc/nginx/conf.d/default.conf 
RUN sed -i '/^user/c user = nginx' /etc/php-fpm.d/www.conf
RUN sed -i '/^group/c group = nginx' /etc/php-fpm.d/www.conf
RUN sed -i '/daemonize/s#no#yes#g' /etc/php-fpm.conf   
ADD cloud.conf /etc/nginx/conf.d/cloud.conf

RUN   mkdir /code
WORKDIR /code
ADD kodexplorer4.40.zip /code/kodexplorer4.40.zip 
RUN unzip kodexplorer4.40.zip 
RUN chown -R nginx:nginx .
VOLUME /code

ADD init.sh  /init.sh
EXPOSE 80

CMD ["/bin/bash","/init.sh"]

7.2.3 構(gòu)建新鏡像

[root@docker01 ~/dockerfile/kod]# docker build --network=host -t centos_kod:v1 .
[root@docker01 ~/dockerfile/kod]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos_kod          v1                  87071ea7c86b        2 minutes ago       465MB

7.2.4 基于新鏡像運(yùn)行容器

[root@docker01 ~/dockerfile/kod]# docker run -d -p 80:80 centos_kod:v1
4d1007d7194d434248762e5aca76070206643f0f0f533f2112d0359b25fe7ba0

第8章 Docker私有倉庫

8.1 普通的docker registry

8.2 帶認(rèn)證的docker registry

8.3 企業(yè)級(jí)的docker-harbor

8.3.1 部署思路

第一步:安裝docker和docker-compose
第二步:下載harbor-offline-installer-v1.9.0-rc1.tgz
第三步:上傳到/opt,并解壓
第四步:修改harbor.yml配置文件 hostname = 10.0.0.11 harbor_admin_password = 123456
第五步:執(zhí)行install.sh

8.3.2 安裝docker-compose

1.安裝docker-compose

yum install -y python2-pip

2.這里使用pip安裝唤殴,默認(rèn)源為國外般婆,可以使用國內(nèi)加速,相關(guān)網(wǎng)站

https://mirrors.tuna.tsinghua.edu.cn/help/pypi/

pip加速操作命令

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pip -U
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

3.繼續(xù)安裝docker-compose

pip install docker-compose

4.檢查

docker-compose version

8.3.3 上傳解壓docker-harbor

[root@docker01 ~]# cd /opt/
[root@docker01 /opt]# ls
harbor-offline-installer-v1.9.0-rc1.tgz
[root@docker01 /opt]# tar zxf harbor-offline-installer-v1.9.0-rc1.tgz 
[root@docker01 /opt]# ls
harbor  harbor-offline-installer-v1.9.0-rc1.tgz
[root@docker01 /opt]# cd harbor/

8.3.4 修改配置文件

修改2個(gè)地方:

[root@docker01 /opt/harbor]# egrep "10.0.1.11|123456" harbor.yml 
hostname: 10.0.1.11
harbor_admin_password: 123456

8.3.5 安裝

[root@docker01 /opt/harbor]# ./install.sh

8.3.6 修改docker信任倉庫

[root@docker01 /opt/harbor]# cat /etc/docker/daemon.json    
{
      "registry-mirrors": ["http://hub-mirror.c.163.com"],
      "insecure-registries": ["http://10.0.1.11"] 
}

8.3.7 重啟docker并上傳鏡像

systemctl restart docker  

8.3.8 給鏡像打標(biāo)簽并提交到dockerharbor

[root@docker01 /opt/harbor]# docker login 10.0.1.11           
Username: zhangya 
Password: 
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded
[root@docker01 ~]# docker run -d -p 8080:80 centos_kod:v1          
78be80f7c2029b68e8943e38fa99131ec6709f798e63c94afb5a7fdfa4a8047c
[root@docker01 ~]# docker ps|grep kod
78be80f7c202        centos_kod:v1                                       "/bin/bash /init.sh"     15 seconds ago      Up 13 seconds            0.0.0.0:8080->80/tcp        tender_dirac
[root@docker01 ~]# docker commit 78be80f7c202 10.0.1.11/linux/centos_kod:v1
sha256:6bf1e1eef1969bcd4c82472aed945d4dda74a923c0d7dae91e38539676f8c240
[root@docker01 ~/dockerfile/kod]# docker images
REPOSITORY                      TAG                        IMAGE ID            CREATED             SIZE
10.0.1.11/linux/centos_kod      v1                         6bf1e1eef196        13 minutes ago      465MB
[root@docker01 /opt/harbor]# docker push 10.0.1.11/linux/centos_kod:v1

8.3.9 在docker-harbor上查看

8.3.10 其他主機(jī)上下載鏡像

[root@docker02 ~]# cat /etc/docker/daemon.json 
{
      "registry-mirrors": ["http://hub-mirror.c.163.com"],
      "insecure-registries": ["http://10.0.1.11"],
      "insecure-registries": ["https://10.0.1.11"] 
}
[root@docker02 ~]# docker pull 10.0.1.11/linux/centos_kod:v1

第9章 Docker容器編排工具

9.1 docker-compose介紹

9.2 安裝docker-compose

9.3 使用docker-compose部署LNMP

9.4 使用docker-compose部署zabbix

9.5 使用docker-compose部署gitlab

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末朵逝,一起剝皮案震驚了整個(gè)濱河市蔚袍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌配名,老刑警劉巖啤咽,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異渠脉,居然都是意外死亡宇整,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門芋膘,熙熙樓的掌柜王于貴愁眉苦臉地迎上來鳞青,“玉大人,你說我怎么就攤上這事索赏∨涡” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵潜腻,是天一觀的道長埃儿。 經(jīng)常有香客問我,道長融涣,這世上最難降的妖魔是什么童番? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮威鹿,結(jié)果婚禮上剃斧,老公的妹妹穿的比我還像新娘。我一直安慰自己忽你,他們只是感情好幼东,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著科雳,像睡著了一般根蟹。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上糟秘,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天简逮,我揣著相機(jī)與錄音,去河邊找鬼尿赚。 笑死散庶,一個(gè)胖子當(dāng)著我的面吹牛蕉堰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播悲龟,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼屋讶,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了须教?” 一聲冷哼從身側(cè)響起丑婿,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎没卸,沒想到半個(gè)月后羹奉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡约计,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年诀拭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片煤蚌。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡耕挨,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尉桩,到底是詐尸還是另有隱情筒占,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布蜘犁,位于F島的核電站翰苫,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏这橙。R本人自食惡果不足惜奏窑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屈扎。 院中可真熱鬧埃唯,春花似錦、人聲如沸鹰晨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽模蜡。三九已至漠趁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哩牍,已是汗流浹背棚潦。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工令漂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留膝昆,地道東北人丸边。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像荚孵,于是被迫代替她去往敵國和親妹窖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容