docker

[toc]

一框杜、什么是容器?

容器就是在隔離的環(huán)境運(yùn)行的一個(gè)進(jìn)程袖肥,如果進(jìn)程停止咪辱,容器就會(huì)銷毀

隔離的環(huán)境擁有自己的系統(tǒng)文件,ip地址椎组,主機(jī)名等油狂,linux,系統(tǒng)文件

程序:代碼寸癌,命令
進(jìn)程:正在運(yùn)行的程序

二专筷、容器和虛擬化的區(qū)別

kvm虛擬化:

需要硬件的支持,需要模擬硬件蒸苇,可以運(yùn)行不同的操作系統(tǒng)磷蛹,啟動(dòng)時(shí)間分鐘級(jí)(開機(jī)啟動(dòng)流程)

容器:

共用宿主機(jī)內(nèi)核,容器的第一個(gè)進(jìn)程直接運(yùn)行服務(wù)溪烤,輕量級(jí)味咳,損耗少,啟動(dòng)快檬嘀,性能高

  • linux開機(jī)啟動(dòng)流程
bios開機(jī)硬件自檢
根據(jù)bios設(shè)置的優(yōu)先啟動(dòng)項(xiàng)boot  網(wǎng)卡 硬盤 u盤 光驅(qū)
讀取mbr引導(dǎo) 2T  UEFI(gpt分區(qū))    mbr硬盤分區(qū)信息槽驶,內(nèi)核加載路徑
加載內(nèi)核
啟動(dòng)第一個(gè)進(jìn)程/sbin/init  systemd
系統(tǒng)初始化完成
運(yùn)行服務(wù)
  • 容器啟動(dòng)流程
共用宿主機(jī)內(nèi)核:
第一個(gè)進(jìn)程,服務(wù)nginx鸳兽,httpd掂铐,mysql
  • 虛擬化
需要硬件的支持,需要模擬硬件揍异,需要走開機(jī)流程全陨,可以運(yùn)行不同的操作系統(tǒng)
  • 總結(jié)
(1)與宿主機(jī)使用同一個(gè)內(nèi)核,性能損耗休锴亍烤镐;
(2)不需要指令級(jí)模擬蛋济;
(3)容器可以在CPU核心的本地運(yùn)行指令棍鳖,不需要任何專門的解釋機(jī)制;
(4)避免了準(zhǔn)虛擬化和系統(tǒng)調(diào)用替換中的復(fù)雜性碗旅;
(5)輕量級(jí)隔離渡处,在隔離的同時(shí)還提供共享機(jī)制,以實(shí)現(xiàn)容器與宿主機(jī)的資源共享祟辟。

三医瘫、容器技術(shù)的發(fā)展過程

1):chroot技術(shù),新建一個(gè)子系統(tǒng)(擁有自己完整的系統(tǒng)文件)
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
chang root

作業(yè)1:使用chroot監(jiān)獄限制SSH用戶訪問指定目錄和使用指定命令
https://linux.cn/article-8313-1.html
ls

2):linux容器(lxc)  linux container(namespaces 命名空間 隔離環(huán)境 及cgroups 資源限制)
cgroups  限制一個(gè)進(jìn)程能夠使用的資源旧困。cpu醇份,內(nèi)存稼锅,硬盤io
kvm虛擬機(jī):資源限制(1c 1G 20G)
  • lxc容器部署(需要使用epel源,過時(shí)技術(shù))
#安裝epel源
yum install epel-release -y

#編譯epel源配置文件
vi  /etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7

