日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

docker入門

 貪挽懶月 2022-06-20 發(fā)布于廣東

一、docker簡介

1、為什么會出現(xiàn)docker?一般情況下是開發(fā)人員開發(fā)好代碼,本地測試通過后,打成jar包或者war包,交給運(yùn)維人員,部署到服務(wù)器上。就是這么個(gè)過程,經(jīng)常會出現(xiàn)如下場景:

  • 運(yùn)維:哥們,你這代碼不行啊,跑不起來;
  • 開發(fā):怎么可能,你看我本地是可以的;
  • 運(yùn)維:你過來看啊,服務(wù)器上就是不行;
  • 開發(fā):我的代碼怎么可能有問題,你會不會玩?……

一樣的代碼,本地可以跑,服務(wù)器上就不行,那這就是環(huán)境的問題和配置的問題了。而且,一個(gè)產(chǎn)品從開發(fā)到上線,往往有開發(fā)環(huán)境,測試環(huán)境,仿真環(huán)境和生產(chǎn)環(huán)境,每個(gè)環(huán)境我們都需要安裝一遍mysql、redis、nginx,activemq等,運(yùn)維的工作量也挺大,而且都是重復(fù)的工作。為了解決這些痛點(diǎn),docker就出現(xiàn)了。

2、是什么?

  • 官網(wǎng):https://www.

docker就是一個(gè)容器,一次構(gòu)建,處處運(yùn)行。也就是說,我開發(fā)環(huán)境安裝了mysql、redis,我可以直接將這兩個(gè)鏡像搬到測試環(huán)境,開箱即用,而不用重新去配置。

3、虛擬機(jī)技術(shù)和容器技術(shù):

  • 虛擬機(jī):相當(dāng)于一臺電腦,模擬了一整套完整的操作系統(tǒng)。缺點(diǎn)是啟動慢,冗余步驟多,占用資源多。
  • 容器技術(shù)(docker):不是模擬完整的操作系統(tǒng),而是對進(jìn)程進(jìn)行隔離,對可以公用的不進(jìn)行模擬。因此系統(tǒng)變得輕量,啟動也是秒級的。

4、docker的核心概念:

  • 容器:就是docker的logo鯨魚背上那一個(gè)個(gè)地集裝箱。一個(gè)集裝箱就是一個(gè)容器,比如你在docker上要安裝redis、mysql、jdk,那么就需要三個(gè)集裝箱,也就是三個(gè)容器。

  • 鏡像:用來生成容器實(shí)例的東西

  • 倉庫:存放鏡像的地方。有個(gè)叫docker hub的網(wǎng)站,它就是倉庫。不過國內(nèi)訪問docker hub特別慢,國內(nèi)一般用阿里云和網(wǎng)易云的倉庫。

二、docker的安裝

1、安裝前提:

  • centos 6.5或者更高版本
  • 如果是centos 6.5,要求系統(tǒng)64位,內(nèi)核版本2.6.32-431或更高
  • 如果是centos 7,要求系統(tǒng)64,內(nèi)核版本3.10或者更高
  • 查看系統(tǒng)版本命令:cat /etc/redhat-release
  • 查看系統(tǒng)內(nèi)核版本的命令:uname -r

2、docker的安裝:

centos 6安裝docker:

  • yum install -y epel-release
  • yum install -y docker-io
  • 安裝后的配置文件:/etc/sysconfig/docker
  • 啟動docker服務(wù):service docker start
  • 驗(yàn)證版本信息:docker version,出現(xiàn)版本信息說明安裝成功。

centos 7安裝docker:

  • 官網(wǎng)文檔:https://docs./engine/install/centos/
  • 安裝gcc相關(guān):yum install -y gcc,yum install -y gcc-c++,安裝完執(zhí)行gcc -v有版本信息就安裝成功。
  • 卸載舊版本docker:
yum remove docker \           docker-client \           docker-client-latest \           docker-common \           docker-latest \           docker-latest-logrotate \           docker-logrotate \           docker-engine
  • 安裝需要的軟件包:yum install -y yum-utils
  • 設(shè)置stable鏡像倉庫(推薦用阿里云的庫):
