docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)
文章目錄
- docker鏡像
- 制作鏡像的過程
- 基于已有鏡像創(chuàng)建
- 基于本地模板創(chuàng)建
- 基于Dockerfile創(chuàng)建
- Dockerfile操作指令
- Docker的數(shù)據(jù)管理
- 數(shù)據(jù)卷
- docker的網(wǎng)絡(luò)通信
- 容器互聯(lián)
- 配置docker
- 基于已有鏡像創(chuàng)建實驗過程
- 基于本地模板創(chuàng)建實驗過程
- 基于基礎(chǔ)鏡像實驗過程
- Docker數(shù)據(jù)卷
- 驗證階段
- 數(shù)據(jù)卷容器
- 建立私有倉庫
- 刪除與恢復
- 端口映射
- 容器互聯(lián)
docker鏡像
制作鏡像的過程
Docker鏡像的創(chuàng)建
●應用發(fā)布的標準格式
●支撐一個Docker容器的運行
Docker鏡像的創(chuàng)建方法
●基于已有鏡像創(chuàng)建
●基于本地模板創(chuàng)建
●基于Dockerfile創(chuàng)建
基于已有鏡像創(chuàng)建
將容器里面運行的程序及運行環(huán)境打包生成新的鏡像
docker commit[選項]容器ID/名稱倉庫名稱:[標簽]- -m說明信息
- -a作者信息
- -p生成過程中停止容器的運行
基于本地模板創(chuàng)建
- 通過導入操作系統(tǒng)模板文件生成新的鏡像
- 使用wget命令導入為本地鏡像
導入成功后可查看本地鏡像信息
docker images lgrep new基于Dockerfile創(chuàng)建
Dockerfile是由一組指令組成的文件
Dockerfile結(jié)構(gòu)四部分
-
基礎(chǔ)鏡像信息
-
維護者信息
-
鏡像操作指令
-
容器啟動時執(zhí)行指令
Dockerfile每行支持一條指令,每條指令可攜帶多個參
數(shù),支持使用以“#“號開頭的注釋
Dockerfile操作指令
| FROM鏡像 | 指定新鏡像所基于的境像,第一條指令必須為FROM指令,每創(chuàng)建一個鏡像就需要—條FROM指令。 |
| MAINTAINER名字 | 說明新鏡像的維護人信息 |
| RUN命令 | 在所基于的鏡像上執(zhí)行命令,并提交到新的鏡像中 |
| CMD[“要運行的程序“,”參數(shù)1,“參數(shù)2“] | 指令啟動容器時要運行的命令或者腳本,Dockerfile只能有,一條CMD命令,如果指定多條則只能最后一條祧執(zhí)行 |
| EXPOSE端口號 | 指定新鏡像加載到Docker時要開啟的端口 |
| ENV環(huán)境變量變量值 | 設(shè)置一個環(huán)境變量的值,會被后面的RUN使用 |
| ADD 源文件/目錄目標文件/目錄 | 將源文件復制到目標文件,源文件要與Dockerfile位于相同,目錄中,或者是一個URL |
| COPY 源文件/目錄目標文件/目錄 | 將本地主機上的文件/目錄復制到目標地點,源文件/目錄要與Dockerfile在相同的目錄中 |
| VOLUME[“目錄“] | 在容器中創(chuàng)建一個掛載點 |
| USER 用戶名/UID | 指定運行容器時的用戶 |
| WORKDIR路徑 | 為后續(xù)的RUNCMD、ENTRYPOINT指定工作目錄 |
| ONBUILD命令 | 指定所生成的鏡像作為一個基礎(chǔ)鏡像時所要運行的命令 |
| HEALTHCHECK | 健康檢查 |
ADD與RUN的區(qū)別:
ADD是外部宿主機上某一個文件復制到容器上面
RUN是在容器的路徑復制到自己的另一個路徑
Docker的數(shù)據(jù)管理
數(shù)據(jù)管理操作
-
方便查看容器內(nèi)產(chǎn)生的數(shù)據(jù)
-
多容器間實現(xiàn)數(shù)據(jù)共享
兩種管理方式
●數(shù)據(jù)卷
●數(shù)據(jù)卷容器
數(shù)據(jù)卷
數(shù)據(jù)卷是一個提供容器使用的特殊目錄
創(chuàng)建數(shù)據(jù)卷
掛載主機目錄作為數(shù)據(jù)卷
docker run -d -v /var/www:/data1 --name web-1 httpd:centos-v:提供2個目錄
數(shù)據(jù)卷與數(shù)據(jù)卷容器的區(qū)別:
數(shù)據(jù)卷是與宿主機連接;數(shù)據(jù)卷容器是容器與容器連接
docker的網(wǎng)絡(luò)通信
端口映射
●端口映射機制將容器內(nèi)的服務提供給外部網(wǎng)絡(luò)訪問
●可隨機或指定映射端口范圍
容器互聯(lián)
●在源容器和接收容器間建立一條網(wǎng)絡(luò)通信隧道
●使用docker run命令–link選項實現(xiàn)容器間互聯(lián)通信
實現(xiàn)容器互聯(lián)
配置docker
[root@localhost ~]# yum install -y yum-untils device-mapper-persistent-data lvm2 設(shè)置阿里云鏡像源 [root@localhost ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [root@localhost yum.repos.d]# yum install docker-ce 開啟容器 [root@localhost ~]# systemctl start docker.service 鏡像加速cd /etc/docker/tee /etc/docker/daemon.json <<-'EOF' {"registry-mirrors": ["https://ctzniuyu.mirror.aliyuncs.com"] } EOF[root@localhost docker]# systemctl daemon-reload [root@localhost docker]# systemctl restart docker ----------------------網(wǎng)頁優(yōu)化-----------[root@localhost docker]# vim /etc/sysctl.conf net.ipv4.ip_forward=1[root@localhost docker]# sysctl -p [root@localhost docker]# service network restart [root@localhost docker]# systemctl restart docker查看docker是否開啟
[root@localhost docker]# ifconfig docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255ether 02:42:fe:77:f0:77 txqueuelen 0 (Ethernet)RX packets 0 bytes 0 (0.0 B)RX errors 0 dropped 0 overruns 0 frame 0TX packets 0 bytes 0 (0.0 B)TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0基于已有鏡像創(chuàng)建實驗過程
下載鏡像
[root@localhost docker]# docker pull centos:7創(chuàng)建容器
[root@localhost docker]# docker create -it centos:7 /bin/bash開啟容器
[root@localhost docker]# docker start 394a829c69f5創(chuàng)建鏡像
[root@localhost docker]# docker commit -m "new" -a "daoke" 394a829c69f5 daoke:test查看鏡像
[root@localhost docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE daoke test 6874a5a17024 About a minute ago 203MB centos 7 7e6257c9f8d8 5 weeks ago 203MB基于本地模板創(chuàng)建實驗過程
放入模板進去debian-7.0-x86-minimal.tar.gz
[root@localhost opt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new基于基礎(chǔ)鏡像實驗過程
創(chuàng)建Dockerfile
[root@localhost opt]# mkdir apache [root@localhost opt]# cd apache/ [root@localhost apache]# vim Dockerfile (名字不可以改必須是這個) FROM centos:7 #維護鏡像的用戶信息 MAINTAINER THIS IS ky03 RUN yum -y update RUN yum -y install httpd #開啟80端口 EXPOSE 80 #復制網(wǎng)址首頁文件 ADD index.html /var/www/html/index.html #執(zhí)行腳本復制到鏡像中 ADD run.sh /run.sh RUN chmod 755 /run.sh #啟動容器執(zhí)行腳本 CMD ["/run.sh" ]編寫網(wǎng)址
[root@localhost apache]# vim index.html <h1>this is 01web </h1>編寫啟動命令
[root@localhost apache]# vim run.sh #!/bin/bash rm -rf /run/httpd/* exec /usr/sbin/apachectl -D FOREGROUND生成鏡像
[root@localhost apache]# docker build -t httpd:centos .//映射端口運行容器
docker run -d -p 8080:80 httpd:centos畫圖理解
我們映射的是8080給外網(wǎng)可以訪問
打開游覽去查看
http://192.168.136.88:8080
Docker數(shù)據(jù)卷
場景:我們要添加一些插件可以直接在/var/www中寫入就可以在容器中添加
可以直接把宿主機/var/www文件掛載到容器/data1
[root@localhost ~]# docker run -v /var/www:/data1 --name web1 -it centos:7 /bin/bash可以看到/var/www已經(jīng)生成
驗證階段
1和2是相同中終端
開啟一臺相同的終端(192.168.136.30-1)
[root@176ee193587a /]# cd data1/ [root@176ee193587a data1]# touch abc.txt [root@176ee193587a data1]# ls abc.txt開啟一臺相同的終端(192.168.136.30-2)
[root@localhost ~]# cd /var/www/ [root@localhost www]# ls abc.txt數(shù)據(jù)卷容器
場景:可以通過數(shù)據(jù)卷容器共享就可以跟新一個容器讓其他所有的容器更新
創(chuàng)建數(shù)據(jù)卷容器
[root@localhost ~]# docker run --name web100 -v /data1 -v /data2 -it centos:7 /bin/bash新容器掛載數(shù)據(jù)卷web100
docker run -it --volumes-from web100 --name web99 centos:7 /bin/bash查看是否成功
建立私有倉庫
下載鏡像 (端口號5000)
[root@localhost apache]# docker pull registry添加私庫加速
{"insecure-registries":["192.168.136.30:5000" ],"registry-mirrors": ["https://ctzniuyu.mirror.aliyuncs.com"] }注意:逗號一定要加不然報錯
開啟服務
[root@localhost ~]# systemctl restart docker查看狀態(tài)
[root@localhost apache]# systemctl status docker創(chuàng)建容器
[root@localhost apache]# docker create -it registry /bin/bash開啟容器
[root@localhost ~]# docker start 544bddf8706a 544bddf8706a [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 544bddf8706a registry "/entrypoint.sh /bin…" About a minute ago Exited (127) 34 seconds ago distracted_wu我們發(fā)現(xiàn)還是沒有開啟
是應為沒有添加守護進程
[root@localhost ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry [root@localhost ~]# docker ps -a 查看已經(jīng)開啟 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f17e9bddded registry "/entrypoint.sh /etc…" 20 seconds ago Up 19 seconds上傳倉庫
添加nginx鏡像
[root@localhost apache]# docker pull nginx上傳到私庫
docker tag nginx:latest 192.168.136.30:5000/nginx顯示上傳內(nèi)容(上傳沒有成功)
[root@localhost ~]# curl -XGET http://192.168.136.30:5000/v2/_catalog {"repositories":[]}測試私有庫倉庫下載
[root@localhost ~]# docker push 192.168.136.30:5000/nginx顯示上傳成功
[root@localhost ~]# curl -XGET http://192.168.136.30:5000/v2/_catalog {"repositories":["nginx"]}刪除與恢復
刪除私庫
[root@localhost apache]# docker rmi nginx:latest [root@localhost apache]# docker rmi 192.168.136.30:5000/nginx:latest上傳恢復私庫
[root@localhost apache]# docker pull 192.168.136.30:5000/nginx端口映射
[root@localhost ~]# docker run -d -P 192.168.136.30:5000/nginx 42ebf8922afd4c486947f83d3b71eb5f4460278be6abafbd0af1dd7e6e3bdc84 [root@localhost ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 42ebf8922afd 192.168.136.30:5000/nginx "/docker-entrypoint.…" 32 seconds ago Up 30 seconds 0.0.0.0:32768->80/tcp affectionate_yalow容器互聯(lián)
連接web11和其他通信(創(chuàng)建并運行web1,端口號自動映射)
[root@localhost apache]# docker run -itd -P --name web11 centos:7進入容器
[root@localhost ~]# docker exec -it 5dc597e17ad5 /bin/bash在開啟一臺終端
[root@localhost ~]# docker run -itd -P --name web22 --link web11:web11 centos:7 /bin/bash進入容器
[root@localhost ~]# docker exec -it a553cf01f492 /bin/bashweb22可以ping同文本11容器可以互通
[root@a553cf01f492 /]# ping web11 PING web11 (172.17.0.4) 56(84) bytes of data. 64 bytes from web11 (172.17.0.4): icmp_seq=1 ttl=64 time=0.099 ms 64 bytes from web11 (172.17.0.4): icmp_seq=2 ttl=64 time=0.252 ms查看各容器端口
[root@5dc597e17ad5 /]# yum -y install net-toolsweb11
web12
這里172.17.0.4是哪里來的那,其實是docker0網(wǎng)卡,這個網(wǎng)卡充當這網(wǎng)關(guān),網(wǎng)關(guān)并分配給容器地址:如web22分配了127.17.0.4
如下圖:
總結(jié)
以上是生活随笔為你收集整理的docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: z170内存:性能狂人还是稳定之选?
- 下一篇: docker构建容器服务