一嘹害、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裙椭、是什么躏哩?
- 官網(wǎng):https://www.docker.com
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 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/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)境,一個鏡像包含了很多層跃巡,分層鏡像如下:
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ù)卷可實現(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
第焰,就可以看到了买优,如下圖:
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:
COPY
和ADD
的使用舀寓。首先在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
八、本地鏡像推送到阿里云
- 登陸阿里云開發(fā)者平臺:https://dev.aliyun.com/search.html
- 創(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:鏡像版本號