linux學習-DAY4-Docker

Docker

Docker 的優勢

  • 提供簡單輕量的建模方式
  • 職責的邏輯分離
  • 快速高效的生命週期
  • 鼓勵使用面向服務的架構

Docker 的組成

  • Docker C/S結構python

    ​ Docker是C/S(客戶端client-服務器server)架構模式。
    docker經過客戶端鏈接守護進程,經過命令向守護進程發出請求,守護進程經過一系列的操做返回結果。
    docker客戶端能夠鏈接本地或者遠程的守護進程。linux

  • Docker Image鏡像nginx

    ​ 鏡像是容器的基石,容器基於鏡像啓動和運行。鏡像就好像容器的源代碼,保存了容器各類啓動的條件。鏡像是一個層疊的只讀文件系統。web

  • Docker container容器docker

    ​ 容器經過鏡像來啓動,容器是docker的執行來源,能夠執行一個或多個進程。鏡像至關於構建和打包階段,容器至關於啓動和執行階段。容器啓動時,Docker容器能夠運行、開始、中止、移動和刪除。每個Docker容器都是獨立和安全的應用平臺。數據庫

    ​ 要注意的是,因爲容器是基於鏡像的,因此無論對容器怎樣的操做,一旦容器重啓,一切都會變成最開始的樣子。json

  • Docker registry 倉庫vim

    ​ docker倉庫用來保存鏡像。docker倉庫分爲公有和私有。docker公司提供公有倉庫docker hub,網址:https://hub.docker.com/。咱們也能夠建立本身私有的倉庫。centos

1、安裝

# 1.配置源
curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
    
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


# 2.下載docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r
yum install -y --setopt=obsoletes=0 \
docker-ce-17.03.2.ce-1.el7.centos.x86_64 \
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

# 3.啓動docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
# 優化鏡像的安裝
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
EOF

2、鏡像

1.基本使用

# 1.獲取鏡像
    # 查詢遠程倉庫中的centos
    docker search centos
    
    # 下載鏡像(服務、系統)
    docker pull centos:6.9
    docker pull centos:7.5.1804
    docker pull nginx
    
# 2.查詢鏡像
    # 查詢擁有的鏡像
    docker images
    # 顯示所擁有的鏡像的ID
    docker images -q 
    # 經過鏡像ID或者鏡像名加標籤查詢鏡像,並顯示詳細信息
    docker inspect ID/name:tag
        
# 3.刪除鏡像
    # 根據ID刪除鏡像
    docker rmi  ID 
    # 查詢全部鏡像ID並刪除
    docker rmi `docker images -q`
    docker rmi $(docker images -q)
    
# 4.導入導出鏡像
    # 導出
    docker image save nginx >/opt/nginx.tar.gz
    # 導入
    docker image load -i /opt/nginx.tar.gz
    
# 5.啓動容器並獲取鏡像
    docker  run -d -p 80:80 httpd
    docker  run -it --name "test" centos:6.9
    # -d: 後臺運行容器,並返回容器ID;
    # -p: 端口映射,格式爲:主機(宿主)端口:容器端口;
    # -i: 以交互模式運行容器,一般與 -t 同時使用;
    # -t: 爲容器從新分配一個僞輸入終端,一般與 -i 同時使用;
    # --name="nginx-lb": 爲容器指定一個名稱;
    # httpd/centos6.9:能夠根據鏡像名或鏡像ID來啓動鏡像

2.製做鏡像

語法

docker commit xxxxxx oldguo/wordpress:v1
# xxxxxx:擁有的鏡像名/鏡像ID
# oldguo/wordpress:製做的鏡像名
# v1:製做的鏡像標籤

# 爲什麼要製做鏡像
# 好比我對centos7.5添加了一些軟件,而後不想每次都啓動原始的centos7.5,都要再添加一次軟件,因此,能夠把添加軟件後的centos7.5製做成一個鏡像,而後啓動這個鏡像就行

製做鏡像: centos7.5+vim+net-tools+iproute+sshd

# 1.啓動新容器
docker run -it --name "centos7.5" 76d6bc25b8a5

