Linux -Docker

對比虛擬機與Docker

Docker守護進程能夠直接與主操做系統進行通訊,爲各個Docker容器分配資源;它還能夠將容器與主操做系統隔離,並將各個容器互相隔離。虛擬機啓動須要數分鐘,而Docker容器能夠在數毫秒內啓動。因爲沒有臃腫的從操做系統,Docker能夠節省大量的磁盤空間以及其餘系統資源。php

說了這麼多Docker的優點,你們也沒有必要徹底否認虛擬機技術,由於二者有不一樣的使用場景。虛擬機更擅長於完全隔離整個運行環境。例如,雲服務提供商一般採用虛擬機技術隔離不一樣的用戶。而Docker一般用於隔離不一樣的應用,例如前端,後端以及數據庫。html

https://www.cnblogs.com/pyyu/p/9485268.html前端

用法

安裝 yum -y install docker
啓動docker:systemctl start dockerjava

centos6啓動:service docker start
啓動容器 docker start c4f7
進去容器 docker attach d5c0python

sudo docker exec -it 775c7c9ee1e1 /bin/bash mysql


安裝ubuntu docker pull ubuntu:14.04
鏡像搜索 docker search python
鏡像下載地址 http://hub.daocloud.io/
查看有哪些鏡像 docker images
根據鏡像建立容器 docker run -tid --name abc 452a
查到全部容器的狀態 docker ps -a
鏡像建立或導入是不能夠修改的
基於鏡像封裝後的容器 建立新鏡像 docker commit 9e18 mydoc1:v2
保存鏡像到本地 docker save -o djdoc.tar djdoc
加載本地鏡像 docker load -i djdoc.tar 
新的容器和原來的容器進行通信 docker run -tid --name c1 --link center 3e31linux

ping下原來容器的ip確認是否能通訊:ping 172.17.0.3ios

安裝apt-get: sudo apt-get updatenginx

ununtu安裝ping: apt-get -y install inetutils-ping git

查看主機地址: cat /etc/hosts

刪除多個images docker rm -f 69ff f3fd 43f4

docker rm -f d5c018801f95

刪除images,經過image的id來指定刪除誰

docker rmi <image id>

 

如何退出容器而不中止容器?
組合鍵:Ctrl+P+Q

 看下docker下環境主機名:cat /etc/issue

關閉防火牆
service iptables stop
iptables -t nat -A PREROUTING -p udp --dport [端口號] -j DNAT --to-destination [目標IP]
iptables -t nat -A POSTROUTING -p tcp -d [目標IP] --dport [端口號] -j SNAT --to-source [本地服務器IP]
service iptables save

 

關閉默認的firewall防火牆

systemctl stop firewalld.service 關閉防火牆
systemctl disable firewalld.service 關閉開機啓動

  1.  
    # 開啓service firewalld start
  2.  
    # 重啓service firewalld restart
  3.  
    # 關閉service firewalld stop
    看到狀態firewall-cmd --state

#查看運行的redis服務,獲得redis服務的進程號,假設是1000
ps -ef|grep redis
#殺死redis進程
kill -9 1000

vi mycrawl.py
rm -rf mycrawl.py
python3 mycrawl.py

 

查看(ssh)服務是否啓動 sudo ps -e |grep ssh
啓動服務 sudo service ssh start

 

docker hub

https://blog.csdn.net/sk_grace/article/details/81220675

https://www.jianshu.com/p/94eb79825372

 

docker pull germey/scrapyd

直接建立docker並啓動scrapyd: docker run -d -p 6800:6800 germey/scrapyd

 

批量部署

利用阿里雲的鏡像

 

其它

docker容器
1:什麼是容器?
容器就是在隔離的環境運行的一個進程,若是進程中止,容器就會銷燬。隔離的環境擁有本身的系統文件,ip地址,主機名等

kvm虛擬機,linux,系統文件

程序:代碼,命令
進程:正在運行的程序

2:容器和虛擬化的區別
linux容器技術,容器虛擬化和kvm虛擬化的區別
kvm虛擬化: 須要硬件的支持,須要模擬硬件,能夠運行不一樣的操做系統,啓動時間分鐘級(開機啓動流程)

