docker

一嘹害、docker簡介

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

  • 運維:哥們微渠,你這代碼不行啊,跑不起來咧擂;
  • 開發(fā):怎么可能逞盆,你看我本地是可以的;
  • 運維:你過來看啊松申,服務(wù)器上就是不行云芦;
  • 開發(fā):我的代碼怎么可能有問題,你會不會玩攻臀?
    ……

一樣的代碼焕数,本地可以跑,服務(wù)器上就不行刨啸,那這就是環(huán)境的問題和配置的問題了堡赔。而且,一個產(chǎn)品從開發(fā)到上線设联,往往有開發(fā)環(huán)境善已,測試環(huán)境灼捂,仿真環(huán)境和生產(chǎn)環(huán)境,每個環(huán)境我們都需要安裝一遍mysql换团、redis悉稠、nginx,activemq等艘包,運維的工作量也挺大的猛,而且都是重復(fù)的工作。為了解決這些痛點想虎,docker就出現(xiàn)了卦尊。


歡迎大家關(guān)注我的公眾號 javawebkf,目前正在慢慢地將簡書文章搬到公眾號舌厨,以后簡書和公眾號文章將同步更新岂却,且簡書上的付費文章在公眾號上將免費。


2裙椭、是什么躏哩?

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

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

  • 虛擬機:相當于一臺電腦氓栈,模擬了一整套完整的操作系統(tǒng)渣磷。缺點是啟動慢,冗余步驟多授瘦,占用資源多醋界。
  • 容器技術(shù)(docker):不是模擬完整的操作系統(tǒng),而是對進程進行隔離提完,對可以公用的不進行模擬形纺。因此系統(tǒng)變得輕量,啟動也是秒級的徒欣。

4逐样、docker的核心概念:

  • 容器:就是docker的logo鯨魚背上那一個個地集裝箱。一個集裝箱就是一個容器,比如你在docker上要安裝redis脂新、mysql挪捕、jdk,那么就需要三個集裝箱争便,也就是三個容器级零。

  • 鏡像:用來生成容器實例的東西

  • 倉庫:存放鏡像的地方。有個叫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
  • 驗證版本信息:docker version默垄,出現(xiàn)版本信息說明安裝成功此虑。

centos 7安裝docker:

  • 官網(wǎng)文檔:https://docs.docker.com/engine/install/centos/
  • 安裝gcc相關(guān):yum install -y gccyum 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/docker
vim /etc/docker/daemon.json
systemctl daemon-reload
systemctl restart docker

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

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

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

  • 卸載:
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker

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

  • 首先會查找本機是否有該鏡像
  • 如果有晶渠,直接以本機的那個鏡像為模板生成容器實例運行
  • 如果沒有,去docker hub上查找
  • 找到了燃观,下載到本地褒脯,然后生成實例運行,找不到就返回錯誤信息

三缆毁、docker常用命令

1番川、幫助命令:

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

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

  • 海 ------ 電腦主機
  • 鯨魚 ------ docker
  • 集裝箱 ------ 容器實例适篙,來自鏡像模板

