剛開(kāi)始搞開(kāi)發(fā)的時(shí)候趁怔,朋友就建議有時(shí)間學(xué)習(xí)下docker湿硝,通過(guò)docker構(gòu)建環(huán)境,快準(zhǔn)狠润努。
可惜過(guò)了這么多年关斜,才開(kāi)始學(xué)習(xí)。哈哈铺浇。
今天主要聊下自己從安裝docker痢畜,到創(chuàng)建第一個(gè)鏡像文件,到第一個(gè)容器鳍侣,以及在容器中安裝redis丁稀,最終通過(guò)宿主機(jī)訪問(wèn)成功的過(guò)程,以及躺過(guò)的坑倚聚。希望對(duì)大家有借鑒價(jià)值线衫。
首先在本地電腦安裝docker
我是直接手動(dòng)下載安裝19.03.8stable版本 https://www.runoob.com/docker/macos-docker-install.html
Windows連接里也有下載安裝方法,請(qǐng)自取秉沼。
建議大家去https://hub.docker.com/注冊(cè)一個(gè)賬戶桶雀,方便將自己制作好的image發(fā)布到dockerhub中方便大家下載。(當(dāng)然唬复,不注冊(cè)也是可以的,從dockerhub上pull鏡像是不需要登陸的全肮,另外自己的鏡像文件想要分享給其他小伙伴們的話也可以使用export 與 import命令敞咧,以后有機(jī)會(huì)的話會(huì)寫(xiě))
下一步就是鏡像加速
19版本界面改了,添加加速地址通過(guò)點(diǎn)擊小鯨魚(yú)應(yīng)用-> Perferences->到下圖
可以使用阿里辜腺、163等提供的加速器
重啟一下就可以開(kāi)始愉快的玩耍了休建。
準(zhǔn)備好鏡像文件
因?yàn)橛袕?qiáng)迫癥,東西都是想自己安裝(主要是屬性安裝目錄)我在此是只先弄centos7的鏡像评疗,然后自己編譯安裝的redis测砂。如果嫌棄的話“俅遥可以直接在dockerhub上下載官方提供安裝好的鏡像文件砌些。
docker pull centos:centos7
centos:centos7 冒號(hào)前是軟件名,后面是版本加匈。建議大家都指定版本存璃,若不選則默認(rèn)下載最后的latest版本,因?yàn)樽钚鲁龅衿矗赡懿蝗缜懊姘姹痉€(wěn)定纵东,會(huì)有未知bug。
下載需要點(diǎn)時(shí)間啥寇,完成后
docker images
就可以看到列表下有剛下載的鏡像文件了
REPOSITORY:鏡像文件名
TAG:版本
IMAGE ID:加密的id
CREATED:創(chuàng)建時(shí)間
SIZE:鏡像文件大小
ok偎球,現(xiàn)在可以構(gòu)建容器了洒扎,很簡(jiǎn)單的一條命令
docker run -itd --name centos centos:centos7
-a stdin: 指定標(biāo)準(zhǔn)輸入輸出內(nèi)容類(lèi)型,可選 STDIN/STDOUT/STDERR 三項(xiàng);
-d: 后臺(tái)運(yùn)行容器衰絮,并返回容器ID;
-i: 以交互模式運(yùn)行容器袍冷,通常與 -t 同時(shí)使用;
-t: 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用;
--name="nginx-lb": 為容器指定一個(gè)名稱;
執(zhí)行成功后岂傲,會(huì)返回一個(gè)加密id难裆,這就是你的容器id。
docker exec -it centos bash
然后就進(jìn)入了你熟悉的centos環(huán)境了(命令最后的bash,算是docker的一個(gè)小bug,原因大概是你進(jìn)入容器中什么都不做镊掖,你會(huì)退出乃戈,但你執(zhí)行bash、top之類(lèi)的命令就可以正常操作了)
安裝redis 直接擼code
groupadd -r redis && useradd -r -g redis redis
yum update -y;
yum -y install gcc automake autoconf libtool make wget epel-release gcc-c++;
mkdir -p /usr/src/redis;
wget https://github.com/antirez/redis/archive/5.0.7.tar.gz;
tar -zxvf 5.0.7.tar.gz -C /usr/src/redis;
#為了保證image盡量的小亩进,解壓完症虑,將安裝包刪除
rm -rf 5.0.7.tar.gz
cd /usr/src/redis/redis-5.0.7 && make && make PREFIX=/usr/local/redis install;
(redis6最新版本,在編譯安裝的時(shí)候gcc有版本要求归薛,且在編譯的時(shí)候要指定版本谍憔,以后有機(jī)會(huì)單獨(dú)聊)
redis-server
就可以看見(jiàn)熟悉的redis開(kāi)啟命令
在開(kāi)一個(gè)客戶端,打開(kāi)客戶端 redis-cli 說(shuō)明可以正常操作了主籍。
至此习贫,一個(gè)正常可用的redis容器就可以了千元。
最后實(shí)現(xiàn)從宿主機(jī)可以通過(guò)客戶端訪問(wèn)到redis容器
想要實(shí)現(xiàn)聯(lián)通苫昌,需要在生成容器時(shí),指定端口幸海。
docker exec -it -p 8379:6379 centos bash
但是我們現(xiàn)在已經(jīng)生成好了容器祟身,怎么辦呢。
簡(jiǎn)單物独,將容器逆向生成鏡像文件袜硫,然后重新生成新的容器。
docker commit centos centos/redis
現(xiàn)在你的docker images 里就多了一條鏡像 centos/redis
重新run新的容器
docker run -itd -p 8379:6379 --name redis centos/redis bash
現(xiàn)在 docker ps 里就有了兩個(gè)容器
進(jìn)入到新的容器 redis里
docker exec -it redis bash
開(kāi)啟redis-server挡篓,redis-cli 可以正常使用
然后在宿主機(jī)婉陷,通過(guò)命令行遠(yuǎn)程訪問(wèn)容器
redis-cli -h 127.0.0.1 -p 8379
#發(fā)現(xiàn)會(huì)報(bào)如下錯(cuò)誤
(error) DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. 4) Setup a bind address or an authentication password. NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside.
解決方法:
更改redis.conf
將配置文件里的protected mode改為了no,原本是yes瞻凤。
然后重啟服務(wù)
在容器的cli里設(shè)置密碼
>config set requirepass 123456
>OK
在通過(guò)宿主機(jī)登陸
完美