一、docker簡介 1、為什么會出現(xiàn)docker? 一般情況下是開發(fā)人員開發(fā)好代碼,本地測試通過后,打成jar包或者war包,交給運(yùn)維人員,部署到服務(wù)器上。就是這么個(gè)過程,經(jīng)常會出現(xiàn)如下場景:
運(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、是什么?
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è)容器。
倉庫:存放鏡像的地方。有個(gè)叫docker hub的網(wǎng)站,它就是倉庫。不過國內(nèi)訪問docker hub特別慢,國內(nèi)一般用阿里云和網(wǎng)易云的倉庫。
二、docker的安裝 1、安裝前提:
如果是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
安裝后的配置文件:/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
有版本信息就安裝成功。 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,然后點(diǎn)擊左下角的“鏡像加速器”即可。
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
3、hello world: 上面說過執(zhí)行docker run hello-world
會打印出相關(guān)信息,執(zhí)行這條命令過程如下:
如果有,直接以本機(jī)的那個(gè)鏡像為模板生成容器實(shí)例運(yùn)行 找到了,下載到本地,然后生成實(shí)例運(yùn)行,找不到就返回錯(cuò)誤信息 三、docker常用命令 1、幫助命令:
查看幫助命令:docker --help
,類似linux的man
命令 2、鏡像命令: 回顧一下docker的logo,海上有一頭鯨魚,鯨魚背上有一個(gè)個(gè)的集裝箱。對應(yīng)關(guān)系如下:
集裝箱 ------ 容器實(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 restart centos
強(qiáng)制停止容器:docker kill 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
給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ìn)入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這個(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è)步驟:
登陸docker hub,然后隨便搜索一個(gè)鏡像,就以centos為例,選擇版本然后進(jìn)入,就可以看到它的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:相當(dāng)于java的Object類。所以鏡像的基礎(chǔ)鏡像,即源鏡像。 3、dockerfile內(nèi)容基礎(chǔ)知識:
保留字(就是上面那些FROM、ADD等關(guān)鍵字)都必須為大寫字母并且后面要跟隨至少一個(gè)參數(shù) 每條指令都會創(chuàng)建一個(gè)新的鏡像層,并對鏡像進(jìn)行提交 4、dockerfile的執(zhí)行流程:
docker從基礎(chǔ)鏡像中運(yùn)行一個(gè)容器 執(zhí)行類似docker commit的操作提交一個(gè)新的鏡像層 docker再基于剛提交的鏡像運(yùn)行一個(gè)新的容器 執(zhí)行dockerfile中的下一條指令直到所有指令都執(zhí)行完成 5、dockerfile的保留字:
FROM:表示當(dāng)前要構(gòu)建的新鏡像是基于哪個(gè)鏡像的 RUN:容器構(gòu)建時(shí)需要運(yùn)行的命令 WORKDIR:指定在創(chuàng)建容器后,終端默認(rèn)登陸進(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 ~
# 安裝vim
RUN yum -y install vim
# 安裝網(wǎng)絡(luò)工具,使其能用ifconfig命令
RUN yum -y install net-tools
# 端口號
EXPOSE 80
CMD /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 centos
RUN yum install -y curl
CMD ["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:COPY
和ADD
的使用。首先在opt目錄下先搞兩個(gè)tar.gz包和一個(gè)copy.txt文件,一個(gè)jdk8,一個(gè)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è)置登陸落腳點(diǎn)
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
# 指定容器運(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
2、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:鏡像版本號