自動化----docker

1.Docker簡介和KVM區別

1.1 歷史簡介

 Docker是PaaS供應商dotCloud開源的一個基於LXC 的高級容器引擎,源代碼託管在GitHub 上, 基於Go語言開發並聽從Apache 2.0協議開源.Docker 是經過內核虛擬化技術(namespaces及cgroups等,這裏的內核技術指的是Linux內核哦)來提供容器的資源隔離與安全保證等。因爲docker經過操做系統層的虛擬化實現隔離,因此Docker容器在運行時,不須要額外的虛擬化管理程序(VMM(Virtual Machine Monitor),以及hyperisor)支持,他是內核級虛擬化,能夠實現更高的性能,同時對資源的額外需求很低。最本質特徵docker是經過隔離來進行建立容器,而KVM等均爲經過模擬方式建立虛擬機

1.2 優點說明

更快的交付和部署使用docker 開發人員可使用鏡像來快速構建一套標準的開發環境;開發完成以後,

測試和原味人員能夠直接使用徹底相同的環境來部署代碼,只要開發測試過的代碼,就能夠確保在生產環境無縫運行。docker能夠快速建立和刪除容器,實現快速迭代,大量節約開發、測試、部署的時間

更高效的資源利用 docker 容器不須要二外的徐牛啊管理程序支持,他是內核級的虛擬化,能夠實現更高級的性能,同事對資源的額外需求很低

更輕鬆的遷移和擴展docker容器幾乎能夠再任意的平臺上運行,包括物理機、虛擬機、公有云、私有云、我的電腦、服務器等,同事支持主流的操做系統發行版本。這種兼容性讓用戶能夠再不一樣平臺之間輕鬆地遷移應用


1.3 對比KVM
docker容器很快,啓動和中止能夠再秒級實現,而傳統的虛擬機須要數分鐘,docker容器對系統資源需求不多,一臺主機上能夠同時運行數百甚至上千個docker容器,docker 經過相似於git的設計理念的操做來方便用戶獲取、分發和更新應用鏡像,存儲複用,增量更新,docker經過dockerfile支持靈活的自動化建立和部署機制,提升工做效率,使流程標準化

1.4 docker的特性

Docker的三大特性爲BUILD(構建)、SHIP(運輸)、RUN(運行)。(一次構建多處運行,像不像JAVA呢)。docker是傳統的CS架構分爲docker client和docker server,主要分爲三大組件鏡像(image)、容器(container)、倉庫(Repository)。那麼docker和咱們以前接觸的openstack又有什麼區別呢?他們的區別以下所示。

 

2.安裝與配置html

rpm -ivh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm   ####配置yum源
yum install docker -y     ########安裝DOCKER
systemctl enable docker    ############開機啓動
vim /usr/lib/systemd/system/docker.service  ####編輯配置文件
ExecStart=/usr/bin/dockerd-current --registry-mirror=https://a14c78qe.mirror.aliyuncs.com\  ####### 修改加速器

####ystemctl start docker      ########開啓DOCKER
####systemctl status docker    ########  看DOCKER 狀態是否成功


###################################################################docker鏡像搜索,下載,查看,導出,導入操做#########################################
#### docker search nginx     ###搜索想下載的鏡像                                                                                                ###
####docker pull nginx         ########下載nginx鏡像                                                           ###
#### docker images            ########查看下載鏡像                                                       ###
#### docker save nginx >/tmp/nginx.tar.gz    ######導出本地鏡像                                                ###  
####docker rmi nginx        #########刪除鏡像                                                          ###
####docker load  < /tmp/nginx.tar.gz   ####導入本地鏡像                                                    ###
##############/var/lib/docker/image/overlay2/layerdb ############默認鏡像位置  能夠 /usr/lib/systemd/system/docker.service 來設置位置        ###
####平常 --graph=/opt/docker  更換存儲目錄 dns服務  默認docker是才用宿主機的dns  能夠才用 --dns=xxxx的方式制定     docker daemon --help  查看需求幫助  ###
################################################################################################################################################