# 2.優化yum源
mv /etc/yum.repos.d/*.repo /tmpecho -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub/centos7\ngpgcheck=0">/etc/yum.repos.d/ftp.repo

# 3. 安裝必須軟件包
yum install -y vim net-tools iproute openssh-*   -y

# 4.啓動SSHD
mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
# 分配公鑰
/usr/bin/ssh-keygen -A
/usr/sbin/sshd -D 
 
 
 # 注意: 以上操做作完以後,會一直不退出,須要用如下命令退回到宿主機,並不關閉容器   ctrl+p+q

# 5.製做鏡像,以便往後使用
docker commit centos7.5 oldguo/centos7_sshd:v2

3.dockerfile

# dockerfile 能夠快速建立一個鏡像
# 咱們就使用dockerfile來快速建立一個centos7.5+vim+net-tools+iproute+sshd的鏡像

# 1.建立一個dockerfile文件
vim  dockerfile 
# 2.輸入內容
FROM centos:7.5.1804
RUN mv /etc/yum.repos.d/*.repo /tmp
RUN echo -e "[ftp]\nname=ftp\nbaseurl=ftp://10.0.0.100/pub/centos7\ngpgcheck=0">/etc/yum.repos.d/ftp.repo
RUN yum install -y openssh-server
RUN yum install -y openssh-clients
RUN yum install net-tools* -y
RUN yum install iproute-* -y
RUN mkdir /var/run/sshd
RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
RUN sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
RUN echo 'root:123456' | chpasswd
RUN /usr/bin/ssh-keygen -A
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

# 3.執行dockerfile文件
docker build -t "oldguo/centos7_sshd:v3" /opt/dockerfile

# docker build 命令用於使用 Dockerfile 建立鏡像。
# 使用時要指定dockerfile文件所在的目錄,若不指定,就會從當前目錄裏找

3、容器

1.容器的類型

按用途容器大體能夠分爲兩類:服務類容器和工具類容器安全

# 1. 服務類容器以daemon的形式運行,對外提供服務。好比web server,數據庫等。經過-d參數以守護方式啓動這類容器很是合適。若是須要排查問題,能夠經過exec -it進入容器
    # 工具類:vim
    docker run -it --name="test_vim"  3fe2fe0dab2e /bin/bash

# 2. 工具類容器一般給咱們提供一個臨時的工做環境,一般以run -it方式運行
    # 服務類:nginx 
    # -d:後臺運行
    docker run -d -p 8080:80 --name="discuz" nginx:1.14

2.容器的多類啓動方式

①啓動進入容器指定bash 退出後容器關閉

docker  run -it --name "test" centos:7.5.1804 /bin/bash
# 1.使用-it+/bin/bash執行後,會在容器後臺啓動一個bash進程,顯示該容器的終端
# /bin/bash的做用是由於docker後臺必須運行一個進程,不然容器就會退出

# 2.使用/bin/bash啓動鏡像的時候若是沒有帶參數 -it的話,容器會直接退出

# 3.使用-it執行後,容器從新分配一個僞輸入終端,容器不會當即退出,直到exit容器才關閉

# 注:
# 針對於工具類的容器,因爲是一次性使用的,一旦exit容器,容器就自動關閉。
# 對於想要退出後還能夠在後臺執行的,好比服務類,可使用Ctrl+p+q。

②docker attach進入容器

# 若是容器沒有指定bash環境會停留在空白頁面 退出後容器也會正常退出(進入容器後其餘人進入容器能夠看到你輸入的信息

docker  attach  test

# attach進入的容器應當是已經啓動的容器,當有多臺主機經過attach進入同一臺容器時,全部的操做都是多臺主機同時可見的,當退出時也是同時退出
# 也能夠理解爲,attach是對一臺容器開了多個終端操做,當其中一臺終端操做時,會反映到全部的終端上

③docker exec 進入容器 會啓用一個bash環境

# exec也是進入一個已經開啓的容器中,可是會新啓用一個bash環境,不會像attach同樣同步到每一個終端
docker exec -it test /bin/bash

3.容器的經常使用管理命令

# 查看容器
# -a:顯示全部的容器,包括未運行的。
# -q:只顯示容器編號
# -l:顯示最近建立的容器。
docker ps -a  -q -l
# 查看容器中運行的進程信息
docker top nginx


# 刪除一個或多少容器
# -f:經過SIGKILL信號強制刪除一個運行中的容器
# -l:移除容器間的網絡鏈接,而非容器自己
# -v:刪除與容器關聯的卷
docker rm 容器ID|容器名稱
# 批量刪除已關閉
docker rm -v $(docker ps -aq -f status=exited)
# 批量強制刪除全部
docker rm -f `docker ps -a –q`
    
# 獲取容器/鏡像的元數據,包括IP等
docker inspect nginx

# 鏈接到正在運行中的容器。
docker attach 容器ID|容器名稱(工具類)配合ctrl+p+q
docker exec  -i -t  容器ID|容器名稱 /bin/bash(服務類),通常是作服務類容器調試用

# 中止一個運行中的容器
docker stop 容器ID|容器名稱
       
# 殺掉一個運行中的容器。
docker kill 容器ID|容器名稱
      
# 啓動一個或多個已經被中止的容器          
docker  start 容器ID|容器名稱
 
# 重啓容器
docker  restart 容器ID|容器名稱

4、數據卷(持久化)

在Docker的使用過程當中每每須要對數據進行持久化,或者須要在多個容器之間進行數據共享,因此這就涉及到Docker容器的數據操做。 容器中數據管理主要有兩種方式:

數據卷和數據卷容器

  • 數據卷(Data Volumes) 容器內數據直接映射到本地宿主機。
  • 數據卷容器(Data Volume Containers) 使用特定容器維護數據卷

1.使用

# 啓動時指定:
docker run -it --name="centosv1" -v /opt/datavolumns:/data centos  /bin/bash
# Dockerfile中指定
VOLUMES [「/data」]
docker inspect centosv1

2.數據卷數據的備份及恢復

# 備份
docker run --volumes-from  centosv1 --name 「centosvbak「 --rm  -v /backup:/backup:rw  centos   tar cvf /backup/data.tar /data 

# 恢復      
docker run --volumes-from  centosv1 --name "centosrestore" --rm  -v /backup:/backup:rw  centos   tar xvf  /backup/data.tar

5、倉庫

1.配置私有倉庫

# 1.
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/Registry:/var/lib/registry  registry

# 2.配置
vim /etc/docker/daemon.json

{
   "registry-mirrors":              ["https://68rmyzg7.mirror.aliyuncs.com"],
   "insecure-registries": ["10.0.0.100:5000"]
}

# 3.重啓docker
systemctl  restart docker

2.使用本地鏡像

# 配置好私有倉庫,咱們就能夠把製做好的鏡像放到本地的私有倉庫,方便下載使用

# 1.製做本地鏡像並push到私有倉庫
# 爲本地鏡像nginx打上標籤
# IP地址加上私有倉庫的端口號(10.0.0.100:5000/)是必須的,後面的名字就隨意了
docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
docker push 10.0.0.100:5000/oldguo/nginx:v1
        
# 2.異地進行pull鏡像,從本地的私有倉庫下載鏡像
docker pull  10.0.0.100:5000/oldguo/nginx:v1
相關文章
相關標籤/搜索