yum-config-manager \   --add-repo \   http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
  • 更新yum軟件包索引:yum makecache fast
  • 安裝docker ce:yum install -y docker-ce
  • 啟動docker:systemctl start docker
  • 測試:docker -v,有版本信息則安裝成功,再執(zhí)行docker run hello-world,會有 hello from docker的信息。
  • 鏡像加速配置:
mkdir -p /etc/dockervim /etc/docker/daemon.jsonsystemctl daemon-reloadsystemctl restart docker

daemon.json的內(nèi)容如下:

# 網(wǎng)易云{"registry-mirrors":["http://hub-mirror.c.163.com"]}# 阿里云{"registry-mirrors":["你阿里云的鏡像加速鏈接"]}

獲取阿里云加速鏡像鏈接的方法:登陸https://cr.console.aliyun.com,然后點(diǎn)擊左下角的“鏡像加速器”即可。

  • 卸載:
systemctl stop dockeryum -y remove docker-cerm -rf /var/lib/docker

3、hello world:上面說過執(zhí)行docker run hello-world會打印出相關(guān)信息,執(zhí)行這條命令過程如下:

  • 首先會查找本機(jī)是否有該鏡像
  • 如果有,直接以本機(jī)的那個(gè)鏡像為模板生成容器實(shí)例運(yùn)行
  • 如果沒有,去docker hub上查找
  • 找到了,下載到本地,然后生成實(shí)例運(yùn)行,找不到就返回錯(cuò)誤信息

三、docker常用命令

1、幫助命令:

  • 查看版本信息:docker -v
  • 查看docker信息:docker info
  • 查看幫助命令:docker --help,類似linux的man命令

2、鏡像命令:回顧一下docker的logo,海上有一頭鯨魚,鯨魚背上有一個(gè)個(gè)的集裝箱。對應(yīng)關(guān)系如下:

  • 海 ------ 電腦主機(jī)
  • 鯨魚 ------ docker
  • 集裝箱 ------ 容器實(shí)例,來自鏡像模板

常用鏡像命令如下:

  • 列出主機(jī)上的鏡像:docker images
  • 列出全部鏡像(包括中間鏡像):docker images -a
  • 只列出鏡像的id:docker images -q
  • 列出全部鏡像的id:docker images -qa
  • 顯示鏡像的摘要信息:docker images --digests
  • 顯示完整的鏡像信息:docker images --no-trunc
  • 從docker hub上查找xxx鏡像:docker search xxx
  • 從docker hub上查找點(diǎn)贊數(shù)超過30的xxx鏡像:docker search -s 30 xxx
  • 從docker hub上查找xxx鏡像,并顯示摘要信息:docker search -s 30 --no-trunc xxx
  • 從docker hub上查找能自動構(gòu)建的xxx鏡像:docker search --automated xxx
  • 從docker hub上拉取(下載)最新版的xxx鏡像:docker pull xxx
  • 刪除xxx(可以是鏡像名,也可以是id)鏡像:docker rmi xxx
  • 強(qiáng)制刪除xxx鏡像:docker rmi -f xxx
  • 刪除多個(gè)鏡像:docker rmi -f xxx yyy
  • 刪除全部鏡像:docker rmi -f $(docker images -qa)