[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 - $basearch - Debug
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/$basearch/debug
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

[epel-source]
name=Extra Packages for Enterprise Linux 7 - $basearch - Source
baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel/7/SRPMS
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1

##安裝lxc
yum install lxc-* -y
yum install libcgroup* -y
yum install bridge-utils.x86_64 -y


##橋接網(wǎng)卡
[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 
echo 'TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
BRIDGE=virbr0' >/etc/sysconfig/network-scripts/ifcfg-eth0


[root@controller ~]# cat /etc/sysconfig/network-scripts/ifcfg-virbr0 
echo 'TYPE=Bridge
BOOTPROTO=static
NAME=virbr0
DEVICE=virbr0
ONBOOT=yes
IPADDR=10.0.0.11
NETMASK=255.255.255.0
GATEWAY=10.0.0.254
DNS1=180.76.76.76' >/etc/sysconfig/network-scripts/ifcfg-virbr0

##啟動(dòng)cgroup
systemctl start cgconfig.service

##啟動(dòng)lxc
systemctl start lxc.service

##創(chuàng)建lxc容器
方法1:
lxc-create -t download -n centos6 -- --server mirrors.tuna.tsinghua.edu.cn/lxc-images -d centos -r 6 -a amd64
方法2:
lxc-create -t centos -n test

##為lxc容器設(shè)置root密碼:
[root@controller ~]# chroot /var/lib/lxc/test/rootfs passwd
Changing password for user root.
New password: 
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password: 
passwd: all authentication tokens updated successfully.

##為容器指定ip和網(wǎng)關(guān)
vi /var/lib/lxc/centos7/config
lxc.network.name = eth0
lxc.network.ipv4 = 10.0.0.111/24
lxc.network.ipv4.gateway = 10.0.0.254

##啟動(dòng)容器
lxc-start -n centos7

四、docker介紹

Docker是通過進(jìn)程虛擬化技術(shù)(namespaces及cgroups僚纷、cpu矩距、內(nèi)存、磁盤io等)來提供容器的資源隔離與安全保障等怖竭。
由于Docker通過操作系統(tǒng)層的虛擬化實(shí)現(xiàn)隔離锥债,所以Docker容器在運(yùn)行時(shí),不需要類似虛擬機(jī)(VM)額外的操作系統(tǒng)開銷痊臭,提高資源利用率哮肚。
namespace  資源隔離
cgroups    進(jìn)程的資源限制
kvm        虛擬磁盤文件,資源隔離
kvm        資源限制广匙,--cpus --memory


docker 初期把lxc二次開發(fā)允趟,libcontainer、top艇潭、htop

docker的主要目標(biāo)是"Build,Ship and Run any App,Angwhere",構(gòu)建拼窥,運(yùn)輸,處處運(yùn)行
部署服務(wù)蹋凝,環(huán)境問題
一次構(gòu)建鲁纠,處處運(yùn)行
docker是一種軟件的打包技術(shù)


構(gòu)建:做一個(gè)docker鏡像
運(yùn)輸:docker pull
運(yùn)行:啟動(dòng)一個(gè)容器
每一個(gè)容器,他都有自己的系統(tǒng)文件rootfs.

kvm解決了硬件和操作系統(tǒng)之間的依賴
kvm獨(dú)立的虛擬磁盤鳍寂,xml配置文件

docker解決了軟件和操作系統(tǒng)環(huán)境之間的依賴改含,能夠讓獨(dú)立服務(wù)或應(yīng)用程序在不同的環(huán)境中,得到相同的運(yùn)行結(jié)果迄汛。
docker鏡像有自己的文件系統(tǒng)捍壤。

docker容器是一種輕量級(jí)、可移植鞍爱、自包含的軟件打包技術(shù)鹃觉,使應(yīng)用程序可以在幾乎任何地方以相同的方式運(yùn)行。開發(fā)人員在自己筆記本上創(chuàng)建并測試好的容器睹逃,無需任何修改就能夠在生產(chǎn)系統(tǒng)的虛擬機(jī)盗扇、物理服務(wù)器或公有云主機(jī)上運(yùn)行。


docker容器環(huán)境
centos7.4   2G   10.0.0.11  docker01    host解析
centos7.4   2G   10.0.0.12  docker02    host解析

五沉填、docker的安裝

10.0.0.11:修改主機(jī)名和host解析
rm -fr /etc/yum.repos.d/local.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#g' /etc/yum.repos.d/docker-ce.repo
yum install docker-ce -y
systemctl start  docker.service 
systemctl enable docker.service 

六疗隶、docker的主要組成部分

docker是傳統(tǒng)的CS架構(gòu)分為docker client和docker server,向mysql一樣

命令:docker version
[root@docker ~]# docker version 
Client:
 Version:           18.09.8
 API version:       1.39
 Go version:        go1.10.8
 Git commit:        0dd43dd87f
 Built:             Wed Jul 17 17:40:31 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.8
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.8
  Git commit:       0dd43dd
  Built:            Wed Jul 17 17:10:42 2019
  OS/Arch:          linux/amd64
  Experimental:     false


docker系統(tǒng)命令:
docker system info(做監(jiān)控用)
dockeer info      (簡寫)     

- docker主要組件有:鏡像、容器翼闹、倉庫, 網(wǎng)絡(luò)斑鼻,存儲(chǔ)

啟動(dòng)容器必須需要一個(gè)鏡像,倉庫中只存儲(chǔ)鏡像
容器---鏡像---倉庫


docker初次體驗(yàn):
安裝Nginx步驟:
官網(wǎng)下載Nginx源碼包wget  
tar 
創(chuàng)建Nginx用戶 

編譯安裝
./config....
修改配置文件猎荠,
啟動(dòng)

七坚弱、啟動(dòng)第一個(gè)容器

##配置docker鏡像加速
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   

docker run -d -p 80:80 nginx
run(創(chuàng)建并運(yùn)行一個(gè)容器)
-d 放在后臺(tái)
-p 端口映射
nginx docker鏡像的名字


本地安裝(做實(shí)驗(yàn)用)
wget http://192.168.12.201/docker_nginx1.15.tar.gz
docker image load -i docker_nginx1.15.tar.gz
docker run -d -p 80:80 nginx

八蜀备、docker的鏡像管理

  • 鏡像相關(guān)
查看所有的命令
[root@docker ~]# docker image 
  build       Build an image from a Dockerfile
  history     Show the history of an image
  import      Import the contents from a tarball to create a filesystem image
  inspect     Display detailed information on one or more images
  load        Load an image from a tar archive or STDIN
  ls          List images
  prune       Remove unused images
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rm          Remove one or more images
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  • 搜索鏡像
docker search [服務(wù)名稱] 

例子:
[root@docker ~]# docker search centos

選鏡像的建議:
1,優(yōu)先考慮官方
2荒叶,stars數(shù)量多
  • 官方鏡像創(chuàng)庫地址

https://hub.docker.com/

  • 下載鏡像
docker pull(push)
鏡像加速器:阿里云加速器琼掠,daocloud加速器,中科大加速器停撞,Docker
中國官方鏡像加速:https://registry.docker-cn.com

官方pull      docker pull centos:6.8(沒有指定版本瓷蛙,默認(rèn)會(huì)下載最新版)
私有倉庫pull    docker pull daocloud.io/huangzhichong/alpine-cn:latest 

##配置docker鏡像加速
cat >/etc/docker/daemon.json <<END
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}   
END
  • 導(dǎo)入導(dǎo)出查看
查看鏡像列表
    docker image  ls
導(dǎo)出鏡像
    docker save  例子:docker save nginx:latest >/opt/docker-nginx.tar.gz
                       docker image save -o /opt/docker-nginx1.tar.gz  nginx:latest
導(dǎo)入鏡像
    docker load  例子:docker load </opt/docker_centos6.9.tar.gz
                       docker image load  -i /opt/docker_centos6.9.tar.gz
刪除鏡像
    docker rmi   例子:docker rmi centos:6.9
                       docker image rm centos:6.9
將多個(gè)鏡像導(dǎo)出
    docker save `docker image ls |tail -4 |awk  '{print $1":"$2}'` >/opt/docker_k8s.tar.gz
  • 阿里云docker鏡像網(wǎng)站

https://cr.console.aliyun.com/cn-hangzhou/instances/repositories

九、docker的容器管理

  • 容器有關(guān)的操作
[root@docker ~]# docker container  
  attach      Attach local standard input, output, and error streams to a running container
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes to files or directories on a container's filesystem
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  inspect     Display detailed information on one or more containers
  kill        Kill one or more running containers
  logs        Fetch the logs of a container
  ls          List containers
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  prune       Remove all stopped containers
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  run         Run a command in a new container
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  wait        Block until one or more containers stop, then print their exit codes
  • 詳細(xì)操作
創(chuàng)建并運(yùn)行一個(gè)容器
docker run -d -p 80:80 nginx:latest  
run(創(chuàng)建并運(yùn)行一個(gè)容器)
-d 放在后臺(tái)
-p 端口映射
-v  源地址(宿主機(jī)):目標(biāo)地址(容器)

進(jìn)入到centos容器里面
docker run -it --name centos6 centos:6.9 /bin/bash
-it   分配交互式的終端
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令

啟動(dòng)容器***
    docker run image_name
    docker run -it image_name CMD
停止容器
    docker stop CONTAINER_ID
殺死容器
    docker kill container_name
查看容器列表
    docker ps
    docker ps –a 
進(jìn)入容器(目的戈毒,調(diào)試艰猬,排錯(cuò))
    docker container exec -it a487027c6d07 /bin/bash  (/bin/sh)
刪除容器
    docker rm
批量刪除容器
    docker rm -f `docker ps -a -q`
    
總結(jié):docker容器內(nèi)的第一個(gè)進(jìn)程(初始命令)必須一直處于前臺(tái)運(yùn)行的狀態(tài)(必須夯住)埋市,否則這個(gè)容器冠桃,就會(huì)處于退出狀態(tài)!
業(yè)務(wù)在容器中運(yùn)行:夯住道宅,啟動(dòng)服務(wù)

十食听、docker容器的網(wǎng)絡(luò)訪問(端口映射)

docker0:172.17.0.1   jumpserver:172.17.0.2   nginx:172.17.0.3

指定映射(docker 會(huì)自動(dòng)添加一條iptables規(guī)則來實(shí)現(xiàn)端口映射)
    -p hostPort:containerPort
    例子:docker run -d -p 80:80 nginx:latest 
    
    -p ip:hostPort:containerPort  多個(gè)容器都想使用80端口
    例子:ifconfig eth0:1 10.0.0.101/24 up
          docker run -d -p 10.0.0.11:80:80 nginx:latest 
          docker run -d -p 10.0.0.101:80:80 nginx:latest  
    
    -p ip::containerPort(隨機(jī)端口)
    例子:docker run -d -p 10.0.0.11::80 nginx:latest
    
    -p hostPort:containerPort:udp
    -p  10.0.0.100::53:udp   使用宿主機(jī)的10.0.0.100這個(gè)ip地址的隨機(jī)端口的udp協(xié)議映射容器的udp53端口
    -p 81:80 –p 443:443 可以指定多個(gè)-p

隨機(jī)映射
    docker run -d -P (隨機(jī)端口)

通過iptables來實(shí)現(xiàn)的端口映射

十一、docker的數(shù)據(jù)卷管理

第一種方法
docker container cp . 19bebe1d49ff:/usr/share/nginx/html
第二種方法(-v參數(shù))
docker run -d -p 81:80 -v /srv:/usr/share/nginx/html nginx:latest
第三種方法(卷)
docker run -d -p 82:80 -v test:/usr/share/nginx/html nginx:latest
查看(卷)
docker volume inspect test

持久化
數(shù)據(jù)卷(文件或目錄)
    -v 卷名:/data
    -v src(宿主機(jī)的目錄):dst(容器的目錄)
數(shù)據(jù)卷容器
    --volumes-from(跟某一個(gè)已經(jīng)存在的容器掛載相同的卷)
    
基于nginx啟動(dòng)一個(gè)容器污茵,監(jiān)聽80和81樱报,訪問80,出現(xiàn)nginx默認(rèn)歡迎首頁泞当,訪問81迹蛤,出現(xiàn)小鳥。
cat >/opt/xiaoniao.conf <<EOF
server {
    listen       81;
    server_name  localhost;
    root         /opt;
    index  index.html index.htm;
    location / {
    }
}
EOF
docker run -d -p 80:80 -p 81:81 -v /opt/xiaoniao.conf:/etc/nginx/conf.d/xiaoniao.conf -v /srv:/opt nginx:latest 
docker ps -a -l

基于nginx多端口的多站點(diǎn)襟士。
-p 80:80 -p 81:81 -v  xxx:xxx -v  xxx:xxxx

快捷鍵
ctrl +p 再按ctrl +q               臨時(shí)退出
docker attach e44ab4833867        回到容器里面

十二盗飒、手動(dòng)將容器保存為鏡像

  • 制作一個(gè)ssh服務(wù)單服務(wù)鏡像v1
連接centos6系統(tǒng)tty終端陋桂,并將1022端口映射到22端口
[root@docker ~]# docker run -it -p 1022:22 centos:6.9

centos6 Base源
[root@21ee1761f602 /]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo

報(bào)錯(cuò)
WARNING: IPv4 forwarding is disabled. Networking will not work.
解決方案
[root@docker ~]# sysctl net.ipv4.ip_forward=1


下載ssh服務(wù)
[root@21ee1761f602 /]# yum install openssh-server -y

啟動(dòng)服務(wù)
[root@docker ~]# service sshd start

為root設(shè)置密碼,并遠(yuǎn)程連接
[root@21ee1761f602 /]# echo  '123456'|passwd --stdin root
[root@docker ~]# ssh root@10.0.0.11 -p 1022

提交成鏡像
[root@docker ~]# docker commit 21ee1761f602 centos6.9_ssh:v1

查看結(jié)果
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
centos6.9_ssh       v1                  120835cc897b        About a minute ago   309MB

測試,并連接
[root@docker ~]# docker run -d -p 3022:22 centos6.9_ssh:v1  /usr/sbin/sshd -D
[root@docker ~]# ssh root@10.0.0.11 -p 3022
[C:\~]$ ssh root@10.0.0.11 3022

總結(jié)步驟:
1嗜历、啟動(dòng)一個(gè)基礎(chǔ)的容器(基于xxx操作系統(tǒng))
2宣渗、把容器提交為鏡像
3秸脱、測試鏡像功能(即啟動(dòng)服務(wù)部蛇,又夯住的命令)
  • 制作雙服務(wù)鏡像摊唇,sshd + nginx v1版本
登錄到centos 6.9_ssh映射端口
[root@docker ~]# docker run -it -p 1023:22 -p 82:80 centos6.9_ssh:v1 /bin/bash

配置repo源
[root@dc613a94f715 /]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

安裝nginx
[root@dc613a94f715 /]# yum install nginx -y

腳本1
[root@dc613a94f715 /]# cat >/init.sh<<EOF
#方法一
#!/bin/bash
#service sshd restar
#nginx -g 'daemon off;'
#方法二
service nginx start
/usr/sbin/sshd -D
EOF

腳本2(建議用)
[root@dc613a94f715 /]# cat >/init.sh<<EOF
#!/bin/bash
service nginx start
service sshd start
tail -f /etc/hosts
EOF
注釋:以上腳本選一種

提交成鏡像
[root@docker ~]# docker commit dc613a94f715 centos6.9_ssh_nginx:v1

檢查
[root@docker ~]# docker images 
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
centos6.9_ssh_nginx   v1                  33510a033b82        2 minutes ago       506MB

測試,并連接
[root@docker ~]# docker run -d -p 83:80 -p 1024:22 centos6.9_ssh_nginx:v1 /bin/bash /init.sh
[root@docker ~]# ssh root@10.0.0.11 -p 1024
[root@docker ~]# curl -I 10.0.0.11:83  2>/dev/null|head  -3

[root@docker ~]# docker logs dc613a94f715    查看狀態(tài)

十三涯鲁、安裝php項(xiàng)目kodexplorer

  • centos 7環(huán)境搭建
環(huán)境:
nginx+php

配置源
echo  '192.168.12.201  mirrors.aliyun.com' >>/etc/hosts
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安裝nginx php-fpm
yum install nginx php-fpm -y

備份nginx配置文件
grep -Ev '^$|#' /etc/nginx/nginx.conf.default  >/etc/nginx/nginx.conf
>/etc/nginx/nginx.conf

修改配置文件
vim /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        root /code;
        location / {
        }
        index index.php index.html index.htm;
        location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
        include        fastcgi_params;
       }
    }
}