linux開機啓動流程:
bios開機硬件自檢
根據bios設置的優先啓動項  網卡 硬盤 u盤 光驅
讀取mbr引導  UEFI(gpt分區)    mbr硬盤分區信息,內核加載路徑
加載內核
啓動第一個進程init  systemd
系統初始化完成
運行服務
。。。


容器:共用宿主機內核,運行服務,損耗少,啓動快,性能高

容器虛擬化:不須要硬件的支持。不須要模擬硬件,共用宿主機的內核,啓動時間秒級(沒有開機啓動流程)

總結:
(1)與宿主機使用同一個內核,性能損耗小;
(2)不須要指令級模擬;
(3)容器能夠在CPU核心的本地運行指令,不須要任何專門的解釋機制;
(4)避免了準虛擬化和系統調用替換中的複雜性;
(5)輕量級隔離,在隔離的同時還提供共享機制,以實現容器與宿主機的資源共享。

3:容器技術的發展過程:
1):chroot技術,新建一個子系統(擁有本身完整的系統文件)
參考資料:https://www.ibm.com/developerworks/cn/linux/l-cn-chroot/
chang root

做業1:使用chroot監獄限制SSH用戶訪問指定目錄和使用指定命令
https://linux.cn/article-8313-1.html

2):linux容器(lxc)  linux container(namespaces 命名空間 隔離環境 及cgroups 資源限制)
宿主機namespace  ip地址,主機名,系統文件,進程
子系統namespace  ip地址,主機名,系統文件,進程

cgroups  限制一個進程可以使用的資源。cpu,內存,硬盤io
kvm虛擬機:資源限制(1c 1G 20G)

有一個相同函數名字:

. name1 sss.sh   ===  name1.sss()
.  xxxx.sh       ===  name2.sss()

##須要使用epel源
#安裝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


##橋接網卡
[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=223.5.5.5' >/etc/sysconfig/network-scripts/ifcfg-virbr0

##啓動cgroup
systemctl start cgconfig.service

##啓動lxc
systemctl start lxc.service

##建立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容器設置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和網關
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

##啓動容器
lxc-start -n centos7

3):docker容器
centos7.4   2G   10.0.0.11  docker01    host解析
centos7.4   2G   10.0.0.12  docker02    host解析

Docker是經過內核虛擬化技術(namespaces及cgroups cpu、內存、磁盤io等)來提供容器的資源隔離與安全保障等。因爲Docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要相似虛擬機(VM)額外的操做系統開銷,提升資源利用率。
namespace  資源隔離
cgroups    進程的資源限制


docker 初期把lxc二次開發,libcontainer


docker的主要目標是"Build,Ship and Run any App,Angwhere",構建,運輸,到處運行
部署服務,環境問題

一次構建docker鏡像,下載鏡像,到處運行

docker是一種軟件的打包技術


構建:作一個docker鏡像
運輸:docker pull
運行:啓動一個容器
每個容器,他都有本身的系統文件rootfs.

kvm解決了硬件和操做系統之間的依賴
kvm獨立的虛擬磁盤,xml配置文件

docker解決了軟件和操做系統環境之間的依賴,可以讓獨立服務或應用程序在不一樣的環境中,獲得相同的運行結果。
docker鏡像有本身的文件系統。

docker容器是一種輕量級、可移植、自包含的軟件打包技術,使應用程序能夠在幾乎任何地方以相同的方式運行。開發人員在本身筆記本上建立並測試好的容器,無需任何修改就可以在生產系統的虛擬機、物理服務器或公有云主機上運行。

4:docker的安裝
10.0.0.11:修改主機名和host解析
rm -fr /etc/yum.repos.d/epel.repo
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
curl -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

5:docker的主要組成部分
docker是傳統的CS架構分爲docker client和docker server,向mysql同樣

命令:docker version
[root@controller ~]# docker version 
Client:
 Version:	17.12.0-ce
 API version:	1.35
 Go version:	go1.9.2
 Git commit:	c97c6d6
 Built:	Wed Dec 27 20:10:14 2017
 OS/Arch:	linux/amd64