3、容器命令:首先我們執(zhí)行docker pull centos拉取一個(gè)centos的鏡像,下面所說的容器都是指centos(都可以是名字或者id)。

  • 新建并啟動容器:docker run -it centos
  • 啟動容器可選的參數(shù)有:--name:為容器指定名字;-d:后臺運(yùn)行容器;-P:隨機(jī)端口映射;-p:指定端口映射;-i:以交互模式運(yùn)行容器;-t:為容器重新分配一個(gè)偽輸入終端,常與-i一起使用
  • 列出當(dāng)前正在運(yùn)行的容器:docker ps
  • 列出運(yùn)行的容器可選參數(shù)有:-a:列出當(dāng)前運(yùn)行和歷史上運(yùn)行過的容器;-l:顯示最近創(chuàng)建的容器;-n:顯示最近創(chuàng)建的n個(gè)容器;-q:靜默模式,只顯示容器編號;--no-trunc:顯示完整摘要信息
  • 退出容器:exit:容器停止退出;ctrl + p + q:容器不停止退出
  • 啟動容器:docker start centos
  • 重啟容器:docker restart centos
  • 停止容器:docker stop centos
  • 強(qiáng)制停止容器:docker kill centos
  • 刪除容器:docker rm -f centos
  • 一次性刪除多個(gè)容器:docker rm -f $(docker ps -a -q或者docker ps -a -q | xargs docker rm
  • 后臺運(yùn)行容器:docker run -d centos,啟動后,再docker ps,發(fā)現(xiàn)根本就沒有正在運(yùn)行的容器,但是剛剛確實(shí)啟動成功了,因?yàn)閱雍蠓祷亓艘粋€(gè)id。這是docker的機(jī)制造成的,后臺啟動docker容器,前臺沒有交互,docker會認(rèn)為它沒事可做,就殺死了。
  • 查看容器倒數(shù)n行日志:docker logs -f -t --tail n 容器id
  • 查看容器內(nèi)運(yùn)行的進(jìn)程:docker top 容器id
  • 查看容器內(nèi)部細(xì)節(jié)(返回一個(gè)json串):docker inspect 容器id
  • 進(jìn)入正在運(yùn)行的容器(ctrl + p + q退出后重新進(jìn)入):docker attach 容器id
  • 不進(jìn)入容器但對容器執(zhí)行相關(guān)命令:docker exec -t 容器id 命令;比如不進(jìn)入docker上運(yùn)行的centos直接執(zhí)行ls /命令:docker exec -t centos的id ls /
  • 將容器內(nèi)的數(shù)據(jù)拷貝到主機(jī):docker cp 容器id:容器內(nèi)路徑 主機(jī)路徑

四、docker鏡像

1、什么是鏡像?鏡像是一種輕量級的可執(zhí)行的獨(dú)立軟件包。用來打包軟件運(yùn)行環(huán)境和基于運(yùn)行環(huán)境開發(fā)的軟件,包括代碼、運(yùn)行時(shí)、庫、環(huán)境變量和配置文件。docker底層是一個(gè)unionFS(聯(lián)合文件系統(tǒng)),即是一層一層的文件系統(tǒng)組成。

2、鏡像為什么那么大?執(zhí)行docker pull tomcat命令,下載一個(gè)tomcat鏡像,然后執(zhí)行docker images,發(fā)現(xiàn)一個(gè)tomcat就600多兆,為什么那么大?因?yàn)閯偛耪f的,鏡像是一個(gè)聯(lián)合文件系統(tǒng),tomcat鏡像不僅僅包含tomcat,還包含tomcat運(yùn)行的各種環(huán)境,一個(gè)鏡像包含了很多層,分層鏡像如下:

tomcat鏡像

3、docker為什么采用分層鏡像?最大的好處就是共享資源。比如多個(gè)鏡像都需要jdk,那么宿主機(jī)上其實(shí)只要保存一份jdk就可以了,內(nèi)存中也只需要加載一份。鏡像的每一層都是可以共享的。

4、docker commit命令:首先我們運(yùn)行docker run -it -p 8888:8080 tomcat,這里表示docker內(nèi)部將tomcat運(yùn)行在8080端口,對外暴露8888端口,即執(zhí)行完這條命令,我們要用8888端口才能訪問到tomcat。如果你訪問到的是404,不要方,這是因?yàn)槟阆螺d的這個(gè)版本的tomcat,webapps目錄是空的,資源都在webapps-dist目錄下,可以執(zhí)行如下操作:

  • 進(jìn)入tomcat目錄:docker exec -it tomcat容器的id /bin/bash
  • 列出tomcat目錄下的文件:ls -l
  • 給webapps重命名:mv webapps webapps2
  • 將webapps-dist改名為webapps:mv webapps.dist webapps