檢查配置文件
nginx -t

創(chuàng)建站點(diǎn)目錄 
mkdir /code

下載可道云
wget -P /code http://192.168.12.201/docker_image/kodexplorer4.40.zip
unzip -d /code /code/kodexplorer4.40.zip 

授權(quán)用戶
chown -R nginx:nginx /code

修改php啟動(dòng)用戶
cp /etc/php-fpm.d/www.conf{,.bak}
sed -i '/^user/c user = nginx' /etc/php-fpm.d/www.conf 
sed -i '/^group/c group = nginx' /etc/php-fpm.d/www.conf

安裝php模塊
yum install php-gd php-mbstring.x86_64 -y

啟動(dòng)服務(wù)
systemctl start php-fpm.service  nginx.service 

windows瀏覽器訪問
10.0.0.100

[圖片上傳失敗...(image-4a32d3-1564622978836)]

  • docker 環(huán)境搭建
進(jìn)入容器
[root@docker ~]# docker run -it -p 1088:22 -p 88:80 -p 9088:9000 centos6.9_ssh:v1 /bin/bash

配置源
[root@dc613a94f715 /]# echo  '192.168.12.201  mirrors.aliyun.com' >>/etc/hosts
[root@dc613a94f715 /]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
[root@dc613a94f715 /]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

