docker-02

10:自動制作docker鏡像

鏡像: 中藥

dockerfile: 配方

dockerfile常用指令

FROM  基礎鏡像
RUN   制作鏡像過程中需要的執(zhí)行命令
CMD   容器啟動的時候執(zhí)行的初始命令,容易被替換
ENTRYPOINT  容器啟動的時候執(zhí)行的初始命令譬胎,不能被替換,如果同時使用CMD和ENTRYPOINT,cmd命令將作為ENTRYPOINT命令的參數
ADD   把dockerfile當前目錄下的文件拷貝到容器中(自動解壓tar包)
COPY  把dockerfile當前目錄下的文件拷貝到容器中(不解壓tar包)
WORKDIR 指定容器的默認工作目錄
EXPOSE  鏡像要暴露的端口

根據dockerfile自動構建鏡像的思路

dockerfile書寫注意事項

1、使用dockerfile構建新的鏡像文件名必須叫dockerfile

2、一個目錄下只能有一個文件交dockerfile

a:手動制作docker鏡像宏娄,記錄歷史命令
    文件拷貝: docker cp d4ddfef481a8:/etc/hosts .   //死掉的容器一樣可以拷貝文件
b:根據歷史命令編寫dockerfile文件
c:docker build構建docker鏡像
d:測試鏡像的功能

dockerfile單服務例子1:

注意CMD的寫法,每一個空格使用 “逗號”隔開逮壁,每個關鍵字使用 或雙引號隔開

FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
RUN yum install nginx -y
CMD ["nginx","-g","daemon off;"]
構建:
[root@docker01 centos6.9_nginx]# docker image build -t centos6.9_nginx:v2 .
參數:
-t 給構建后的鏡象起一個名字

dockerfile多服務例子2:

FROM centos:6.9
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
ADD nginx.repo /etc/yum.repos.d/nginx.repo
RUN yum install nginx php-fpm php-gd php-mbstring unzip -y
ADD www.conf /etc/php-fpm.d/www.conf
ADD default.conf /etc/nginx/conf.d/default.conf
RUN mkdir /html
ADD kodexplorer4.40.zip /html/kodexplorer4.40.zip
WORKDIR /html
RUN unzip kodexplorer4.40.zip 
RUN useradd nginx 
RUN chown -R nginx:nginx .
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]

cat /init.sh
#!/bin/bash
service php-fpm start
nginx -g 'daemon off;'

dockerfile使用環(huán)境變量的例子:

FROM centos:7
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
RUN yum install nginx openssh-server initscripts -y
RUN /usr/sbin/sshd-keygen
ADD init.sh  /init.sh
ENTRYPOINT ["/bin/bash","/init.sh"]

cat  init.sh
#!/bin/bash
if [ -z $SSH_PWD ];then
    SSH_PWD=$1
fi

echo $SSH_PWD|passwd --stdin root
nginx
/usr/sbin/sshd -D
構建容器:
docker image  bulid -t centos7_ssh:v1 .
創(chuàng)建容器:
啟動方法一:docker run -it -d -p 2022:22 --env "SSH_PWD=123456" centos7_ssh:v1
啟動方法二:docker run -it -d -p 2023:22 centos7_ssh:v1 123456 

dockerfile 構建底層系統景象

[root@docker01 alpine]# ls
dockerfile  rootfs  rootfs.tar.gz
[root@docker01 alpine]# cat dockerfile 
FROM scratch 
ADD  rootfs.tar.gz /
CMD ["/bin/sh"]
[root@docker01 alpine]# docker image build  -t alpine:v1 .

11:docker鏡像的分層(復用,節(jié)省空間)

這里要注意孵坚,只有之前的鏡像發(fā)生改變了,才會提交為新的鏡像(新的層)

12:dockerfile的優(yōu)化

a: 使用體積小的鏡像alpine
b:盡可能的清理無用的緩存文件
c:修改dockerfile的時候,盡可能把修改的內容放在最后
d:使用.dockerignore忽略構建docker鏡像時卖宠,不需要的文件(.dockerignore是一個文件巍杈,把不需要的文件名寫到此文件中即可)

13:docker run --link(容器間的互聯)