刷新頁面,就可以看到熟悉的tomcat首頁了。上面是指定對外暴露8888端口,還可以執(zhí)行docker run -it -P tomcat,大寫的P表示隨機(jī)分配端口,不自己指定。用這個(gè)命令啟動后,執(zhí)行docker ps,就可以看到隨機(jī)分配的端口是什么。

上面我們對tomcat做了一些修改,把訪問會報(bào)404的tomcat改成了一個(gè)正常的tomcat,我們就可以使用commit命令以我們改好的tomcat為模板,生成一個(gè)啟動就能直接訪問的新的tomcat鏡像。執(zhí)行如下命令:docker commit -a="zhusl" -m="normal tomcat" 容器id newtomcat:1.0

  • -a是作者,-m是備注信息,newtomcat是新鏡像的名字,1.0是版本號

五、容器數(shù)據(jù)卷

1、是什么?我們在docker上運(yùn)行容器實(shí)例,運(yùn)行時(shí)產(chǎn)生的數(shù)據(jù),當(dāng)docker關(guān)閉了就沒了。但是我們希望有些數(shù)據(jù)可以持久化保存下來,這個(gè)保存的地方的就是容器數(shù)據(jù)卷,并且保存下來的數(shù)據(jù)可以共享。

2、容器數(shù)據(jù)卷的特點(diǎn):

  • 數(shù)據(jù)卷可在容器之間共享或重用數(shù)據(jù)
  • 卷中的更改可直接生效
  • 數(shù)據(jù)卷中的更改不會包含在鏡像的更新中
  • 數(shù)據(jù)卷的生命周期一直持續(xù)到?jīng)]有容器使用它為止

3、添加數(shù)據(jù)卷的方法:添加數(shù)據(jù)卷有兩種方法,一種是命令添加,一種是用dockerfile。命令添加:

  • 添加數(shù)據(jù)卷命令:docker run -it -v /宿主機(jī)絕對路徑目錄:/容器內(nèi)目錄 鏡像名比如執(zhí)行docker run -it -v /mydatadir:/dockerdatadir centos,就表示讓centos這個(gè)鏡像和主機(jī)之間建立數(shù)據(jù)卷,主機(jī)根目錄下的mydatadir和centos鏡像根目錄下的dockerdatadir目錄建立連接,進(jìn)行數(shù)據(jù)共享。目錄不存會自動新建目錄。執(zhí)行了以上命令后,先查看主機(jī)根目錄下是否有mydatadir目錄,然后再執(zhí)行docker run -it centos /bin/bash,ls查看一下centos鏡像的根目錄下是否有dockerdatadir目錄。

  • 查看數(shù)據(jù)卷是否掛載成功:docker inspect 容器id。如果你看到兩個(gè)目錄都成功新建了還是不放心,可以用這條命令查看,如果在返回的內(nèi)容中看到了如下信息則掛載成功。

  • 驗(yàn)證通過數(shù)據(jù)卷可實(shí)現(xiàn)數(shù)據(jù)共享:首先在主機(jī)的mydatadir目錄下新建一個(gè)test.txt文件,然后發(fā)現(xiàn)centos的鏡像的dockerdatadir目錄也有test.txt文件。然后再centos鏡像中往test.txt文件些內(nèi)容,回到主機(jī)再次查看test.txt文件,發(fā)現(xiàn)也是有內(nèi)容的。并且容器推出后,在主機(jī)上的mydatadir目錄下做的任何操作,在容器重啟后,都會被同步到dockerdatadir目錄下。

  • 以只讀方式添加數(shù)據(jù)卷:docker run -it -v /宿主機(jī)絕對路徑目錄:/容器內(nèi)目錄:ro 鏡像名,加上ro,表示read only,容器只能讀數(shù)據(jù),不能進(jìn)行寫操作。

dockerFile添加:

  • 主機(jī)根目錄下新建mydocker文件夾;
  • 進(jìn)入mydocker目錄,新建dockerfile文件:vim dockerfile,文件內(nèi)容如下:
FROM centosVOLUME ["/dockerdatadir1","/dockerdatadir2"]CMD echo "finished,---------success"CMD /bin/bash
  • 然后執(zhí)行build命令生成新的鏡像,鏡像名叫zhusl/centos:docker build -f /mydocker/dockerfile -t zhusl/centos .
  • 查看鏡像:docker images,發(fā)現(xiàn)已經(jīng)有zhusl/centos這個(gè)鏡像了。這個(gè)鏡像就是,我們以centos鏡像為來源,添加了數(shù)據(jù)卷,新生成的一個(gè)centos。
  • 運(yùn)行新生成的這個(gè)鏡像,就可以發(fā)現(xiàn)在zhusl/centos的根目錄下有兩個(gè)數(shù)據(jù)卷,dockerdatadir1和dockerdatadir2。那么這兩個(gè)數(shù)據(jù)卷對應(yīng)宿主機(jī)的哪個(gè)目錄呢?還是執(zhí)行docker inspect 容器id,就可以看到了,如下圖:

4、數(shù)據(jù)卷容器:上面說了數(shù)據(jù)卷,數(shù)據(jù)卷容器其實(shí)就是數(shù)據(jù)卷之間的傳遞性。比如還是以zhusl/centos鏡像為例,先執(zhí)行docker run -it --name dc01 zhusl/centos,運(yùn)行一個(gè)名為dc01的實(shí)例,然后再執(zhí)行docker run -it --name doc02 --volumes-from dc02 zhusl/centos,以dc01為父容器,運(yùn)行一個(gè)dc02。因?yàn)閦husl/centos是添加了數(shù)據(jù)卷的,所以運(yùn)行的dc01是掛載了數(shù)據(jù)卷的,然后dc02又是from dc01,所以dc02也掛載了數(shù)據(jù)卷。如果還有一個(gè)dc03也是繼承自dc01,當(dāng)dc01掛了,dc02和dc03之間也是可以進(jìn)行數(shù)據(jù)共享的。

六、dockerFile

1、是什么?就是一個(gè)寫命令的文件,然后通過這個(gè)文件,就可以構(gòu)建鏡像。

2、構(gòu)建的三個(gè)步驟:

  • 編寫dockerfile文件
  • docker build
  • docker run

登陸docker hub,然后隨便搜索一個(gè)鏡像,就以centos為例,選擇版本然后進(jìn)入,就可以看到它的dockerfile文件內(nèi)容。如下就是centos7的dockerfile文件內(nèi)容:

FROM scratchADD centos-7-x86_64-docker.tar.xz /
LABEL \ org.label-schema.schema-version="1.0" \ org.label-schema.name="CentOS Base Image" \ org.label-schema.vendor="CentOS" \ org.label-schema.license="GPLv2" \ org.label-schema.build-date="20200504" \ org.opencontainers.image.title="CentOS Base Image" \ org.opencontainers.image.vendor="CentOS" \ org.opencontainers.image.licenses="GPL-2.0-only" \ org.opencontainers.image.created="2020-05-04 00:00:00+01:00"
CMD ["/bin/bash"]
  • FROM scratch:相當(dāng)于java的Object類。所以鏡像的基礎(chǔ)鏡像,即源鏡像。
  • ADD:后面的是要添加的東西
  • LABEL:一些標(biāo)簽信息
  • CMD:要執(zhí)行的命令

3、dockerfile內(nèi)容基礎(chǔ)知識:

  • 保留字(就是上面那些FROM、ADD等關(guān)鍵字)都必須為大寫字母并且后面要跟隨至少一個(gè)參數(shù)
  • 指令從上到下按順序執(zhí)行
  • #表示注釋
  • 每條指令都會創(chuàng)建一個(gè)新的鏡像層,并對鏡像進(jìn)行提交

4、dockerfile的執(zhí)行流程:

  • docker從基礎(chǔ)鏡像中運(yùn)行一個(gè)容器
  • 執(zhí)行一條指令并對容器做出修改
  • 執(zhí)行類似docker commit的操作提交一個(gè)新的鏡像層
  • docker再基于剛提交的鏡像運(yùn)行一個(gè)新的容器
  • 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成