安裝nginx php-fpm
[root@dc613a94f715 /]# yum install nginx php-fpm -y

備份nginx配置文件
[root@dc613a94f715 /]# grep -Ev '^$|#' /etc/nginx/nginx.conf.default  >/etc/nginx/nginx.conf
[root@dc613a94f715 /]# >/etc/nginx/nginx.conf

修改配置文件
[root@dc613a94f715 /]# vim /etc/nginx/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        root /code;
        location / {
        }
        index index.php index.html index.htm;
        location ~ \.php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /code$fastcgi_script_name;
        include        fastcgi_params;
       }
    }
}
EOF

檢查配置文件
[root@dc613a94f715 /]# nginx -t

創(chuàng)建站點(diǎn)目錄 
[root@dc613a94f715 /]# mkdir /code

將有道云傳到docker容器里面
[root@docker ~]# docker container \cp -a /code/* dc613a94f715:/code

授權(quán)用戶
[root@dc613a94f715 /]# chown -R nginx:nginx /code

修改php啟動(dòng)用戶
[root@dc613a94f715 /]# cp /etc/php-fpm.d/www.conf{,.bak}
[root@dc613a94f715 /]# sed -i '/^user/c user = nginx' /etc/php-fpm.d/www.conf 
[root@dc613a94f715 /]# sed -i '/^group/c group = nginx' /etc/php-fpm.d/www.conf

安裝php模塊
[root@dc613a94f715 /]# yum install php-gd php-mbstring.x86_64 -y

