Docker--鏡像、卷、端口映射管理

docker鏡像製作

docker鏡像

  • 是應用發佈的標準格式
  • 可支撐一個docker容器的運行

docker鏡像的分層
(1)Dockerfile中的每個指令都會創建一個新的鏡像層
(2)鏡像層將被緩存和複用
(3)當Dockerfile的指令修改了,複製的文件變化了,或者構建鏡像時指定的變量不同了,對用的鏡像緩存就會失效
(4)某一層的鏡像緩存失效後,它之後的鏡像緩存都會失效
(5)鏡像層是不可變的,如果在某一層中添加一個文件,然後在下一層中刪除它,則鏡像中依然會包含該文件
構建鏡像的方式
(1)Dockerfile:類似於DIY
(2)基於已有的容器進行創建鏡像
(3)基於本地模板創建
基於Dockerfile創建鏡像
(1)Dockerfile是由一組指令組成的文件
(2)Dockerfile結構部分

  • 基礎鏡像信息
  • 維護者信息
  • 鏡像操作指令
  • 容器啓動時執行指令

(3)Dockerfile操作指令
在這裏插入圖片描述
(4)通過Dockerfile創建鏡像

[root@docker ~]# mkdir /aaa
[root@docker ~]# cd /aaa/
[root@docker aaa]# vim Dockerfile
#基礎鏡像
FROM centos:7
#用戶信息
MAINTAINER this is test httpd
#基於基礎鏡像安裝軟件
RUN yum -y update
RUN yum -y install httpd
#開啓端口
EXPOSE 80
#複製首頁到指定站點
ADD index.html /var/www/html/index.html
#複製啓動腳本到鏡像中
ADD run.sh /run.sh
#設置run.sh執行權限
RUN chmod 755 /run.sh
#啓動容器時執行操作
CMD ["/run.sh"]