常用鏡像命令如下:

  • 列出主機上的鏡像: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上查找點贊數(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
  • 強制刪除xxx鏡像:docker rmi -f xxx
  • 刪除多個鏡像:docker rmi -f xxx yyy
  • 刪除全部鏡像:docker rmi -f $(docker images -qa)

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

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

四讼庇、docker鏡像

1绎巨、什么是鏡像?
鏡像是一種輕量級的可執(zhí)行的獨立軟件包蠕啄。用來打包軟件運行環(huán)境和基于運行環(huán)境開發(fā)的軟件场勤,包括代碼戈锻、運行時、庫和媳、環(huán)境變量和配置文件格遭。docker底層是一個unionFS(聯(lián)合文件系統(tǒng)),即是一層一層的文件系統(tǒng)組成留瞳。

2拒迅、鏡像為什么那么大?
執(zhí)行docker pull tomcat命令她倘,下載一個tomcat鏡像璧微,然后執(zhí)行docker images,發(fā)現(xiàn)一個tomcat就600多兆硬梁,為什么那么大前硫?因為剛才說的,鏡像是一個聯(lián)合文件系統(tǒng)荧止,tomcat鏡像不僅僅包含tomcat屹电,還包含tomcat運行的各種環(huán)境,一個鏡像包含了很多層跃巡,分層鏡像如下:

tomcat鏡像

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

4办龄、docker commit命令:
首先我們運行docker run -it -p 8888:8080 tomcat烘绽,這里表示docker內(nèi)部將tomcat運行在8080端口,對外暴露8888端口俐填,即執(zhí)行完這條命令安接,我們要用8888端口才能訪問到tomcat。如果你訪問到的是404英融,不要方盏檐,這是因為你下載的這個版本的tomcat,webapps目錄是空的驶悟,資源都在webapps-dist目錄下胡野,可以執(zhí)行如下操作:

  • 進入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表示隨機分配端口,不自己指定熊响。用這個命令啟動后旨别,執(zhí)行docker ps,就可以看到隨機分配的端口是什么汗茄。

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

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

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

1纯趋、是什么憎兽?
我們在docker上運行容器實例,運行時產(chǎn)生的數(shù)據(jù)吵冒,當docker關(guān)閉了就沒了纯命。但是我們希望有些數(shù)據(jù)可以持久化保存下來,這個保存的地方的就是容器數(shù)據(jù)卷痹栖,并且保存下來的數(shù)據(jù)可以共享亿汞。

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

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

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

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

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

    數(shù)據(jù)卷掛載成功

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

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

dockerFile添加:

  • 主機根目錄下新建mydocker文件夾和蚪;
  • 進入mydocker目錄止状,新建dockerfile文件:vim dockerfile,文件內(nèi)容如下:
FROM centos
VOLUME ["/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這個鏡像了。這個鏡像就是催束,我們以centos鏡像為來源集峦,添加了數(shù)據(jù)卷,新生成的一個centos抠刺。
  • 運行新生成的這個鏡像塔淤,就可以發(fā)現(xiàn)在zhusl/centos的根目錄下有兩個數(shù)據(jù)卷,dockerdatadir1和dockerdatadir2矫付。那么這兩個數(shù)據(jù)卷對應(yīng)宿主機的哪個目錄呢凯沪?還是執(zhí)行docker inspect 容器id第焰,就可以看到了买优,如下圖:
    數(shù)據(jù)卷

4、數(shù)據(jù)卷容器:
上面說了數(shù)據(jù)卷挺举,數(shù)據(jù)卷容器其實就是數(shù)據(jù)卷之間的傳遞性杀赢。比如還是以zhusl/centos鏡像為例,先執(zhí)行docker run -it --name dc01 zhusl/centos湘纵,運行一個名為dc01的實例脂崔,然后再執(zhí)行docker run -it --name doc02 --volumes-from dc02 zhusl/centos,以dc01為父容器梧喷,運行一個dc02砌左。因為zhusl/centos是添加了數(shù)據(jù)卷的脖咐,所以運行的dc01是掛載了數(shù)據(jù)卷的,然后dc02又是from dc01汇歹,所以dc02也掛載了數(shù)據(jù)卷屁擅。如果還有一個dc03也是繼承自dc01,當dc01掛了产弹,dc02和dc03之間也是可以進行數(shù)據(jù)共享的派歌。

六、dockerFile

1痰哨、是什么胶果?
就是一個寫命令的文件,然后通過這個文件斤斧,就可以構(gòu)建鏡像早抠。

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

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

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

FROM scratch
ADD 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:相當于java的Object類。所以鏡像的基礎(chǔ)鏡像酱床,即源鏡像羊赵。
  • ADD:后面的是要添加的東西
  • LABEL:一些標簽信息
  • CMD:要執(zhí)行的命令

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

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

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

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

5罐寨、dockerfile的保留字:

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

6拧簸、dockerfile構(gòu)建鏡像實操:

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

新建一個dockerfile2文件汇鞭,內(nèi)容就是上面那段,然后執(zhí)行docker build -f /mydocker/dockerfile2 -t mycentos:1.0 .進行構(gòu)建庸追。-f后面的是dockerfile2文件的路徑霍骄,mycentos是鏡像名字,1.0是版本號淡溯,.代表當前路徑读整。

執(zhí)行完后,docker images就會發(fā)現(xiàn)有一個新鏡像咱娶,名字叫mycentos米间。然后運行該鏡像,就會發(fā)現(xiàn)這個mycentos可以使用vim和ifconfig的膘侮。再回溯一個問題屈糊,鏡像那么大,是因為它包含了它運行所需的所有環(huán)境琼了,那么是不是很浪費空間逻锐?就比如這個,我原本有一個centos鏡像雕薪,只不過沒有vim編輯器昧诱,現(xiàn)在我構(gòu)建一個新的有vim的mycentos,docker images 顯示centos 600M所袁,mycentos 620M盏档,那這兩個是不是就要占用1個G?其實并不是燥爷,因為鏡像是可以共享的蜈亩,mycentos 是form centos的,也就是說這600其實是共用的局劲,最后這兩個鏡像其實占空間就是620M勺拣。

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

  • 案例2:CMD指令的使用:執(zhí)行docker run -it -p 7777:8080 tomcat ls -l毅戈,就是在啟動命令后追加ls -l參數(shù)苹丸,列出登陸后的目錄愤惰。然后發(fā)現(xiàn)tomcat根本就沒有啟動,只是列出了tomcat的目錄赘理。因為dockerfile的CMD命令只有最后一行生效宦言,ls -l這個命令把啟動tomcat的CMD覆蓋了,所以沒啟動商模。

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

FROM centos
RUN yum install -y curl
CMD ["curl","-s","http://ip.cn"]

意思就是制作一個鏡像,一啟動施流,就可以查出本機的IP响疚。執(zhí)行docker build -f /mydocker/dockerfile3 -t myip .進行構(gòu)建。然后運行該容器瞪醋,就可以打印出ip信息忿晕。如果過執(zhí)行的時候想加參數(shù),比如docker run -it myip -i银受,實際上就是想執(zhí)行curl的時候加上-i參數(shù)践盼,打印請求頭信息,那么抱歉宾巍,-i會覆蓋之前的命令咕幻,即覆蓋CMD ["curl","-s","http://ip.cn"]這一樣,然后-i根本就不是一個可執(zhí)行命令顶霞,所以執(zhí)行報錯谅河。要實現(xiàn)上面的需求,即加個-i确丢,讓它真正執(zhí)行的是curl -s -i https://ip.cn绷耍,只需要把CMD換成ENTRYPOINT,然后啟動容器時用docker run -it myip -i即可鲜侥。

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

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

  • 案例5:COPYADD的使用舀寓。首先在opt目錄下先搞兩個tar.gz包和一個copy.txt文件胆数,一個jdk8,一個tomcat9互墓。編寫dockerfile必尼,內(nèi)容如下:
FROM   centos
# 復(fù)制文件
COPY copy.txt /usr/local/cincontainer.txt
# 添加并解壓jdk
ADD jdk-8u171-linux-x64.tar.gz /usr/local
# 添加并解壓tomcat9
ADD apache-tomcat-9.0.8.tar.gz /usr/local
# 安裝vim
RUN yum install -y install vim
# 設(shè)置登陸落腳點
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 配置jdk和tomcat環(huán)境變量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:CATALINA_HOME/bin
# 指定容器運行端口
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
  • 進入容器: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 yes
    appendonly yes表示開啟aof豆挽。
  • 連接redis:docker exec -it redis容器id redis-cli

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

創(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:鏡像版本號
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末券盅,一起剝皮案震驚了整個濱河市帮哈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锰镀,老刑警劉巖娘侍,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異泳炉,居然都是意外死亡私蕾,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門胡桃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來踩叭,“玉大人,你說我怎么就攤上這事翠胰∪荼矗” “怎么了?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵之景,是天一觀的道長斤富。 經(jīng)常有香客問我,道長锻狗,這世上最難降的妖魔是什么满力? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮轻纪,結(jié)果婚禮上油额,老公的妹妹穿的比我還像新娘。我一直安慰自己刻帚,他們只是感情好潦嘶,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崇众,像睡著了一般掂僵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上顷歌,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天锰蓬,我揣著相機與錄音,去河邊找鬼眯漩。 笑死芹扭,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冯勉,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摹芙!你這毒婦竟也來了灼狰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤浮禾,失蹤者是張志新(化名)和其女友劉穎交胚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盈电,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蝴簇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了匆帚。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熬词。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吸重,靈堂內(nèi)的尸體忽然破棺而出互拾,到底是詐尸還是另有隱情,我是刑警寧澤嚎幸,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布颜矿,位于F島的核電站,受9級特大地震影響嫉晶,放射性物質(zhì)發(fā)生泄漏骑疆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一替废、第九天 我趴在偏房一處隱蔽的房頂上張望箍铭。 院中可真熱鬧,春花似錦椎镣、人聲如沸坡疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽柄瑰。三九已至,卻和暖如春剪况,著一層夾襖步出監(jiān)牢的瞬間教沾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工译断, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留授翻,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像堪唐,于是被迫代替她去往敵國和親巡语。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348