腳本
[root@dc613a94f715 /]# cat >/init.sh<<EOF
#!/bin/bash
service sshd start
service nginx start
service php-fpm start
tail -f /etc/hosts
EOF

提交成鏡像
[root@docker ~]# docker commit dc613a94f715 centos6.9_kedaoyun:v1

測試
[root@docker ~]# docker run -d -p 2223:22 -p 89:80 -p 9998:9000 centos6.9_kedaoyun:v1 /bin/bash /init.sh

[圖片上傳失敗...(image-bfa8cd-1564622978836)]

十四旭寿、dockerfile自動(dòng)構(gòu)建docker鏡像

類似ansible劇本崇败,大小幾kb
手動(dòng)做鏡像:大小幾百M(fèi)+

dockerfile 支持自定義容器的初始命令


dockerfile主要組成部分:
    基礎(chǔ)鏡像信息       FROM  centos:6.9
    制作鏡像操作指令   RUN yum install openssh-server -y
    容器啟動(dòng)時(shí)執(zhí)行指令 CMD ["/bin/bash"]

dockerfile常用指令:
    FROM 這個(gè)鏡像的媽媽是誰后室?(指定基礎(chǔ)鏡像)
    MAINTAINER 告訴別人岸霹,誰負(fù)責(zé)養(yǎng)它贡避?(指定維護(hù)者信息刮吧,可以沒有)
    LABLE      描述,標(biāo)簽
    
    RUN 你想讓它干啥(在命令前面加上RUN即可)
    ADD 給它點(diǎn)創(chuàng)業(yè)資金(會(huì)自動(dòng)解壓tar)  制作docker基礎(chǔ)的系統(tǒng)鏡像
    WORKDIR 我是cd,今天剛化了妝(設(shè)置當(dāng)前工作目錄)
    VOLUME 給它一個(gè)存放行李的地方(設(shè)置卷琉历,掛載主機(jī)目錄)
    EXPOSE 它要打開的門是啥(指定對(duì)外的端口)(-P 隨機(jī)端口)
    CMD 奔跑吧旗笔,兄弟S瘛(指定容器啟動(dòng)后的要干的事情)(容易被替換)
    
dockerfile其他指令: 
    COPY 復(fù)制文件(不會(huì)解壓)rootfs.tar.gz
    ENV  環(huán)境變量
    ENTRYPOINT  容器啟動(dòng)后執(zhí)行的命令(無法被替換撮弧,啟容器的時(shí)候指定的命令贿衍,會(huì)被當(dāng)成參數(shù))

參考其他的dockerfile
官方dockerfile或者時(shí)速云鏡像廣場

dockerfile 優(yōu)化
1救恨、使用.dockerignore 減少ADD copy 上傳文件
2肠槽、盡可能合并,清理無用文件(yum緩存桩盲,源碼包)
3赌结、修改dockerfile姑曙,把變化的內(nèi)容盡可能放在dockerfile結(jié)尾
  • dockerfile 網(wǎng)站

https://github.com/CentOS/CentOS-Dockerfiles

  • 自動(dòng)構(gòu)建sshd服務(wù)
mkdir -p /data/dockerfile/centos6.9_ssh

vim  /data/dockerfile/centos6.9_ssh/dockerfile
FROM centos:6.9
RUN echo  '192.168.12.201  mirrors.aliyun.com' >>/etc/hosts
RUN curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
RUN yum install openssh-server -y
RUN /etc/init.d/sshd restart
RUN echo 123456|passwd --stdin root
CMD ["/usr/sbin/sshd","-D"]

docker build --network=host -t centos6.9_ssh:v3 /data/dockerfile/centos6.9_ssh/

測試
docker run -d -p 2022:22 centos6.9_ssh:v3
ssh root@10.0.0.11 -p 2022
  • 自動(dòng)構(gòu)建sshd+nginx服務(wù)
cp -a /data/dockerfile/centos6.9_ssh /data/dockerfile/centos6.9_ssh_nginx

vim  /data/dockerfile/centos6.9_ssh_nginx/dockerfile
FROM centos:6.9
RUN echo  '192.168.12.201  mirrors.aliyun.com' >>/etc/hosts
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 openssh-server nginx -y
RUN /etc/init.d/sshd start
RUN echo 123456|passwd --stdin root
ADD init.sh /init.sh
CMD ["/bin/bash","/init.sh"]

cd /data/dockerfile/centos6.9_ssh_nginx/

cat >init.sh<<EOF
#!/bin/bash
service nginx restart
service sshd  restart
tail -f /etc/hosts
EOF

docker build --network=host -t centos6.9_ssh_nginx:v4 /data/dockerfile/centos6.9_ssh_nginx/

測試
docker run -d -p 3022:22 -p 86:80 centos6.9_ssh_nginx:v4
ssh root@10.0.0.11 -p  3022
curl -I 10.0.0.11:86 2>/dev/null|head -3 
  • 自動(dòng)構(gòu)建可道云項(xiàng)目
mkdir -p /dockerfile/kd

vim /dockerfile/kd/dockerfile
FROM centos:6.9
RUN echo  '192.168.12.201  mirrors.aliyun.com' >>/etc/hosts
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 php-fpm php-mbstring php-gd nginx -y
ADD nginx.conf /etc/nginx/
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 mkdir /code
ADD kd.tar.gz /code
RUN chown -R nginx:nginx /code
EXPOSE 81
ADD init.sh /code/init.sh
ENTRYPOINT ["/bin/bash","/code/init.sh"]

cd /dockerfile/kd/

cat >init.sh<<EOF
#!/bin/bash
service nginx  restart
service php-fpm  restart
tail -f /etc/hosts
EOF

制作成鏡像
docker build --network=host -t centos6.9_kd:v1 .