docker run --link 正在運行容器的名字

 docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_bin
     
docker run --name zabbix-java-gateway -t \
      -d zabbix/zabbix-java-gateway:latest
    
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      -e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
      --link mysql-server:mysql \
      --link zabbix-java-gateway:zabbix-java-gateway \
      -p 10051:10051 \
      -d zabbix/zabbix-server-mysql:latest
      
docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="zabbix_pwd" \
      -e MYSQL_ROOT_PASSWORD="root_pwd" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -p 80:80 \
      -d zabbix/zabbix-web-nginx-mysql:latest

14:docker-compose(單機版的容器編排)

yum install docker-compose -y(需要epel源)

version: '3'

services:
   mysql-server:
     image: mysql:5.7
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: root_pwd
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
     command: --character-set-server=utf8
     
   zabbix-java-gateway:
     image: zabbix/zabbix-java-gateway:latest
     restart: always
     
   zabbix-server:
     depends_on:
       - mysql-server
     image: zabbix/zabbix-server-mysql:latest
     restart: always
     environment:
       DB_SERVER_HOST: mysql-server
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
       MYSQL_ROOT_PASSWORD: root_pwd
       ZBX_JAVAGATEWAY: zabbix-java-gateway
     ports:
       - "10051:10051"
       
   zabbix-web-nginx-mysql:
     depends_on:
       - zabbix-server
     image: zabbix/zabbix-web-nginx-mysql:latest
     ports:
       - "80:80"
     restart: always
     environment:
       DB_SERVER_HOST: mysql-server
       MYSQL_DATABASE: zabbix
       MYSQL_USER: zabbix
       MYSQL_PASSWORD: zabbix_pwd
       MYSQL_ROOT_PASSWORD: root_pwd

docker-compose up -d 啟動服務

docker-compose down 停止服務

知識點:

a、使用docker-compose創(chuàng)建容器扛伍,必須使用docker-cmopose.yml 或docker-compose.yaml為文件名筷畦,一個目錄下有且只有一個。

b刺洒、docker-compose創(chuàng)建的container自動做hosts文件解析鳖宾。

15:私有倉庫docker-registry

#啟動私有倉庫
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry registry

#鏡像地址
nginx:1.15        官方倉庫的官方鏡像
nginx/nginx:1.15  官方倉庫的用戶鏡像

daocloud.io/nginx/nginx:1.15  私有倉庫的鏡像

#上傳鏡像
docker tag alpine:3.9 10.0.0.11:5000/alpine:3.9
docker image push 10.0.0.11:5000/alpine:3.9
#第一次上傳鏡像會報錯
vim /etc/docker/daemon.json
{
  "insecure-registries": ["10.0.0.11:5000"]
}

systemctl  restart docker

docker image push 10.0.0.11:5000/alpine:3.9


#下載鏡像
docker image pull 10.0.0.11:5000/alpine:3.9

16: 企業(yè)級私有倉庫harbor(docker-compose)

#下載安裝器
https://github.com/goharbor/harbor/releases/download/v1.10.0/harbor-offline-installer-v1.10.0.tgz
#解壓
[root@docker01 opt]# tar xf harbor-offline-installer-v1.8.0.tgz 
#修改配置文件
cd  harbor
vim harbor.yml
hostname: 10.0.0.11
harbor_admin_password: 123456
#執(zhí)行安裝腳本
 ./install.sh

為harbor配置https證書

#修改harbor.yml
#配置域名
hostname: blog.oldqiang.com

#配置證書
https:
  port: 443
  certificate: /opt/certs/nginx/1_blog.oldqiang.com_bundle.crt
  private_key: /opt/certs/nginx/2_blog.oldqiang.com.key

#重新執(zhí)行安裝腳本
./install.sh

17:docker基礎網絡

四種基礎網絡類型

bridge  默認類型 NAT模式
host    host類型,使用宿主機網絡作媚,網絡性能最高
container 容器類型攘滩。使用其他容器共用網絡,k8s中使用
none    沒有網絡纸泡,上不了外網

創(chuàng)建自定義網絡

docker network create -d bridge --subnet 172.18.0.0/16 --gateway 172.18.0.1 oldqiang

