Docker--使用


1 docker跟傳統虛擬機的比較

0 各種軟件用什么語言寫的
    zabbix(監控軟件):php
    ansible(批量管理主機,執行命令,無angent):python
    openstack(雲計算,管理虛擬機):python
    jekins(ci/di):自動化部署,java
    salstack(批量管理主機,執行命令,有angent):python
    普羅米修斯(Prometheus,監控):go寫的
    docker:go
    k8s:go
1 什么是虛擬化?
	-vmware,kvm,openstack,docker,k8s
    -雲服務器:vmware,kvm虛擬化出來的
    -阿里雲,騰訊雲:opensatck,阿里飛天,用來管理虛擬化出來的操作系統
    -docker:進程級別的隔離,裝在虛擬機,雲服務器上,一個雲服務上開業跑出成幾百個docker容器,成百上千的服務器上,就會有個上萬個容器
    -k8s:不同機器的上萬個容器如何管理    
    -虛擬化:打破實體結構間的不可切割的障礙    
2 什么是Docker?
	- Go語言實現,開源出來,很多人用
    - docker-ce(免費),docker-ee(收費)
    - 通過go語言對lxc技術的一個封裝
    -上手快,簡單
3 容器與虛擬機比較
	-docker不需要虛擬硬件和操作系統,輕量級,占用體積小,啟動快    
4 Docker是一個客戶端-服務器(C/S)架構程序(mysql,redis都是cs架構),整套RESTful API
5 docker非常重要的概念:鏡像(image)與容器(container)
	有了鏡像---》鏡像運行起來是容器(真正的執行單位)
    面向對象的類     對象
6 鏡像是從哪里來的?
	-鏡像就是一堆文件
	-從遠程倉庫獲取(拉取)

2 docker架構圖

 

 

3 docker安裝

3.1 windows安裝

1 windows安裝(不建議裝)http://get.daocloud.io/

3.2 烏班圖

# 0 卸載
sudo apt-get remove docker docker-engine docker.io containerd runc
# 1 安裝必要工具
sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# 2 安裝GPG證書
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
#換成阿里雲
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# 2 寫入軟件源信息
#官方
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
#換成阿里雲
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# 3 更新並安裝docker-ce
sudo apt-get -y install docker-ce
# 4 開啟docker服務
 systemctl status docker

3.3 centos上安裝(必須7.0以上)

# 6.8安裝docker,自行搜索,升級內核版本
# docker是在linux3.1以上內核中寫出來的,在烏班圖下開發的,docker的新特性,烏班圖先看到,
# 官方建議docker運行在centos7 以上的系統

#####安裝
0 卸載
yum remove docker docker-common  docker-selinux docker-engine
rm -rf /var/lib/docker

1 更新yum
yum update
2 安裝需要的軟件包, yum-util 
yum install -y yum-utils device-mapper-persistent-data lvm2
3 執行(向你的yum源,增加一條記錄)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4 安裝 
yum install docker-ce

5 驗證安裝(查看版本)
docker -v  
~]# docker -v  (19年03月12日發布)
# 自從分了docker-ce和docker-ee以后,以年份命名版本
Docker version 19.03.12, build 48a66213fe

6 啟動docker服務
systemctl start docker

7 停止docker服務,重啟docker服務
systemctl stop docker
systemctl restart docker

8 開機啟動	
systemctl enable docker

9 查看概要信息
docker info(你可能寫了一個管理docker的運維平台)

3.4 遠程倉庫

# 注冊,登錄 https://hub.docker.com/
# 你可以上傳鏡像(類似於github),你把你制作的鏡像傳上去,別人可以下載使用

# 配置加速(之前去https://hub.docker.com/),阿里雲,清華,做了一個備份,配置好以后,再拉鏡像會去國內地址拉取
第一步:vi /etc/docker/daemon.json  
第二步:
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

4 鏡像操作


-1 第一個hello-world(沒有任何意義)
	docker run hello-world
	1 客戶端連到服務端,服務下載了hello-world鏡像
    2 通過鏡像跑起容器來
    3 容器輸出一些東西,通過服務端發送給客戶端,客戶端展示在窗口里了

0 查找鏡像
	方式一:https://hub.docker.com/ 點點點搜索(你用這種)
    方式二:docker search 