測試
docker run -d -p 88:80 centos6.9_kd:v1

瀏覽器訪問
10.0.0.11:88

十五、docker鏡像的分層(kvm 鏈接克隆宴合,寫時(shí)復(fù)制的特性)

  • docker實(shí)現(xiàn)zabbix互聯(lián)
鏡像分層的好處:復(fù)用,節(jié)省磁盤空間卦洽,相同的內(nèi)容只需加載一份到內(nèi)存阀蒂。
修改dockerfile之后弟蚀,再次構(gòu)建速度快


容器間的互聯(lián)(--link 是單方向的R宥ぁ4氛ⅰI咀场)
    docker run -d -p 80:80 nginx
    docker run -it --link quirky_brown:web01 qstack/centos-ssh /bin/bash
    ping web01  
    
lb  --->    nginx  172.17.0.4 --> db01   172.17.0.3
                              --> nfs01  172.17.0.2

上傳軟件包
rz -E 

批量導(dǎo)入到docker容器里面
for n in `ls *.gz`;do docker load -i $n;done

使用docker運(yùn)行zabbix-server(命令行執(zhí)行)
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

windows 訪問測試
10.0.0.11
用戶:Admin
密碼:zabbix


監(jiān)控100主機(jī)(在100主機(jī)安裝)
wget http://192.168.12.201/docker_image/zabbix-agent-3.2.0-1.el7.x86_64.rpm
rpm -Uvh zabbix-agent-3.2.0-1.el7.x86_64.rpm

修改配置文件里面server標(biāo)簽
vim /etc/zabbix/zabbix_agentd.conf


監(jiān)控報(bào)警:微信報(bào)警税灌,alpine      
yum 安裝zabbix好使

[圖片上傳失敗...(image-91c278-1564622978836)]

十六垄琐、docker registry(私有倉庫)

  • 私有倉庫
wget http://192.168.12.201/docker_image/registry.tar.gz
docker load -i registry.tar.gz
普通的registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry:latest
給鏡像打標(biāo)簽
docker tag alpine:latest 10.0.0.11:5000/alpone:latest
將鏡像上傳到私有倉庫里面
docker push  10.0.0.11:5000/alpone:latest


如果遇到報(bào)錯(cuò):
The push refers to repository [10.0.0.11:5000/centos6.9_ssh]
Get https://10.0.0.11:5000/v2/: http: server gave HTTP response to HTTPS client

解決方法:
vim  /etc/docker/daemon.json
{
  "insecure-registries": ["10.0.0.11:5000"]
}
systemctl restart docker
=================================================================================

刪除鏡像
1)進(jìn)入docker registry的容器中
docker exec -it registry /bin/sh
2) 刪除repo
rm -fr /var/lib/registry/docker/registry/v2/repositories/nginx
3) 清楚掉blob
registry garbage-collect /etc/docker/registry/config.yml
=================================================================================

帶認(rèn)證的registry
yum install httpd-tools -y
mkdir /opt/registry-var/auth/ -p
htpasswd -Bbn oldboy 123456 >> /opt/registry-var/auth/htpasswd
docker run -d -p 5000:5000 -v /opt/registry-var/auth/:/auth/ -v /opt/myregistry:/var/lib/registry -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd registry

提示:上傳下載鏡像都需要登陸哦

docker login 10.0.0.11:5000
oldboy
123456

docker logout 10.0.0.11:5000登出
  • 參考文檔

https://www.qstack.com.cn/archives/350.html

十七、docker-compose(單機(jī)版的容器編排工具)

  • 官方文檔

https://docs.docker.com/compose/compose-file/

  • docker-compose實(shí)現(xiàn)wordpress項(xiàng)目
yum install -y docker-compose(需要epel源)


##詳細(xì)指令
http://www.reibang.com/p/2217cfed29d7


[root@docker /data]# mkdir /data/docker-compose/wordpress -p
[root@docker /data]# vim /data/docker-compose/wordpress/docker-compose.yaml
version: '3'

services:
   db:
     image: mysql:5.7
     volumes:
       - db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - web_data:/var/www/html
     ports:
       - "80:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
    web_data:


#先進(jìn)入目錄才能啟動(dòng)
cd /data/docker-compose/wordpress
#啟動(dòng)
docker-compose up
#后臺(tái)啟動(dòng)
docker-compose up -d
#停止(一般不用翻擒,會(huì)移除鏡像)
docker-compose down -d

#建議用
docker-compose start
docker-compose stop
docker-compose restart

[圖片上傳失敗...(image-47d96-1564622978836)]

  • docker-compose實(shí)現(xiàn)zabbix項(xiàng)目
[root@docker /data]# mkdir /data/docker-compose/zabbix -p
[root@docker /data]# vim /data/docker-compose/zabbix/docker-compose.yaml
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
     ports:
       - "10051:10051"
     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
   zabbix-web:
     depends_on:
       - mysql-server
       - 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

#啟動(dòng)
cd /data/docker-compose/zabbix
docker-compose up -d

指定名字啟動(dòng)
docker-compose -f docker-compose.yaml  up -d

[圖片上傳失敗...(image-deb92e-1564622978836)]

十八、重啟docker服務(wù)巩趁,容器全部退出的解決辦法

方法一:docker run  --restart=always

方法二:"live-restore": true
docker server配置文件/etc/docker/daemon.json參考
{
 "registry-mirrors": ["http://b7a9017d.m.daocloud.io"],
 "insecure-registries":["10.0.0.11:5000"],
 "live-restore": true
}

十九议慰、Docker Machine安裝docker服務(wù)

Docker Machine 二進(jìn)制  10.0.0.11
10.0.0.12 免密碼登陸  從docker的官網(wǎng)下載二進(jìn)制的包别凹,去安裝docker
10.0.0.13 免密碼登陸

ansible:
shell