#####docker run -it --name mynginx nginx sh  ####啓動一個鏡像  能夠指定名字  分配個終端
#####docker ps -a               ####查看已經啓動的鏡像和因此鏡像        #########小技巧 按住ctrl不放手p   q  退出一個容器,容易不會關閉 
#####docker rm 62244e6d4104     ####刪除一個容器,根據CONTAINER ID來刪除,不能刪除已經運行的容器,若是要刪,只能先中止,,強制刪除加 f    docker rm -f e2a901f136d9   ##建立在退出的時候刪除,生產環境不用docker run -it --rm --name mynginx nginx 
####docker inspect mynginx      ####  查看容器的詳細信息
####docker exec -it mynginx bash  ### 指定進入一個容器 用bash解釋器來運行
####yum install util-linux -y     ###能夠用腳本進入容器
#!/bin/bash
pid=`docker inspect --format "{{.State.Pid}}" $1` 
nsenter -t $pid -m -u -i -n -p
####docker logs mynginx        ####能夠查看容器的日誌

3.鏡像製做 python

 # https://hub.docker.com ########docker 官方下載鏡像mysql

# docker pull centos ######下載centos 以centos做爲基礎linux

# docker run -it centos bash ########運行一個容器終端nginx

# yum install wget -y ####安裝wget 默認沒有裝git

# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ####下載yum源作優化web

# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo         ####安裝epel源
#yum install nginx -y    #####作nginx鏡像
#vi /etc/nginx/nginx.conf    
daemon off;   ####前臺運行
#docker commit -m 'add nginx images' 源鏡像名或者ID mynginx:v1 ####### 根據那個鏡像來建立nginx鏡像 :v1是根據實際狀況來打版本號用 #docker run -d --name mynginx zhaobin/my_nginx nginx ###啓動一個容器,名字爲mynginx 指定鏡像爲zhaobin/my_nginx 命令是nginx ########## 網docker官網上傳鏡像 # docker login ###登陸 # docker images ####顯示鏡像 REPOSITORY TAG IMAGE ID CREATED SIZE zhaobin/my_nginx v1 b554b7de7aba 56 minutes ago 12.2 MB docker.io/mystatus/my_nginx latest 52a45a2aa161 57 minutes ago 12.2 MB zhaobin/my_nginx latest 52a45a2aa161 57 minutes ago 12.2 MB docker.io/nginx latest ae513a47849c 9 days ago 109 MB docker.io/centos latest e934aafc2206 4 weeks ago 199 MB docker.io/bash latest 59507b30b48a 3 months ago 12.2 MB docker.io/alpine latest 3fd9065eaf02 4 months ago 4.15 MB # docker tag 52a45a2aa161 docker.io/mystatus/my_nginx ###把鏡像ID打個tag # docker push docker.io/mystatus/my_nginx ####傳到倉庫 #####docker run -d --name my_nginx -P nginx 端口映射 把nginx鏡像端口映射
4.dock 端口映射以及網絡管理
######################## # docker commit -m 'add nginx images' 73b798fa70f7 mynginx ######經過 # docker run --name mynginx -d -p 80:80 mynginx nginx ########指定端口映射 想指定UDP 在端口後面加 # docker run --name mynginx -d -p 127.0.0.1:80:80 mynginx nginx #####經過指定IP 或者端口來訪問 # docker run --name web1 -d -p 80:80 mynginx nginx ###########創建一個web1容器 # docker run --name web2 --link web1 -d -p 8080:80 mynginx nginx ##創建一個web2容器和web1互通 # docker run -d --name web2 --link web1:shop_web -p 8080:80 mynginx nginx ### 能夠指定個show_web別名 # docker run -it --rm --net=host nginx ##########能夠指定網絡模式爲host,默認bridge模式 # vim /usr/lib/systemd/system/docker.service #######能夠更改默認的網段 --bip=172.18.42.1/16 加上這個 # systemctl daemon-reload # systemctl restart docker ##############2個主機之間的docker互通 須要加一條路由來指定 例如 rout add -net 192.168.2.0/24 -gw 192.168.1.1 意思我要訪問2.0這個網段走1.1這個網關

5.docker數據管理sql

