第一本docker書(shū)-讀書(shū)筆記 第五章

這一章的主要內(nèi)容都是在執(zhí)行命令撒踪。我們也重點(diǎn)把命令整理出來(lái),執(zhí)行一遍大渤,看看效果練練手制妄。

cd /data/docker_test/
mkdir sample
cd sample/
touch Dockerfile
vim Dockerfile

dockerfile 里面的內(nèi)容

FROM ubuntu
MAINTAINER huangzelin "huangzelin@example.com"
ENV REFRESHER_AT 202-12-01
RUN apt-get update
RUN apt-get -y -q install nginx
RUN mkdir -p /var/www/html
ADD nginx/global.conf /etc/nginx/conf.d/
ADD nginx/nginx.conf /etc/nginx/

EXPOSE 80

然后給nginx傳入兩份配置

mkdir nginx && cd nginx
vim global.conf
vim nginx.conf

global.conf

server {
        listen          0.0.0.0:80;
        server_name     _;

        root            /var/www/html/website;
        index           index.html index.htm;

        access_log      /var/log/nginx/default_access.log;
        error_log       /var/log/nginx/default_error.log;
}

nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;
daemon off;

events {  }

http {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  access_log /var/log/nginx/access.log;
  error_log /var/log/nginx/error.log;
  gzip on;
  gzip_disable "msie6";
  include /etc/nginx/conf.d/*.conf;
}

構(gòu)建鏡像

sudo docker build -t huangzelin/nginx .

創(chuàng)建卷目錄,并寫(xiě)入網(wǎng)頁(yè)內(nèi)容

mkdir website && cd website
vim index.html

<head>

        <title>Test website</title>

</head>

<body>

        <h1>This is a yahaha website</h1>

</body>

運(yùn)行docker并指定卷目錄

docker run -d -p 80 --name website -v $PWD/website:/var/www/html/website huangzelin/nginx nginx

查看端口

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                   NAMES
87a99d7b5681        huangzelin/nginx    "nginx"             13 minutes ago      Up 13 minutes       0.0.0.0:32768->80/tcp   website

image-20201201082322255

修改卷目錄下面的代碼泵三。

<head>

        <title>Test website</title>

</head>

<body>

        <h1>This is a yahaha website</h1>

</body>

image-20201201082538124

對(duì)應(yīng)內(nèi)容也會(huì)馬上生效忍捡。

構(gòu)建一個(gè)web應(yīng)用程序

創(chuàng)建一個(gè)webAPP目錄

mkdir sinatra && cd sinatra
vim Dockerfile

FROM ubuntu
LABEL maintainer="huangzelin@example.com"
ENV REFRESHED_AT 2014-06-01

RUN apt-get -qq update && apt-get -qq install ruby ruby-dev build-essential redis-tools
RUN gem sources --remove https:/rubygems.org
RUN gem sources -a https://gems.ruby-china.com
RUN gem install  sinatra json redis

RUN mkdir -p /opt/webapp

EXPOSE 4567

CMD [ "/opt/webapp/bin/webapp" ]

這里把gem轉(zhuǎn)成國(guó)內(nèi)的鏡像源,不然太慢了切黔。

然后創(chuàng)建webapp目錄砸脊。這下面是作者寫(xiě)的一個(gè)ruby程序。

可以去這里拿

給作者的程序增加可運(yùn)行權(quán)限纬霞。

chmod +x webapp/bin/webapp

然后開(kāi)始build鏡像凌埂。

docker build -t huangzelin/sinatra .

啟動(dòng)

sudo docker run -d -p 4567 --name webapp -v $PWD/webapp:/opt/webapp huangzelin/sinatra

看一下他的映射端口:

root@DESKTOP-3JK8RKR:/data/docker_test/sinatra# docker ps |grep  webapp
c4da61b1d6fa        huangzelin/sinatra   "/opt/webapp/bin/web…"   7 minutes ago       Up 7 minutes        0.0.0.0:32768->4567/tcp   webapp

image-20201202084206977

是通的,作者這個(gè)小程序有個(gè)路由诗芜,是post到/json的瞳抓。

  post '/json/?' do
    params.to_json
  end

也確實(shí)是生效的。

image-20201202084538252

啟動(dòng)redis

老規(guī)矩伏恐,新起一個(gè)redis目錄寫(xiě)Dockerfile

mkdir redis && cd redis
vim Dockerfile

FROM ubuntu
LABEL maintainer="huangzelin@example.com"
ENV REFRESHED_AT 2014-06-01

RUN apt-get -qq update && apt-get -qq install redis-server redis-tools

EXPOSE 6379

ENTRYPOINT ["/usr/bin/redis-server" ]
CMD []

啟動(dòng)

docker run -d -p 6379 --name redis huangzelin/redis

安裝一個(gè)redis-tools孩哑,看看能不能連上redis

apt-get -y install redis-tools

看看redis被映射到哪里了。

docker ps |grep redis

連接

redis-cli -h 127.0.0.1 -p XXXXX

除此此外翠桦,連接redis還可以通過(guò)docker的網(wǎng)卡去連接横蜒。

ip a show docker0

可以看到這個(gè)網(wǎng)卡的信息胳蛮,容器要訪問(wèn)外網(wǎng),首先一跳就需要跳到這個(gè)網(wǎng)卡上才能連接外網(wǎng)丛晌,但是通過(guò)iptable限制了只有我們填寫(xiě)了-p配置的端口才能被外網(wǎng)訪問(wèn)仅炊。

所以我們也可以通過(guò)網(wǎng)卡來(lái)訪問(wèn)到對(duì)應(yīng)的地址。

root@DESKTOP-3JK8RKR:/data/docker_test/redis# docker inspect redis -f '{{ .NetworkSettings.IPAddress}}'
172.18.0.2

查看地址連接澎蛛。

redis-cli -h 172.18.0.2 -p 6379

但是這兩種連接方式抚垄,在重啟容器之后,地址可能會(huì)變的谋逻。

還有一種方式支持容器互聯(lián)呆馁。

我們把redis容器給刪了,重新起一個(gè)毁兆。

docker stop redis
docker rm redis
docker run -d --name redis huangzelin/redis

這次我們沒(méi)有重新起端口了浙滤。

docker run -p 4567 --name webapp --link redis:db -t -i -v $PWD/webapp:/opt/webapp huangzelin/sinatra /
bin/bash

我們讓之前的webapp新構(gòu)建一個(gè)容器(記得docker里面的name不能相同)然后多了一個(gè)配置之前沒(méi)見(jiàn)過(guò),--link荧恍,標(biāo)識(shí)了兩個(gè)容器的父子連接瓷叫。需要兩個(gè)參數(shù)屯吊,一個(gè)事實(shí)容器名字送巡,另一個(gè)是連接后容器的別名。這樣只有使用--link標(biāo)識(shí)連接到這個(gè)容器才能連接到這個(gè)端口盒卸,容器的端口不需要對(duì)本地宿主機(jī)公開(kāi)骗爆。

進(jìn)入該容器之后,我們ping一下db

apt-get install inetutils-ping
ping db

可以看到是ping得通的蔽介。

而且在容器的env里面摘投,還多了一些可以直接使用的連接信息虹蓄。

root@4dab1238532d:/# env
DB_PORT_6379_TCP_ADDR=172.18.0.2
DB_PORT_6379_TCP=tcp://172.18.0.2:6379
DB_PORT=tcp://172.18.0.2:6379

那么我們的程序代碼里就能直接用這些環(huán)境變量去實(shí)現(xiàn)容器互聯(lián)了犀呼。

但是我們的redis版本是新版本,在沒(méi)有指定綁定端口并且沒(méi)有設(shè)置密碼的情況下薇组,會(huì)啟動(dòng)保護(hù)模式外臂,我們啟動(dòng)時(shí)加入?yún)?shù)把保護(hù)模式去掉。

docker stop redis
docker rm redis
docker run -d --name redis huangzelin/redis --protected-mode no

新建webapp_redis律胀,用來(lái)啟動(dòng)一個(gè)連接redis的應(yīng)用宋光。

里面的內(nèi)容直接在作者的示例代碼里面拷貝。

dockerbook-code/code/5/sinatra/webapp_redis下炭菌。

然后

 docker build -t huangzelin/redis_app .
 docker run -p 4567 --name redis_app --link redis:db -t -v $PWD/webapp_redis:/opt/webapp huangzelin/redis_app

再次用postman去發(fā)送同樣的請(qǐng)求罪佳。或者curl

curl -X POST \
  http://localhost:32768/json \
  -H 'cache-control: no-cache' \
  -H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
  -H 'postman-token: f04598b5-7f81-b75b-4b79-eceee00866eb' \
  -F name=Foo \
  -F status=Bar

之后用之前安裝過(guò)redis的容器去連容器中的redis黑低,就會(huì)發(fā)現(xiàn)赘艳。

docker run -p 4567 --link redis:db -t -i -v $PWD/webapp:/opt/webapp huangzelin/sinatra /bin/bash
root@3ce955ae5f46:/# env |grep DB
DB_PORT_6379_TCP_ADDR=172.18.0.2
root@3ce955ae5f46:/# redis-cli -h 172.18.0.2 -p 6379
172.18.0.2:6379> keys *
1) "params"
172.18.0.2:6379> get params
"[{\"name\":\"Foo\",\"status\":\"Bar\"}]"
172.18.0.2:6379>

redis確實(shí)是將參數(shù)存儲(chǔ)起來(lái)了。容器有了聯(lián)動(dòng)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末第练,一起剝皮案震驚了整個(gè)濱河市阔馋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娇掏,老刑警劉巖呕寝,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異婴梧,居然都是意外死亡下梢,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門塞蹭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)孽江,“玉大人,你說(shuō)我怎么就攤上這事番电「谄粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵漱办,是天一觀的道長(zhǎng)这刷。 經(jīng)常有香客問(wèn)我,道長(zhǎng)娩井,這世上最難降的妖魔是什么暇屋? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮洞辣,結(jié)果婚禮上咐刨,老公的妹妹穿的比我還像新娘。我一直安慰自己扬霜,他們只是感情好定鸟,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著著瓶,像睡著了一般联予。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蟹但,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天躯泰,我揣著相機(jī)與錄音,去河邊找鬼华糖。 笑死麦向,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的客叉。 我是一名探鬼主播诵竭,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼话告,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了卵慰?” 一聲冷哼從身側(cè)響起沙郭,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎裳朋,沒(méi)想到半個(gè)月后病线,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲤嫡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年送挑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片暖眼。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡惕耕,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出诫肠,到底是詐尸還是另有隱情司澎,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布栋豫,位于F島的核電站挤安,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏笼才。R本人自食惡果不足惜漱受,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一络凿、第九天 我趴在偏房一處隱蔽的房頂上張望骡送。 院中可真熱鬧,春花似錦絮记、人聲如沸摔踱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)派敷。三九已至,卻和暖如春撰洗,著一層夾襖步出監(jiān)牢的瞬間篮愉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工差导, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留试躏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓设褐,卻偏偏與公主長(zhǎng)得像颠蕴,于是被迫代替她去往敵國(guó)和親泣刹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容