Server:
 Engine:
  Version:	17.12.0-ce
  API version:	1.35 (minimum version 1.12)
  Go version:	go1.9.2
  Git commit:	c97c6d6
  Built:	Wed Dec 27 20:12:46 2017
  OS/Arch:	linux/amd64
  Experimental:	false
  
docker info(若是要作監控)


docker主要組件有:鏡像、容器、倉庫, 網絡,存儲

啓動容器必須須要一個鏡像,倉庫中只存儲鏡像
容器---鏡像---倉庫

安裝Nginx步驟:
官網下載Nginx源碼包wget  
tar 
建立Nginx用戶 

編譯安裝
./config....
修改配置文件,
啓動

6:啓動第一個容器
##配置docker鏡像加速
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}	

docker run -d -p 80:80 nginx:1.14
run(建立並運行一個容器)
-d 放在後臺
-p 端口映射
nginx docker鏡像的名字


7:docker的鏡像管理
搜索鏡像
	docker search
選鏡像的建議:
1,優先考慮官方
2,stars數量多

獲取鏡像
	docker pull(push)
	鏡像加速器:阿里雲加速器,daocloud加速器,中科大加速器,Docker 中國官方鏡像加速:https://registry.docker-cn.com
	
	docker pull centos:6.8(沒有指定版本,默認會下載最新版)
	docker pull daocloud.io/huangzhichong/alpine-cn:latest 

##配置docker鏡像加速
vi /etc/docker/daemon.json
{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}	
	
##第三方docker鏡像倉庫,使用方法:
docker pull index.tenxcloud.com/tenxcloud/httpd:latest
	
查看鏡像
	docker images  docker image  ls
刪除鏡像
	docker rmi  例子:docker image rm centos:latest
導出鏡像
	docker save  例子:docker image save centos > docker-centos7.4.tar.gz
導入鏡像
	docker load  例子:docker image load -i docker-centos7.4.tar.gz
	

	
8:docker的容器管理
docker run -d -p 80:80 nginx:1.14
鏡像:包含linux發行版系統文件,nginx軟件
容器:基於鏡像,啓動一個進程,文件



docker run -d -p 80:80 nginx:latest
run(建立並運行一個容器)
-d 放在後臺
-p 端口映射
-v  源地址(宿主機):目標地址(容器)

nginx docker鏡像的名字

docker run -it --name centos6 centos:6.9 /bin/bash
-it   分配交互式的終端
--name 指定容器的名字
/bin/sh覆蓋容器的初始命令

啓動容器
	docker run image_name
	docker run -it image_name CMD
	
	docker run ==== docker create  + docker start

中止容器
	docker stop CONTAINER_ID
殺死容器
	docker kill container_name
查看容器列表
    docker ps
	docker ps –a 
	
進入容器(目的,調試,排錯)
***	docker exec  (會分配一個新的終端tty)
		docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
		
    docker exec -it  容器id或容器名字 /bin/bash(/bin/sh)
		
	docker attach(使用同一個終端)
		docker attach [OPTIONS] CONTAINER
		
	nsenter(安裝yum install -y util-linux 棄用)

刪除容器
	docker rm
批量刪除容器
    docker rm -f `docker ps -a -q`
	
總結:docker容器內的第一個進程(初始命令)必須一直處於前臺運行的狀態(必須夯住),不然這個容器,就會處於退出狀態!

業務在容器中運行:夯住,啓動服務




9:docker容器的網絡訪問(端口映射)

指定映射(docker 會自動添加一條iptables規則來實現端口映射)
	-p hostPort:containerPort
	-p ip:hostPort:containerPort  多個容器都想使用80端口
	-p ip::containerPort(隨機端口)
	-p hostPort:containerPort:udp
	-p 81:80 –p 443:443 能夠指定多個-p
	
	-p 10.0.0.12:88:80:udp

iptables -s 10.0.0.11:88 --to 172.17.0.5

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

經過iptables來實現的端口映射

	
10:docker的數據卷管理
/usr/share/nginx/html

持久化
數據卷(文件或目錄)
	-v 卷名:/data
	-v src(宿主機的目錄):dst(容器的目錄)
數據卷容器
	--volumes-from(跟某一個已經存在的容器掛載相同的卷)
	
基於nginx啓動一個容器,監聽80和81,訪問80,出現nginx默認首頁,訪問81,出現小鳥。
基於多端口的多站點。 

docker run -d -p 80:80 -v /data:/usr/share/nginx/html  nginx:latest
/data不存在,會自動建立,把/data掛載到容器的站點目錄,/data目錄的數據同步容器中

docker run -d -p 81:80 -v oldboy:/usr/share/nginx/html nginx:latest 
把oldboy卷掛載掛載到容器的站點目錄,容器裏面的數據同步到卷中,


11:手動將容器保存爲鏡像
docker commit 容器id或者容器的名字   新的鏡像名字[:版本號可選]

1):基於容器製做鏡像
docker run -it centos:6.9   ssh
######
yum install httpd
yum install openssh-server
/etc/init.d/sshd start

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

chmod +x /init.sh

2)將容器提交爲鏡像
docker commit oldboy centos6-ssh-httpd:v1

3)測試鏡像功能是否可用

手動製做的鏡像,傳輸時間長
鏡像初始命令

製做一個kodexplorer網盤docker鏡像。nginx + php-fpm(httpd + php)

12:dockerfile自動構建docker鏡像
相似ansible劇本,大小几kb
手動作鏡像:大小几百M+

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


dockerfile主要組成部分:
	基礎鏡像信息       FROM  centos:6.9
	製做鏡像操做指令   RUN yum install openssh-server -y
	容器啓動時執行指令 CMD ["/bin/bash"]
dockerfile經常使用指令:
	FROM 這個鏡像的媽媽是誰?(指定基礎鏡像)
	MAINTAINER 告訴別人,誰負責養它?(指定維護者信息,能夠沒有)
	LABLE      描述,標籤
	
	RUN 你想讓它幹啥(在命令前面加上RUN便可)
	ADD 給它點創業資金(會自動解壓tar)  製做docker基礎的系統鏡像
	WORKDIR 我是cd,今天剛化了妝(設置當前工做目錄)
	VOLUME 給它一個存放行李的地方(設置卷,掛載主機目錄)
	EXPOSE 它要打開的門是啥(指定對外的端口)(-P 隨機端口)
	CMD 奔跑吧,兄弟!(指定容器啓動後的要乾的事情)(容易被替換)
	
dockerfile其餘指令:	
	COPY 複製文件(不會解壓)rootfs.tar.gz
	ENV  環境變量
	ENTRYPOINT  容器啓動後執行的命令(沒法被替換,啓容器的時候指定的命令,會被當成參數)

參考其餘的dockerfile
官方dockerfile或者時速雲鏡像廣場

13:docker鏡像的分層(kvm 連接克隆,寫時複製的特性)
鏡像分層的好處:複用,節省磁盤空間,相同的內容只需加載一份到內存。
修改dockerfile以後,再次構建速度快


14:.容器間的互聯(--link 是單方向的!!!)
	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
	

使用docker運行zabbix-server
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

監控報警:微信報警,alpine	  
yum 安裝zabbix好使



16:docker registry(私有倉庫)
##普通的registry
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/myregistry:/var/lib/registry  registry

docker pull daocloud.io/huangzhichong/alpine-cn:latest 

上傳鏡像到私有倉庫:
a:給鏡像打標籤
docker  tag centos6-sshd:v3 10.0.0.11:5000/centos6-sshd:v3
b:上傳鏡像
docker push 10.0.0.11:5000/centos6-sshd:v3





若是遇到報錯:
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

##帶basic認證的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 

17:docker-compose(單機版的容器編排工具)
ansible劇本

yum install -y python2-pip(須要epel源)
pip install docker-compose(默認pypi源在國外)
##pip 加速

##詳細指令
http://www.jianshu.com/p/2217cfed29d7