1.分爲數據卷
# docker run -it --name web1 --rm -v /data centos bash #把系統/目錄掛載到容器的/data目錄 區別是使用/分區   
# docker run -it --name web1 --rm -v /opt/:/opt/ centos bash  ####意思是建立一個web1容器 退出的時候刪除容器   -v指定 把宿主機的opt目錄掛載到容器的opt目錄 使用centos鏡像 bash解釋器  ###在生產環境裏例如web,宿主機跟新文件了 docker容器也跟新能夠被訪問
# docker run -it --name web1 --rm -v /etc/hosts:/opt/hosts centos bash ####也能夠掛載文件
# docker run -it --name web1 --rm -v /etc/hosts:/opt/hosts:ro centos bash ### 也能夠設置爲只讀  默認權限是可讀可寫 ,這樣的話在容器裏不能夠卸載

2.數據容器
# docker run -it --name web1  -v /opt/:/opt/ centos bash ####
# docker run -it --name web2 --volumes-from web1  centos bash ###意思是數據容器指定爲 web1的掛載共用 , 這樣能夠把web1容器關了或者刪除也不影響web2容器使用數據分區
# docker rm -fv web2    #####若是使用了數據容器的方式 要記得刪除的時候+v把磁盤釋放,不然會把數據盤堆滿



6.docker-file 編寫docker

#this is dockerfile for nginx
#基礎鏡像,基於centos作的鏡像
FROM centos
#維護者信息  
MAINTAINER    zhao  zhao@163.com
#相關操做 
RUN rpm -ivh  http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm
RUN yum install nginx -y
#添加文件
ADD index.html /usr/share/nginx/html/index.html
#參數
RUN echo "daemon off;"  >> /etc/nginx/nginx.conf
#設置開放端口
EXPOSE 80
#執行命令
CMD ["nginx"]

###docker build -t zhao/nginx /root/ ##執行命令  指定相關信息 以及Dockerfile文件所在路徑

7. docker私庫搭建vim

#cd opt
#mkdir  auth
#docker run --entrypoint htpasswd registry:2 -Bbn zhaosir 123456 > auth/htpasswd    ##建立一個加密的密碼
#docker run -d -p 5000:5000 --restart=always --name registry1 \ 
-v `pwd`/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry

#docker ps
# docker login 127.0.0.1:5000
#docker tag d71a151b2c01 127.0.0.1:5000/zhaobin/mynginx   ##打包要上傳的鏡像
#docker push 127.0.0.1:5000/zhaobin/mynginx   ##上傳

# docker pull 127.0.0.1:5000/zhaobin/mynginx ####下次用到鏡像的話 能夠從上面下載

8.docker的編排

# yum install python-pip -y
#pip install docker-compose
#docker-compost version

#mkdir /root/comose/
cd /root/comose/
vim docker-compose.yml
web1:
  image: nginx
  expose:
    - 80

web2:
  image: nginx
  expose:
    - 80
haproxy:
  image: haproxy
  volumes:
    - /opt/haproxy.cfg:/usr/local/etc/haproxy/haproxy.conf
  links:
    - web1
    - web2
  ports:
    - "7777:1080"
    - "80:80"

#docker-compose -d up
使用docker安裝mysql服務
使用docker官方鏡像安裝mysql服務

1 拉取mysql鏡像,採用網易加速地址
docker pull hub.c.163.com/library/mysql:5.7

2 重命名鏡像名
docker tag hub.c.163.com/library/mysql:5.7 mysql:5.7

3 建立用於掛載的目錄
sudo mkdir /my/mysql/datadir #用於掛載mysql數據文件
sudo mkdir /my/mysql/conf.d #用於掛載mysql配置文件
sudo chown yaoren:docker /my #修改/my目錄擁有者

4 使用鏡像建立容器
docker run --name mysql5.7 -p 3306:3306 -v /my/mysql/datadir:/var/lib/mysql -v /my/mysql/conf.d:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
命令解析:
--name:容器名

--p:映射宿主主機端口

-v:掛載宿主目錄到容器目錄

-e:設置環境變量,此處指定root密碼

-d:後臺運行容器

5 測試是否成功

mysql -h192.168.2.102 -p3306 -uroot -p

參考連接
https://itbilu.com/linux/docker/EyP7QP86M.html
相關文章
相關標籤/搜索