二十洽糟、Docker網(wǎng)絡(luò)類型

None:不為容器配置任何網(wǎng)絡(luò)功能坤溃,                      --netwoek=none
Container:與另一個(gè)運(yùn)行中的容器共享Network Namespace薪介,--netwoek container:容器id(K8S)
Host:與宿主機(jī)共享Network Namespace昭灵,                 --network=host
Bridge:Docker設(shè)計(jì)的NAT網(wǎng)絡(luò)模型                       --network=Bridge

查看:
docker inspect 8193487ce52f |grep -i network

用法:
docker run  --network=none -it centos:6.9   /bin/bash 
docker run --network container:8193487ce52f  -it centos:6.9  /bin/bash

二十一烂完、Docker跨主機(jī)容器之間的通信macvlan

默認(rèn)一個(gè)物理網(wǎng)卡,只有一個(gè)物理地址祝旷,虛擬多個(gè)mac地址

##創(chuàng)建macvlan網(wǎng)絡(luò)
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
##設(shè)置eth0的網(wǎng)卡為混雜模式
ip link set eth1 promisc on
##創(chuàng)建使用macvlan網(wǎng)絡(luò)的容器
docker run -it --network macvlan_1 --ip=10.0.0.200 busybox
##刪除
docker network rm macvlan_1 


作業(yè)1:用PIPEWORK為docker容器配置獨(dú)立IP
作業(yè)2:docker跨主機(jī)容器間的通信flannel
  • 實(shí)現(xiàn)macvlan步驟
環(huán)境:兩臺(tái)裝好docker的虛擬機(jī)

兩臺(tái)機(jī)器執(zhí)行
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1

兩臺(tái)電下載鏡像包并測試
wget http://192.168.12.201/docker_image/docker_busybox.tar.gz
docker  load  -i   docker_busybox.tar.gz

docker01執(zhí)行
docker run -it  --network  macvlan_1  --ip=10.0.0.222   busybox:latest

docker02執(zhí)行
docker run -it  --network  macvlan_1  --ip=10.0.0.223   busybox:latest


測試結(jié)果
dcoker01執(zhí)行
/ # ping 10.0.0.223
PING 10.0.0.223 (10.0.0.223): 56 data bytes
64 bytes from 10.0.0.223: seq=0 ttl=64 time=1.718 ms
64 bytes from 10.0.0.223: seq=1 ttl=64 time=0.675 ms
64 bytes from 10.0.0.223: seq=2 ttl=64 time=0.660 ms

docker02執(zhí)行
/ # ping 10.0.0.222
PING 10.0.0.222 (10.0.0.222): 56 data bytes
64 bytes from 10.0.0.222: seq=0 ttl=64 time=1.050 ms
64 bytes from 10.0.0.222: seq=1 ttl=64 time=1.349 ms

二十二距贷、Dcoker跨主機(jī)容器通信之overlay

  • 參考文檔

http://www.cnblogs.com/CloudMan6/p/7270551.html

  • 實(shí)現(xiàn)overlay步驟
環(huán)境:3臺(tái)裝好docker的虛擬機(jī)
注釋:主機(jī)名字不能一樣


dock03安裝docker
wget http://192.168.12.201/docker_image/docker_rpm.tar.gz
tar xf /root/docker_rpm.tar.gz 
rpm -Uvh *.rpm
systemctl enable docker
systemctl start docker
wget http://192.168.12.201/docker_image/docker_progrium_consul.tar.gz
docker load -i docker_progrium_consul.tar.gz
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap

dock01執(zhí)行
vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.11:2376"
}

dock02執(zhí)行
vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.13:8500",
  "cluster-advertise": "10.0.0.12:2376"
}

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

任意一臺(tái)忠蝗,創(chuàng)建overlay網(wǎng)絡(luò)
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1

啟動(dòng)容器測試
docker run -it --network ol1 --name docker01 busybox /bin/sh
docker run -it --network ol1 --name docker02 busybox /bin/sh
  • 修改配置文件截圖

[圖片上傳失敗...(image-26eab-1564622978836)]

  • 執(zhí)行成功截圖

[圖片上傳失敗...(image-3e5359-1564622978836)]

二十三阁最、docker企業(yè)級(jí)鏡像倉庫harbor(vmware 中國團(tuán)隊(duì))

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

docker 01執(zhí)行
rz -E harbor-offline-installer-v1.8.0.tgz
tar xf harbor-offline-installer-v1.8.0.tgz -C  /opt
docker load < /opt/harbor/harbor.v1.8.0.tar.gz

修改配置文件
vim /opt/harbor/harbor.yml

執(zhí)行腳本
cd /opt/harbor
. /opt/harbor/install.sh 


docker 02執(zhí)行
修改配置文件
vim /etc/docker/daemon.json 

測試
docker tag fuck_php56:latest 10.0.0.11/library/fuck_php56:latest
docker push 10.0.0.11/library/fuck_php56:latest
  • 修改配置文件/opt/harbor/harbor.yml

[圖片上傳失敗...(image-62db92-1564622978836)]

  • 修改配置文件/etc/docker/daemon.json

[圖片上傳失敗...(image-4d8f92-1564622978836)]

  • docker私有倉庫導(dǎo)入企業(yè)倉庫腳本(批量導(dǎo)入)
#!/bin/bash
docker_name=`curl http://10.0.0.12:5000/v2/_catalog 2>/dev/null|jq '.repositori
es[]'|tr '"' '\0'`
for n in $docker_name
do
    for i in `curl http://10.0.0.12:5000/v2/${n}/tags/list 2>/dev/null|jq '.tag
s[]'|tr '"' '\0'`
    do
        docker pull 10.0.0.12:5000/${n}:${i}
        docker tag 10.0.0.12:5000/${n}:${i} www.duanyang.vip/library/${n}:${i}
        docker push www.duanyang.vip/library/${n}:${i}
    done