5、dockerfile的保留字:

  • FROM:表示當(dāng)前要構(gòu)建的新鏡像是基于哪個(gè)鏡像的
  • MAINTAINER:作者 + 郵箱
  • RUN:容器構(gòu)建時(shí)需要運(yùn)行的命令
  • EXPOSE:服務(wù)的端口號
  • WORKDIR:指定在創(chuàng)建容器后,終端默認(rèn)登陸進(jìn)來的工作目錄
  • ENV:設(shè)置環(huán)境變量用的
  • ADD:要添加進(jìn)鏡像并解壓縮的東西
  • COPY:要拷貝進(jìn)鏡像的東西
  • VOLUME:數(shù)據(jù)容器卷,用于持久化
  • CMD:指定一個(gè)容器啟動時(shí)要運(yùn)行的命令,一個(gè)dockerfile中可以有多個(gè)CMD,但最終只有最后一個(gè)生效,CMD會被docker run后面的參數(shù)替換
  • ENTRYPOINT:指定一個(gè)容器啟動時(shí)要運(yùn)行的命令,docker run后面的參數(shù)不會替換這個(gè),而是在后面追加
  • ONBUILD:觸發(fā)器。就是另一個(gè)鏡像基于自己構(gòu)建時(shí),當(dāng)另一個(gè)鏡像啟動時(shí)自己要做的事

6、dockerfile構(gòu)建鏡像實(shí)操:

  • 案例1:基礎(chǔ)命令的使用:就以構(gòu)建centos為例,我們從docker hub上拉下來的centos,默認(rèn)路徑是/,沒有vim編輯器,也沒有ifconfig命令。這個(gè)centos要實(shí)現(xiàn)登陸后默認(rèn)路徑的~,要有vim編輯器,要有ifconfig命令。下面開始編寫dockerfile文件:
# 基于docker hub上拉下來的centos進(jìn)行構(gòu)建FROM centos# 容器啟動后工作目錄WORKDIR ~# 安裝vimRUN yum -y install vim# 安裝網(wǎng)絡(luò)工具,使其能用ifconfig命令RUN yum -y install net-tools# 端口號EXPOSE 80CMD /bin/bash

新建一個(gè)dockerfile2文件,內(nèi)容就是上面那段,然后執(zhí)行docker build -f /mydocker/dockerfile2 -t mycentos:1.0 .進(jìn)行構(gòu)建。-f后面的是dockerfile2文件的路徑,mycentos是鏡像名字,1.0是版本號,.代表當(dāng)前路徑。

執(zhí)行完后,docker images就會發(fā)現(xiàn)有一個(gè)新鏡像,名字叫mycentos。然后運(yùn)行該鏡像,就會發(fā)現(xiàn)這個(gè)mycentos可以使用vim和ifconfig的。再回溯一個(gè)問題,鏡像那么大,是因?yàn)樗怂\(yùn)行所需的所有環(huán)境,那么是不是很浪費(fèi)空間?就比如這個(gè),我原本有一個(gè)centos鏡像,只不過沒有vim編輯器,現(xiàn)在我構(gòu)建一個(gè)新的有vim的mycentos,docker images 顯示centos 600M,mycentos 620M,那這兩個(gè)是不是就要占用1個(gè)G?其實(shí)并不是,因?yàn)殓R像是可以共享的,mycentos 是form centos的,也就是說這600其實(shí)是共用的,最后這兩個(gè)鏡像其實(shí)占空間就是620M。

執(zhí)行docker history 鏡像id,就可以列出鏡像的歷史,即這個(gè)鏡像有多少層。

  • 案例2:CMD指令的使用:執(zhí)行docker run -it -p 7777:8080 tomcat ls -l,就是在啟動命令后追加ls -l參數(shù),列出登陸后的目錄。然后發(fā)現(xiàn)tomcat根本就沒有啟動,只是列出了tomcat的目錄。因?yàn)閐ockerfile的CMD命令只有最后一行生效,ls -l這個(gè)命令把啟動tomcat的CMD覆蓋了,所以沒啟動。

  • 案例3:ENTRYPOINT的使用:新建一個(gè)dockerfile3,內(nèi)容如下:

FROM centosRUN yum install -y curlCMD ["curl","-s","http://"]

意思就是制作一個(gè)鏡像,一啟動,就可以查出本機(jī)的IP。執(zhí)行docker build -f /mydocker/dockerfile3 -t myip .進(jìn)行構(gòu)建。然后運(yùn)行該容器,就可以打印出ip信息。如果過執(zhí)行的時(shí)候想加參數(shù),比如docker run -it myip -i,實(shí)際上就是想執(zhí)行curl的時(shí)候加上-i參數(shù),打印請求頭信息,那么抱歉,-i會覆蓋之前的命令,即覆蓋CMD ["curl","-s","http://"]這一樣,然后-i根本就不是一個(gè)可執(zhí)行命令,所以執(zhí)行報(bào)錯(cuò)。要實(shí)現(xiàn)上面的需求,即加個(gè)-i,讓它真正執(zhí)行的是curl -s -i https://,只需要把CMD換成ENTRYPOINT,然后啟動容器時(shí)用docker run -it myip -i即可。

  • 案例4:ONBUILD的使用:修改dockerfile3,在后面加上如下的命令:
ONBUILD RUN echo "我被觸發(fā)了"

然后,新建dockerfile4,F(xiàn)ROM myip,build的時(shí)候會打印出 "我被觸發(fā)了" 這一句話。

  • 案例5:COPYADD的使用。首先在opt目錄下先搞兩個(gè)tar.gz包和一個(gè)copy.txt文件,一個(gè)jdk8,一個(gè)tomcat9。編寫dockerfile,內(nèi)容如下:
FROM   centos# 復(fù)制文件COPY copy.txt /usr/local/cincontainer.txt# 添加并解壓jdkADD jdk-8u171-linux-x64.tar.gz /usr/local# 添加并解壓tomcat9ADD apache-tomcat-9.0.8.tar.gz /usr/local# 安裝vimRUN yum install -y install vim# 設(shè)置登陸落腳點(diǎn)ENV MYPATH /usr/localWORKDIR $MYPATH# 配置jdk和tomcat環(huán)境變量ENV JAVA_HOME /usr/local/jdk1.8.0_171ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin# 指定容器運(yùn)行端口EXPOSE 8080# 啟動命令CMD /usr/lcoal/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomat-9.0.8/bin/logs/catalina.out

七、常用鏡像安裝

1、MySQL:

  • 拉取鏡像:docker pull mysql:5.7
  • 啟動并添加數(shù)據(jù)卷:docker run -p 3306:3306 --name mysql -v /zhusl/mysql/conf:/etc/mysql/conf.d -v /zhusl/mysql/logs:/logs -v /zhusl/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
  • 進(jìn)入容器:docker exec -it 容器id /bin/bash
  • 使用mysql:mysql -u root -p

2、redis:

  • 搜索鏡像:docker search redis
  • 拉取鏡像:docker pull redis
  • 啟動redis鏡像:docker run -p 6379:6379 -v /zhusl/redis/data:/data -v /zhusl/redis/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis redis-server /usr/local/etc/redis/redis.conf --appendonly yesappendonly yes表示開啟aof。
  • 連接redis:docker exec -it redis容器id redis-cli

八、本地鏡像推送到阿里云

  • 登陸阿里云開發(fā)者平臺:https://dev.aliyun.com/search.html
  • 創(chuàng)建鏡像倉庫
創(chuàng)建鏡像倉庫
  • 將本地鏡像推送到阿里云:
docker login --username= registry.cn-hangzhou.aliyuncs.com# 執(zhí)行完上一條命令會要你輸入用戶名和密碼docker tag 鏡像id registry.cn-hangzhou.aliyuncs.com/zhushulin/redis:鏡像版本號docker push registry.cn-hangzhou.aliyuncs.com/zhushulin/redis:鏡像版本號

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多