18:跨宿主機容器間的通訊之macvlan

#創(chuàng)建網絡
docker network create -d macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1

#啟動容器
docker run -it --network macvlan_1 --ip 10.0.0.105 alpine:3.9 

19:跨宿主機容器間的通訊之overlay

docker03上: consul存儲ip地址的分配
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap


docker01漂问、02上:
vim  /etc/docker/daemon.json
{
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.11:2376"
}

vim /usr/lib/systemd/system/docker.service
systemctl daemon-reload 
systemctl restart docker




2)創(chuàng)建overlay網絡
docker network create -d overlay --subnet 172.16.2.0/24 --gateway 172.16.2.254  ol1

3)啟動容器測試

docker run -it --network ol1 --name oldboy01  alpine:3.9  /bin/sh
每個容器有兩塊網卡,eth0實現容器間的通訊,eth1實現容器訪問外網

20:docker容器的監(jiān)控

#客戶端節(jié)點
#啟動node-exporter
docker run -d   -p 9100:9100   -v "/:/host:ro,rslave"   --name=node_exporter   quay.io/prometheus/node-exporter   --path.rootfs /host

#啟動cadvisor
docker run --volume=/:/rootfs:ro  --volume=/var/run:/var/run:rw --volume=/sys:/sys:ro --volume=/var/lib/docker/:/var/lib/docker:ro  --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest

#prometheus節(jié)點
安裝prometheus和grafana
 tar xf prometheus-2.12.0.linux-amd64.tar.gz 

 cd prometheus-2.12.0.linux-amd64/
vim prometheus.yml 
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
    - targets: ['localhost:9090']
  - job_name: 'cadvisor'
    static_configs:
    - targets: ['10.0.0.11:8080','10.0.0.12:8080']
  - job_name: 'node_exporter'
    static_configs:
    - targets: ['10.0.0.11:9100','10.0.0.12:9100']

./prometheus --config.file="prometheus.yml" 
#安裝grafana
yum localinstall grafana-6.3.3-1.x86_64.rpm -y
systemctl start grafana-server.service 
systemctl enable grafana-server.service
#訪問grafana  http://IP:3000,默認賬號admin:admin
新建數據源--導入dashboard模板
?著作權歸作者所有,轉載或內容合作請聯系作者
禁止轉載女揭,如需轉載請通過簡信或評論聯系作者蚤假。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市吧兔,隨后出現的幾起案子磷仰,更是在濱河造成了極大的恐慌,老刑警劉巖境蔼,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件灶平,死亡現場離奇詭異,居然都是意外死亡箍土,警方通過查閱死者的電腦和手機逢享,發(fā)現死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吴藻,“玉大人瞒爬,你說我怎么就攤上這事」当ぃ” “怎么了侧但?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長航罗。 經常有香客問我禀横,道長,這世上最難降的妖魔是什么伤哺? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任燕侠,我火速辦了婚禮者祖,結果婚禮上,老公的妹妹穿的比我還像新娘绢彤。我一直安慰自己七问,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布茫舶。 她就那樣靜靜地躺著械巡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪饶氏。 梳的紋絲不亂的頭發(fā)上讥耗,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音疹启,去河邊找鬼古程。 笑死,一個胖子當著我的面吹牛喊崖,可吹牛的內容都是我干的挣磨。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼荤懂,長吁一口氣:“原來是場噩夢啊……” “哼茁裙!你這毒婦竟也來了?” 一聲冷哼從身側響起节仿,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤晤锥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后廊宪,有當地人在樹林里發(fā)現了一具尸體矾瘾,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年箭启,在試婚紗的時候發(fā)現自己被綠了霜威。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡册烈,死狀恐怖,靈堂內的尸體忽然破棺而出婿禽,到底是詐尸還是另有隱情赏僧,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布扭倾,位于F島的核電站淀零,受9級特大地震影響,放射性物質發(fā)生泄漏膛壹。R本人自食惡果不足惜驾中,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一唉堪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧肩民,春花似錦唠亚、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至工窍,卻和暖如春割卖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背患雏。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工鹏溯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人淹仑。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓丙挽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親攻人。 傳聞我的和親對象是個殘疾皇子取试,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容