1 拉取鏡像 
	docker pull hello-world  最新版本latest
	docker pull hello-world:nanoserver
2 查看機器上有哪些鏡像
 	docker images
    REPOSITORY  TAG   IMAGE ID   CREATED   SIZE
	鏡像名字      版本   id號       創建時間   大小
3 刪除鏡像
	docker rmi 鏡像名字/id號(# 如果還有基於這個鏡像的容器,是不允許刪除鏡像的,先刪除容器,再刪除images)
    
    
    
4 練習:拉取python3.6鏡像,redis最新鏡像,mysql5.7鏡像
    docker pull python:3.6
    docker pull redis
    docker pull mysql5.7
    docker pull centos:centos7
    
5 鏡像是什么?
	-就是一堆文件,這堆文件通過docker跑起來,就是容器,你現在就把他當成,一個操作系統內跑了這個軟件(centos+redis)
    -假設centos7的鏡像跑起來,容器你就當成在你宿主機上跑了一個centos7的操作系統(虛擬機)
    
    
    
 6 補充(了解)
	docker image inspect 46ff56815c7c
    docker image ls
    docker image rm
    

5 容器操作

1 刪除容器
 docker rm 容器名字/容器id
    
2 啟動並運行容器
	# 通過centos:centos7鏡像,創建一個容器名字叫mycentos,並且把它運行起來
	docker run -di --name=mycentos centos:centos7
    打印出容器的id號
3 查看機器上正在運行的容器
	docker ps
4 查看宿主機上所有的容器(包括停止的)
	docker ps -a
5 停止容器
	docker stop 容器名字/id號
6 啟動容器
	docker start 容器id/名字
    
7 容器的創建和啟動(******)
	-創建:docker create --name=xxx redis
    docker create --name=test-container centos:centos7 ps -A
    -啟動
    docker start test-container
    
    -容器一直運行的原因
    	-它有一條前台進程,一直在運行
        -以后如果自己制作的鏡像,運行起容器,必須有個可以夯住的命令
        -如果該命令結束,該容器也就結束了
        
    -創建並啟動(run)
    -i:表示運行容器
    -t:表示容器啟動后會進入其命令行。加入這兩個參數后,容器創建就能登錄進去。即分配一個偽終端。
    -d:在run后面加上-d參數,則會創建一個守護式容器在后台運行(這樣創建容器后不會自動登錄容器,如果只加-i -t兩個參數,創建后就會自動進去容器)。
    --name :為創建的容器命名。如果不寫,會自動分配一個名字(英文人名)
    -v:表示目錄映射關系(前者是宿主機目錄,后者是容器目錄,映射到宿主機上的目錄),可以使用多個-v做多個目錄或文件映射。注意:最好做目錄映射,在宿主機上做修改,然后共享到容器上。
    -p:表示端口映射,前者是宿主機端口,后者是容器內的映射端口。可以使用多個-p做多個端口映射
    docker run -it --name=myredis redis
    	
 # 注意,docker run  鏡像 如果本地沒有,會先pull,再run

8 進入容器的幾種方式(並不是真進入)
	第一種:docker exec -it  容器id /bin/bash
    	docker exec 容器id ls 
        exec真正的作用是在容器內執行命令
    第二種:ssh連接(容器內部裝ssh服務端)
9 退出
	exit
    
10 文件拷貝
	-從宿主機拷貝到容器內部
    	docker cp lqz.txt 容器id:/home
    -從容器內部拷貝到宿主機
    	docker cp 容器id:/home/lqz.txt /app
11 目錄掛載	
	docker run -di --name=mycentos99 -v /home/lqz:/home centos:centos7
    # 一旦掛載,以后宿主機目錄內修改,同樣影響容器內部
12 端口映射
	docker run -di -p 6377:6379 redis:latest
    
    # 了解:/usr/local/bin/docker-entrypoint.sh
    
13 查看容器詳細信息
	docker inspect f81
    # 查看ip地址
    docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名稱(容器ID)

6 應用部署

# 在容器內部署mysql
# -e表示環境變量

docker run -di --name=mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
# 官方提供的
docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
        
# 在容器內部署redis
docker run -di -p 6377:6379 redis:latest
        
# 在容器內部署nginx
docker run -di --name=mynginx -p 8080:80 nginx


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM