Docker

一、Docker
1.什麼是容器
--容器技術是應用程序封裝和交付的核心技術
--容器技術的核心:資源管理、進程隔離、selinux安全
--由於是在物理機上實施隔離,啓動一個容器可以像啓動一個進程一樣快速

2.什麼是docker
Docker: 是完整的一套容器管理系統,提供了一組命令,讓用戶更加方便的直接地使用容器技術,而不需要過多關心底層內核技術

容器和虛擬化的比較:
優點:相比於傳統的虛擬化技術,容器更加簡潔高效,傳統虛擬機需要給每個VM安裝操作系統,容器使用共享公共庫和程序
缺點:容器的隔離性沒有虛擬化強;共用linux內核,安全性有先天缺陷,監控容器和容器排錯是挑戰

3.安裝docker
#----------------------物理機--------------------------#
創建一臺 4G 內存的虛擬機
創建虛擬機硬盤
qemu-img create -b node.qcow2 -f qcow2 docker1.img 20G
創建虛擬機配置文件
sed 's/node/docker1/' node.xml >/etc/libvirt/qemu/docker1.xml
定義虛擬機
virsh define /etc/libvirt/qemu/docker1.xml
編輯虛擬機修改內存
virsh edit node1
啓動虛擬機
virsh start node1

創建自定義 yum 源
拷貝 docker-engine* /var/ftp/public
cd /var/ftp/public
createrepo .

#--------------------虛擬機--------------------#
修改主機名和靜態 ip 地址
echo docker1 >/etc/hostname
配置靜態 ip 地址 /etc/sysconfig/network-scripts/ifcfg-eth0
BOOTPROTO="static"
IPADDR="192.168.1.11"
NETMASK="255.255.255.0"
GATEWAY="192.168.1.254"

配置 /etc/yum.repos.d/docker.repo
[local_docker]
name=CentOS docker
baseurl="ftp://192.168.1.254/docker"
enabled=1
gpgcheck=0

安裝 docker
yum install docker-engine
設置開機自啓動
systemctl enable docker
重啓虛擬機
reboot

docker version //查看版本

4.docker鏡像
docker鏡像是啓動容器的核心(模板),採用分層設計,使用快照cow技術,確保底層數據不丟失

5.docker 命令
docker images //查看鏡像
docker search 鏡像名 //搜索鏡像
docker pull 鏡像名 //下載鏡像
docker push 鏡像名 //上傳鏡像
docker help pull //產看命令pull 的幫助
docker history 鏡像名 //查看鏡像製作歷史
docker rmi 鏡像名 //刪除本地鏡像,啓動容器時刪除會報錯,要把該鏡像啓動的所有容器都刪除才能刪除成功
docker rm 容器ID //刪除容器
docker tag centos:latest centos1:latest1 //修改鏡像名和標籤(相當於複製,鏡像ID號是相同的)
docker stop 容器ID //關閉容器
docker start 容器ID //啓動容器
docker restart 容器ID //重啓容器
#docker rm $(docker ps -aq) //刪除所有容器
docker save busybox:latest >busybox.tar //備份鏡像
docker load < busybox.tar //恢復鏡像(在另一臺機器上恢復)
docker top 容器ID //查看容器進程列表(可以查看容器裏執行過哪些命令)
docker inspect 容器ID //查看容器底層信息
#docker inspect -f "{{.NetworkSettings.IPAddress}}" 67 //查看容器IP地址

啓動容器:
docker run -it 鏡像名:標籤 鏡像裏的命令 //i表示交互,t表示分配一個終端

每次執行docker run 都會創建一個全新的容器
docker ps [-aq] //查看啓動的(所有的)容器
#docker run -it centos /bin/bash //啓動容器後啓動容器裏的bash 命令
#docker run -it centos //啓動容器默認的命令
#docker run -it centos /bin/echo hello //啓動容器echo hello後容器小時

docker run -d nginx //以後臺進程的方式啓動nginx容器,因爲nginx 是一個服務,所以要以後臺服務的方式啓動
docker run -it nginx /bin/bash //前臺方式,給它一個可交互式的終端

docker exec -it 7e4e bash //相當於ssh進入容器
docker attach 7e4e //相當於console進入容器

6.啓動一個nginx鏡像,並修改nginx頁面
#docker run -d nginx
#docker ps //查看容器ID
#docker exec -it 275 /bin/bash //進入容器
#dpkg -L nginx 或 nginx -T | grep root //查看nignx 配置文件路徑
#cd /usr/share/nginx/html
#cat >index.html <<EOF
hello //把主頁面修改爲hello
EOF
#exit
#docker inspect -f "{{.NetworkSettings.IPAddress}}" 275 //查看容器IP地址
#curl http://172.17.0.2