cd my_wordpress/
vi docker-compose.yml
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"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
volumes:
    db_data:
    web_data:

#啓動
docker-compose up
#後臺啓動
docker-compose up -d

18:重啓docker服務,容器所有退出的解決辦法
方法一: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
}

19:Docker Machine安裝docker
Docker Machine 二進制  10.0.0.11
10.0.0.12 免密碼登錄  從docker的官網下載二進制的包,去安裝docker
10.0.0.13 免密碼登錄

ansible:
shell


20:Docker網絡類型
None:不爲容器配置任何網絡功能,--net=none
Container:與另外一個運行中的容器共享Network Namespace,--net=container:containerID(K8S)
Host:與宿主機共享Network Namespace,--net=host
Bridge:Docker設計的NAT網絡模型

21:Docker跨主機容器之間的通訊macvlan


默認一個物理網卡,只有一個物理地址,虛擬多個mac地址

##建立macvlan網絡
docker network create --driver macvlan --subnet 10.0.0.0/24 --gateway 10.0.0.254 -o parent=eth0 macvlan_1
##設置eth0的網卡爲混雜模式
ip link set eth1 promisc on
##建立使用macvlan網絡的容器
docker run -it --network macvlan_1 --ip=10.0.0.3 centos6.9_ssh:v3 /bin/bash

做業2:用PIPEWORK爲docker容器配置獨立IP

22:Dcoker跨主機容器通訊之overlay
http://www.cnblogs.com/CloudMan6/p/7270551.html
1)準備工做
docker01上:
docker run -d -p 8500:8500 -h consul --name consul progrium/consul -server -bootstrap
設置容器的主機名

consul:kv類型的存儲數據庫(key:value)


docker0一、02上:
vim  /etc/docker/daemon.json
{
  "hosts":["tcp://0.0.0.0:2376","unix:///var/run/docker.sock"],
  "cluster-store": "consul://10.0.0.11:8500",
  "cluster-advertise": "10.0.0.11:2376"
}

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


2)建立overlay網絡
docker network create -d overlay --subnet 172.16.1.0/24 --gateway 172.16.1.254 ol1

3)啓動容器測試
docker run -it --network ol1 --name oldboy01  busybox /bin/bash

每一個容器有兩塊網卡,eth0實現容器間的通信,eth1實現容器訪問外網




23:docker企業級鏡像倉庫harbor(vmware 中國團隊)
第一步:安裝docker和docker-compose

第二步:下載harbor-offline-installer-v1.3.0.tgz

第三步:上傳到/opt,並解壓

第四步:修改harbor.cfg配置文件
hostname = 10.0.0.11
harbor_admin_password = 123456

第五步:執行install.sh


###k8s的安裝方法
kubernetes 二進制安裝 安裝最新版,步驟繁瑣!!
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 安裝(網絡緣由)
https://www.qstack.com.cn/archives/425.html

minikube 安裝(網絡緣由)

yum 安裝(最容易 1.5)

go編譯安裝(大神級別)

k8s-master 管理者
kubelet --docker 啓動容器
kubelet --docker



####製做一個只支持sshd服務的鏡像
1):啓動一個容器,並修改
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遠程登陸

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


####製做了一個支持sshd和httpd雙服務的鏡像
1):啓動一個容器,並修改
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

做業:使用Dockerfile完成kodexplorer網盤項目

課前回顧:
Linux容器是與系統其餘部分隔離開的一系列進程,從另外一個系統鏡像rootfs運行,並由該鏡像提供支持進程所需的所有文件。
容器鏡像包含了應用的全部依賴項,於是在從開發到測試再到生產的整個過程當中,它都具備可移植性和一致性。

1:chroot,ldd
2:lxc namespace(6大命名空間)和cgroup
3:docker和kvm區別,docker鏡像基礎操做,docker容器平常操做,commit製做鏡像,dockfile來自動構建鏡像

####docker私有倉庫registry
1)啓動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服務
systemctl restart docker

4)爲鏡像打標籤
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
相關文章
相關標籤/搜索