[root@docker aaa]# vim run.sh
#!/bin/bash
rm -rf /run/httpd/*
exec /usr/sbin/apachectl -D FOREGROUND

[root@docker aaa]# echo "this is test web" > index.html
#創建鏡像
[root@docker aaa]# docker build -t httpd:centos .	//此處的"."不能漏掉,指定本地文件夾
#每執行一條Dockerfile指令時,系統會自動創建一個臨時文件,指令完成後會自動刪除
#鏡像創建完成後,只會存在鏡像,不會有容器存在
[root@docker aaa]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
httpd               centos              6d9362242673        About a minute ago   524MB
centos              7                   5e35e350aded        5 months ago         203MB
#創建鏡像
[root@docker aaa]# docker run -d -P httpd:centos
[root@docker apache]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS                     NAMES
e088487b3f73        httpd:centos        "/run.sh"           4 seconds ago       Up 4 seconds                 0.0.0.0:32768->80/tcp     happy_poincare

使用本地瀏覽器,訪問http://192.168.7.168:32768
在這裏插入圖片描述
基於已有的鏡像容器進行創建

#先製作一個容器
[root@docker ~]# docker create -it centos:7 /bin/bash
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
49b6c163a548        centos:7            "/bin/bash"         8 seconds ago       Created                                    flamboyant_tereshkova
#將容器製作爲鏡像
[root@docker ~]# docker commit -m "new" -a "centos" 49b6c163a548 centos:test
[root@docker ~]# docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              test                fcf3f1eb383c        19 seconds ago      203MB

基於本地模板創建

#先下載一個模板,上傳至虛擬機內
[root@docker opt]# ls
debian-7.0-x86-minimal.tar.gz
#製作鏡像
[root@docker opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - debian:new
[root@docker opt]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
debian              new                 7af22147c1ad        8 seconds ago       215MB

私有倉庫建立

私有倉庫的配置步驟
(1)下載registry鏡像,在字符終端
(2)客戶端設置daemon.json文件,指定私有倉庫位置
(3)生成registry容器,開放5000端口
(4)鏡像打標籤:docker tag 原鏡像名 倉庫IP:端口/鏡像名
(5)上傳鏡像:docker push 倉庫IP:端口/鏡像名
(6)下載鏡像:docker pull 倉庫IP:端口/鏡像名(使用docker images查看)

  • 執行步驟
[root@docker ~]# docker pull registry
[root@docker ~]# vim /etc/docker/daemon.json 
{
  "insecure-registries": ["192.168.7.168:5000"],    //不同參數選項之間使用","相隔
  "registry-mirrors": ["https://syy5204b.mirror.aliyuncs.com"]
}
[root@docker ~]# systemctl restart docker
[root@docker ~]# docker run -d -p 5000:5000 -v /data/registry:/tpm/registry registry
#宿主機中的/data/registry會自動創建掛載容器中的/tpm/registry
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
4e3029f01510        registry            "/entrypoint.sh /etc…"   4 seconds ago       Up 4 seconds        0.0.0.0:5000->5000/tcp   eager_northcutt
[root@docker ~]# docker pull nginx 
[root@docker ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              e791337790a6        About an hour ago   127MB
[root@docker ~]# docker tag nginx:latest 192.168.7.168:5000/nginx
[root@docker ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
192.168.7.168:5000/nginx   latest              e791337790a6        2 hours ago         127MB
[root@docker ~]# docker push 192.168.7.168:5000/nginx
#獲取私有倉庫的列表
curl -XGET http://192.168.7.168:5000/v2/_catalog
{"repositories":["nginx"]}
[root@docker ~]# docker rmi 192.168.7.168:5000/nginx:latest 
[root@docker ~]# docker pull 192.168.7.168:5000/nginx
Using default tag: latest
latest: Pulling from nginx
Digest: sha256:6b3b6c113f98e901a8b1473dee4c268cf37e93d72bc0a01e57c65b4ab99e58ee
Status: Downloaded newer image for 192.168.7.168:5000/nginx:latest
192.168.7.168:5000/nginx:latest
[root@docker ~]# docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
192.168.7.168:5000/nginx   latest              e791337790a6        2 hours ago         127MB

docker數據卷

數據卷:掛載宿主系統的存儲空間

[root@docker ~]# docker pull centos
#宿主機目錄/var/www/掛載容器中的/data1
#這些目錄不需要自己手動創建,系統會自動創建
[root@docker ~]# docker run -v /var/www:/data1 --name test1 -it centos /bin/bash
[root@3ea73938c9b5 /]# cd /data1/
[root@3ea73938c9b5 data1]# touch test123

#返回宿主機進行查看
[root@docker ~]# ls /var/www/
test123

數據卷容器

數據卷容器:掛載容器的存儲空間

#創建數據卷容器
[root@docker ~]# docker run --name web100 -v /data1 -v /data2 -it centos /bin/bash
[root@44c8fbe8e01a /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin	sys  usr
#新容器掛載數據卷容器web100
[root@docker ~]# docker run -it --volumes-from web100 --name db1 centos /bin/bash
[root@9b0b7f686192 /]# ls
bin    data2  etc   lib    lost+found  mnt  proc  run	srv  tmp  var
data1  dev    home  lib64  media       opt  root  sbin	sys  usr
#在新容器創建文件,到數據卷容器可以查看到相同的內容

端口映射

  • -P:指定隨機映射端口
  • -p:在固定的IP地址映射
#不指定端口
[root@docker ~]# docker run -d -P nginx
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                     NAMES
6dd91cea1325        nginx               "nginx -g 'daemon of…"   4 seconds ago       Up 4 seconds                  0.0.0.0:1234->80/tcp      eager_mclean
#指定端口
[root@docker ~]# docker run -d -p 1234:80 nginx
[root@docker ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                     NAMES
fd952499c2c5        nginx               "nginx -g 'daemon of…"   8 seconds ago       Up 7 seconds                  0.0.0.0:32768->80/tcp     infallible_beaver

容器互聯

#創建並運行容器取名web1,端口號自動映射
[root@docker ~]# docker run -itd -P --name web1 centos /bin/bash
#創建並運行容器取名web2,關聯web1
[root@docker ~]# docker run -itd -P --name web2 --link web1:web1 centos /bin/bash
#在web2可以直接ping通web1
[root@docker ~]# docker exec -it 3c0d72923de3 /bin/bash
[root@3c0d72923de3 /]# ping web1
PING web1 (172.17.0.5) 56(84) bytes of data.
64 bytes from web1 (172.17.0.5): icmp_seq=1 ttl=64 time=0.200 ms
64 bytes from web1 (172.17.0.5): icmp_seq=2 ttl=64 time=0.110 ms
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章