二、自定義鏡像
1.創建容器
#docker run -it centos

2.修改配置,安裝軟件
在容器搭建yum源,安裝軟件包
#exit

3.創建鏡像
#docker ps -aq
#docker commit 容器ID 鏡像名稱:標籤

4.查看鏡像,使用新的鏡像創建容器
#docker images
#docker run -it 鏡像名
三、Dockerfile
新建一個目錄,目錄下新建Dockerfile文件

1.封裝初始化環境
#vim Dockerfile
FROM centos:latest
RUN rm -f /etc/yum.repos.d/*
ADD local.repo /etc/yum.repos.d/local.repo
RUN yum install -y net-tools psmisc vim-enhanced
:wq
#docker build -t 新鏡像名:新標籤名 . //“.”代表Dockerfile文件所在路徑,在當前目錄下就用.表示

2.修改鏡像的默認啓動命令
FROM myos:latest
CMD ["/usr/bin/python"]

3.封裝ssh應用
FROM myos
RUN yum install -y openssh-server
RUN echo 11 | passwd --stdin root
RUN sshd-keygen
ENV EnvironmentFile=/etc/sysconfig/sshd
CMD ["/usr/sbin/sshd","-D"]

4.封裝httpd應用
FROM myos
RUN yum -y install httpd
WORKDIR /var/www/html
RUN echo "hello " > index.html
ENV EnvironmentFile=/etc/sysconfig/httpd //設置環境變量文件
EXPOSE 80 //監聽80端口
CMD ["/usr/sbin/httpd", "-DFOREGROUND"] //啓動服務

四、自定義鏡像倉庫
把一臺機器的鏡像共享在局域網裏
步驟:
1.寫json配置文件,創建私有倉庫
#vim /etc/docker/daemon.json
{
"insecure-registries" : ["192.168.1.11:5000"] //私有倉庫的IP:端口
}

2.重啓docker服務
#systemctl restart docker

3.啓動私有倉庫服務
#docker run -d -p 5000:5000 registry

4.打標記
#docker tag busybox:latest 192.168.1.11:5000/busybox:lastest
#docker tag myos:latest 192.168.1.11:5000/myos:latest
#docker tag myos:python 192.168.1.11:5000/myos:python
#docker tag myos:httpd 192.168.1.11:5000/myos:httpd

5.上傳鏡像
docker push 192.168.1.11:5000/busybox:latest
docker push 192.168.1.11:5000/myos:latest
docker push 192.168.1.11:5000/myos:python
docker push 192.168.1.11:5000/myos:httpd

6.客戶機使用私有鏡像源
配置daemon.json (把服務機上的該文件拷過來就行)
重啓docker
啓動容器
docker run -it 192.168.1.11:5000/busybox
docker run -it 192.168.1.11:5000/myos
docker run -d 192.168.1.11:5000/myos:httpd

查看私有倉庫有什麼樣的鏡像
#curl http://192.168.1.11:5000/v2/_catalog
查看私有倉庫的鏡像有什麼樣的標籤
#curl http://192.168.1.11:5000/v2/myos/tags/list

五、存儲卷
docker容器不保持任何數據,重要數據使用外部卷存儲(數據持久化),容器可以掛載真實機目錄或共享存儲爲卷

存儲卷映射:
docker run -itd -v 物理機文件夾:容器內文件夾 鏡像:標籤
#docker run -it -v /var/data:/abc 192.168.1.193:5000/myos
//當在容器的abc目錄裏創建文件時,物理機的/var/data裏也會有相應的文件

共享存儲:
一臺共享存儲服務器可以提供給所有Docker主機使用
共享存儲服務器(NAS、SAN、DAS等)
如:使用NFS創建共享存儲服務器,客戶端掛載NFS共享,並最終映射到容器中

服務器:
#yum -y install nfs-utils
#vim /etc/exports
/public 192.168.1.0/24(rw,root_squash)
:wq
#systemctl start nfs

Docker主機:
mount掛載共享, 運行容器時,使用-v選項映射磁盤到容器中

六、docker網絡
真實網卡配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-eth0
虛擬網卡配置文件:
cat /etc/sysconfig/network-scripts/ifcfg-eth0:0

網卡與虛擬交換機的區別就是TYPE=bridge
brctl show //查看虛擬交換機

創建虛擬交換機
docker network create --driver=bridge --subnet 192.168.100.0/24 docker1
創建一個新的容器,使用新的交換機
docker run -it --network=docker1 myos

端口複用:
創建容器,使用宿主機的端口 -p 宿主機端口:容器端口
docker run -d -p 80:80 -v /var/webroot:/var/www/html 192.168.1.11:5000/myos:httpd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章