done

二十四、k8s的安裝方法

kubernetes 二進(jìn)制安裝 安裝最新版,步驟繁瑣!!
https://github.com/minminmsn/k8s1.13/blob/master/kubernetes/kubernetes1.13.1%2Betcd3.3.10%2Bflanneld0.10%E9%9B%86%E7%BE%A4%E9%83%A8%E7%BD%B2.md

kubeadm 安裝(網(wǎng)絡(luò)原因)
https://www.qstack.com.cn/archives/425.html

minikube 安裝(網(wǎng)絡(luò)原因)

yum 安裝(最容易 1.5)

go編譯安裝(大神級(jí)別)

k8s-master 管理者
kubelet --docker 啟動(dòng)容器
kubelet --docker



####制作一個(gè)只支持sshd服務(wù)的鏡像
1):啟動(dòng)一個(gè)容器配阵,并修改
docker run -it -p 1022:22 centos:6.8 /bin/bash
yum install openssh-server -y
echo 'root:123456'|chpasswd
/etc/init.d/sshd start
測試:ssh遠(yuǎn)程登錄

2):將修改后的容器闸餐,保存為鏡像
docker commit friendly_swartz centos6-ssh

3)測試新鏡像舍沙,sshd是否可用
docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D
ssh root@10.0.0.11 -p 1122


####制作了一個(gè)支持sshd和httpd雙服務(wù)的鏡像
1):啟動(dòng)一個(gè)容器拂铡,并修改
docker run -d -p 1122:22 centos6-ssh:latest /usr/sbin/sshd -D
yum install httpd -y
/etc/init.d/httpd start

vi /init.sh
#!/bin/bash
/etc/init.d/httpd start
/usr/sbin/sshd -D

chmod +x /init.sh
2):將修改后的容器葱绒,保存為鏡像
docker commit 11bf5984784a centos6-httpd

3)測試新鏡像地淀,檢測sshd和httpd是否可用
docker run -d -p 1222:22 -p 80:80 centos6-httpd:latest /init.sh

作業(yè):使用Dockerfile完成kodexplorer網(wǎng)盤項(xiàng)目

課前回顧:
Linux容器是與系統(tǒng)其他部分隔離開的一系列進(jìn)程帮毁,從另一個(gè)系統(tǒng)鏡像rootfs運(yùn)行烈疚,并由該鏡像提供支持進(jìn)程所需的全部文件爷肝。
容器鏡像包含了應(yīng)用的所有依賴項(xiàng)陆错,因而在從開發(fā)到測試再到生產(chǎn)的整個(gè)過程中音瓷,它都具有可移植性和一致性绳慎。

1:chroot偷线,ldd
2:lxc namespace(6大命名空間)和cgroup
3:docker和kvm區(qū)別沽甥,docker鏡像基礎(chǔ)操作摆舟,docker容器日常操作恨诱,commit制作鏡像照宝,dockfile來自動(dòng)構(gòu)建鏡像

####docker私有倉庫registry
1)啟動(dòng)registry容器
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry

2)修改/etc/docker/daemon.json配置文件
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries": ["10.0.0.11:5000"]
}

3)重啟docker服務(wù)
systemctl restart docker

4)為鏡像打標(biāo)簽
docker tag centos:6.8 10.0.0.11:5000/oldboy/centos:6.8

5)push推送鏡像
docker push 10.0.0.11:5000/oldboy/centos:6.8
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末厕鹃,一起剝皮案震驚了整個(gè)濱河市剂碴,隨后出現(xiàn)的幾起案子忆矛,更是在濱河造成了極大的恐慌请垛,老刑警劉巖宗收,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嫂侍,死亡現(xiàn)場離奇詭異,居然都是意外死亡菲盾,警方通過查閱死者的電腦和手機(jī)懒鉴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門临谱,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悉默,“玉大人抄课,你說我怎么就攤上這事雳旅」保” “怎么了型豁?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵偷遗,是天一觀的道長氏豌。 經(jīng)常有香客問我泵喘,道長,這世上最難降的妖魔是什么相速? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任苫拍,我火速辦了婚禮绒极,結(jié)果婚禮上蔬捷,老公的妹妹穿的比我還像新娘周拐。我一直安慰自己妥粟,他們只是感情好罕容,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布锦秒。 她就那樣靜靜地躺著旅择,像睡著了一般生真。 火紅的嫁衣襯著肌膚如雪柱蟀。 梳的紋絲不亂的頭發(fā)上长已,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天术瓮,我揣著相機(jī)與錄音贰健,去河邊找鬼伶椿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛甘苍,可吹牛的內(nèi)容都是我干的载庭。 我是一名探鬼主播囚聚,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼顽铸,長吁一口氣:“原來是場噩夢啊……” “哼谓松!你這毒婦竟也來了鬼譬?” 一聲冷哼從身側(cè)響起优质,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤巩螃,失蹤者是張志新(化名)和其女友劉穎避乏,沒想到半個(gè)月后拍皮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體春缕,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡锄贼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年屑迂,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了惹盼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片手报。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掩蛤,死狀恐怖揍鸟,靈堂內(nèi)的尸體忽然破棺而出阳藻,到底是詐尸還是另有隱情腥泥,我是刑警寧澤道川,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站橙数,受9級(jí)特大地震影響灯帮,放射性物質(zhì)發(fā)生泄漏逻住。R本人自食惡果不足惜瞎访,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一播演、第九天 我趴在偏房一處隱蔽的房頂上張望写烤。 院中可真熱鬧洲炊,春花似錦暂衡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隧膘,卻和暖如春代态,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疹吃。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國打工蹦疑, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留萨驶,地道東北人歉摧。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像腔呜,于是被迫代替她去往敵國和親叁温。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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