日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker镜像了解(建立私有仓库,基于已有镜像创建,Docker的数据管理) 基于Dockerfile创建,基于本地模板创建,端口映射,容器互联)

發(fā)布時間:2024/2/28 编程问答 39 豆豆

文章目錄

  • 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命令導入為本地鏡像
wget http://download.openvz.org/template/precreated/debian-7.O-x86-minimal.tar.gz

導入成功后可查看本地鏡像信息

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ù)卷

docker run -d -v /data1-v /data2 --name web httpd:centos

掛載主機目錄作為數(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ò)訪問
●可隨機或指定映射端口范圍

docker run -d -P httpd:centos docker run -d -p 49888:80 httpd:centos

容器互聯(lián)

●在源容器和接收容器間建立一條網(wǎng)絡(luò)通信隧道
●使用docker run命令–link選項實現(xiàn)容器間互聯(lián)通信
實現(xiàn)容器互聯(lián)

docker run -d -P --name web1 httpd:centos docker run -d -P --name web2 --link web1:web1 httpd:centos docker exec -it web2 /bin/bash ping web1

配置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/bash

web22可以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-tools

web11

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。