容器鏡像技術(shù)揭秘 稀火、 發(fā)布容器服務(wù)器 暖哨、 私有鏡像倉(cāng)庫(kù)

容器技術(shù)

鏡像管理

commit 打包鏡像

docker commit 容器id 新鏡像名稱:標(biāo)簽

[root@docker-0001 ~]# docker run -it centos:latest
[root@02fd1719c038 ~]# rm -f /etc/yum.repos.d/*.repo
[root@02fd1719c038 ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.myhuaweicloud.com/repo/CentOS-Base-7.repo
[root@02fd1719c038 ~]# yum install -y net-tools vim-enhanced tree bash-completion iproute psmisc && yum clean all
[root@02fd1719c038 ~]# exit
[root@docker-0001 ~]# docker commit 02fd1719c038 myos:latest

Dockerfile打包鏡像

Dockerfile語(yǔ)法
語(yǔ)法指令 語(yǔ)法說(shuō)明
FROM 基礎(chǔ)鏡像
RUN 制作鏡像時(shí)執(zhí)行的命令,可以有多個(gè)
ADD 復(fù)制文件到鏡像凰狞,自動(dòng)解壓
COPY 復(fù)制文件到鏡像篇裁,不解壓
EXPOSE 聲明開放的端口
ENV 設(shè)置容器啟動(dòng)后的環(huán)境變量
WORKDIR 定義容器默認(rèn)工作目錄(等于cd)
CMD 容器啟動(dòng)時(shí)執(zhí)行的命令,僅可以有一條CMD
使用Dockerfile創(chuàng)建鏡像

docker build -t 鏡像名稱:標(biāo)簽 Dockerfile所在目錄

制作apache鏡像

CMD 指令可以查看 service 文件的啟動(dòng)命令 ExecStart(/lib/systemd/system/httpd.service)

ENV 環(huán)境變量查詢服務(wù)文件中的環(huán)境變量配置文件 EnvironmentFile 指定的文件內(nèi)容

[root@docker-0001 ~]# mkdir apache; cd apache
[root@docker-0001 apache]# vim Dockerfile
FROM myos:latest
RUN  yum install -y httpd php
ENV  LANG=C
ADD  webhome.tar.gz  /var/www/html/
WORKDIR /var/www/html/
EXPOSE 80
CMD ["/usr/sbin/httpd", "-DFOREGROUND"]
# 拷貝 webhome.tar.gz 到當(dāng)前目錄中
[root@docker-0001 apache]# docker build -t myos:httpd .

查看與驗(yàn)證鏡像

[root@docker-0001 web]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
myos                httpd               db15034569da        12 seconds ago      412MB
myos                latest              867409e412c8        2 hours ago         281MB
[root@docker-0001 web]# docker rm -f $(docker ps -aq)
[root@docker-0001 web]# docker run -itd myos:httpd
[root@docker-0001 web]# curl http://172.17.0.2/info.php
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.29.0
    [REQUEST_URI] => /info.php
)
php_host:   6c9e124bee1a
1229
制作php-fpm鏡像
[root@docker-0001 ~]# mkdir php; cd php
[root@docker-0001 php]# vim Dockerfile
FROM myos:latest
RUN  yum install -y php-fpm
EXPOSE 9000
CMD ["/usr/sbin/php-fpm", "--nodaemonize"]
[root@docker-0001 php]# docker build -t myos:php-fpm .

驗(yàn)證服務(wù)

[root@docker-0001 ~]# docker run -itd myos:php-fpm
deb37734e52651161015e9ce7771381ee6734d1d36bb51acb176b936ab1b3196
[root@docker-0001 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS
deb37734e526        myos:php-fpm        "/usr/sbin/php-fpm -…"   17 seconds ago      Up 15 seconds       
[root@docker-0001 ~]# docker exec -it deb37734e526 /bin/bash
[root@deb37734e526 ~]# ss -ltun
Netid  State      Recv-Q        Send-Q          Local Address:Port         Peer Address:Port 
tcp    LISTEN     0             128             127.0.0.1:9000             *:*
[root@deb37734e526 ~]# 
制作nginx鏡像

1赡若、制作 nginx 軟件包

[root@docker-0001 ~]# yum install -y gcc make pcre-devel openssl-devel
[root@docker-0001 ~]# useradd nginx
[root@docker-0001 ~]# tar -zxvf nginx-1.12.2.tar.gz
[root@docker-0001 ~]# cd nginx-1.12.2
[root@docker-0001 nginx-1.12.2]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module
[root@docker-0001 nginx-1.12.2]# make && make install
[root@docker-0001 nginx-1.12.2]# # 拷貝 docker-images/info.html和info.php 到 nginx/html 目錄下
[root@docker-0001 nginx-1.12.2]# cd /usr/local/
[root@docker-0001 local]# tar czf nginx.tar.gz nginx

2达布、制作鏡像

[root@docker-0001 local]# mkdir /root/nginx ;cd /root/nginx
[root@docker-0001 nginx]# cp /usr/local/nginx.tar.gz ./
[root@docker-0001 nginx]# vim Dockerfile 
FROM myos:latest
RUN  yum install -y pcre openssl && useradd nginx
ADD  nginx.tar.gz /usr/local/
EXPOSE 80
WORKDIR /usr/local/nginx/html
CMD  ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]
[root@docker-0001 nginx]# docker build -t myos:nginx .

驗(yàn)證服務(wù)

[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
deb37734e526
[root@docker-0001 ~]# docker run -itd myos:nginx
e440b53a860a93cc2b82ad0367172c344c7207def94c4c438027c60859e94883
[root@docker-0001 ~]# curl http://172.17.0.2/info.html
<html>
  <marquee  behavior="alternate">
      <font size="12px" color=#00ff00>Hello World</font>
  </marquee>
</html>
[root@docker-0001 ~]# 

發(fā)布容器服務(wù)

對(duì)外發(fā)布服務(wù)

給 docker-0001 綁定一個(gè)公網(wǎng)IP

docker run -itd -p 宿主機(jī)端口:容器端口 鏡像名稱:標(biāo)簽

# 把 docker-0001 變成 apache 服務(wù)
[root@docker-0001 ~]# docker run -itd -p 80:80 myos:httpd

# 把 docker-0001 變成 nginx 服務(wù),首先必須停止 apache
[root@docker-0001 ~]# docker stop $(docker ps -q)
[root@docker-0001 ~]# docker run -itd -p 80:80 myos:nginx

驗(yàn)證方式: 通過(guò)瀏覽器訪問(wèn)即可

容器共享卷

docker run -itd -v 宿主機(jī)對(duì)象:容器內(nèi)對(duì)象 鏡像名稱:標(biāo)簽

使用共享卷動(dòng)態(tài)修改容器內(nèi)配置文件

[root@docker-0001 ~]# mkdir /var/webconf
[root@docker-0001 ~]# cp /usr/local/nginx/conf/nginx.conf /var/webconf/
[root@docker-0001 ~]# vim /var/webconf/nginx.conf
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
[root@docker-0001 ~]# docker run -itd -p 80:80 --name nginx \
                                 -v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf myos:nginx

驗(yàn)證方式: 使用 exec 進(jìn)入容器查看

[root@docker-0001 ~]# docker exec -it nginx /bin/bash
[root@e440b53a860a html]# cat /usr/local/nginx/conf/nginx.conf
[root@e440b53a860a html]# # 查看 php 相關(guān)配置是否被映射到容器內(nèi)
容器間網(wǎng)絡(luò)通信

實(shí)驗(yàn)架構(gòu)圖例

graph LR
  subgraph docker-0001
    style docker-0001 fill:#ffffc0,color:#ff00ff
      subgraph 容器1
      style 容器1 color:#00ff00,fill:#88aaff
        APP1[(Nginx)];NET1{{共享網(wǎng)絡(luò)}}
      end
      subgraph 容器2
      style 容器2 color:#00ff00,fill:#88aaff
        APP2[(PHP)]
      end
    APP1 & APP2 --> NET1 & L((共享存儲(chǔ)卷))
  end
U((用戶)) --> APP1

實(shí)驗(yàn)步驟

[root@docker-0001 ~]# mkdir -p /var/{webroot,webconf}
[root@docker-0001 ~]# cd kubernetes/docker-images
[root@docker-0001 ~]# cp info.php info.html /var/webroot/
[root@docker-0001 ~]# cp /usr/local/nginx/conf/nginx.conf /var/webconf/
[root@docker-0001 ~]# vim /var/webconf/nginx.conf
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }
# 啟動(dòng)前端 nginx 服務(wù)逾冬,并映射共享目錄和配置文件
[root@docker-0001 ~]# docker run -itd --name nginx -p 80:80 \
      -v /var/webconf/nginx.conf:/usr/local/nginx/conf/nginx.conf \
      -v /var/webroot:/usr/local/nginx/html myos:nginx
# 啟動(dòng)后端 php 服務(wù)黍聂,并映射共享目錄
[root@docker-0001 ~]# docker run -itd --network=container:nginx \
      -v /var/webroot:/usr/local/nginx/html myos:php-fpm

驗(yàn)證服務(wù)

[root@docker-0001 ~]# curl http://docker-0001/info.html
<html>
  <marquee  behavior="alternate">
      <font size="12px" color=#00ff00>Hello World</font>
  </marquee>
</html>
[root@docker-0001 ~]# curl http://docker-0001/info.php
<pre>
Array
(
    [REMOTE_ADDR] => 172.17.0.1
    [REQUEST_METHOD] => GET
    [HTTP_USER_AGENT] => curl/7.29.0
    [REQUEST_URI] => /info.php
)
php_host:   f705f89b45f9
1229

docker私有倉(cāng)庫(kù)

docker私有倉(cāng)庫(kù)圖例
graph TB
  H1[(容器服務(wù)器<br>docker-0001)] & H2[(容器服務(wù)器<br>docker-0002)] --> I{{鏡像倉(cāng)庫(kù)}}
  style I fill:#77ff77
私有倉(cāng)庫(kù)配置
主機(jī)名 ip地址 最低配置
registry 192.168.1.100 1CPU,1G內(nèi)存
[root@registry ~]# yum install -y docker-distribution
[root@registry ~]# systemctl enable --now docker-distribution
[root@registry ~]# curl http://192.168.1.100:5000/v2/_catalog
{"repositories":[]}
docker客戶端配置

所有node節(jié)點(diǎn)都需要配置,這里 docker-0001身腻,docker-0002都要配置

native.cgroupdriver cgroup驅(qū)動(dòng)产还,docker默認(rèn) cgroupfs

registry-mirrors 默認(rèn)下載倉(cāng)庫(kù),使用國(guó)內(nèi)源能快一點(diǎn)

insecure-registries 私有倉(cāng)庫(kù)地址(重點(diǎn))

[root@docker-0001 ~]# vim /etc/docker/daemon.json
{
    "exec-opts": ["native.cgroupdriver=systemd"],
    "registry-mirrors": ["https://hub-mirror.c.163.com"],
    "insecure-registries":["192.168.1.100:5000", "registry:5000"]
}
[root@docker-0001 ~]# docker rm -f $(docker ps -aq)
[root@docker-0001 ~]# systemctl restart docker
上傳鏡像
# 上傳 myos:latest, myos:httpd, myos:nginx, myos:php-fpm
[root@docker-0001 ~]# docker tag myos:latest 192.168.1.100:5000/myos:latest
[root@docker-0001 ~]# docker push 192.168.1.100:5000/myos:latest
驗(yàn)證測(cè)試

curl http://倉(cāng)庫(kù)IP:5000/v2/_catalog

curl http://倉(cāng)庫(kù)IP:5000/v2/鏡像名稱/tags/list

[root@docker-0002 ~]# curl http://192.168.1.100:5000/v2/_catalog
{"repositories":["myos"]}
[root@docker-0002 ~]# curl http://192.168.1.100:5000/v2/myos/tags/list
{"name":"myos","tags":["latest"]}
# 使用遠(yuǎn)程鏡像啟動(dòng)容器
[root@docker-0002 ~]# docker run -it 192.168.1.100:5000/myos:latest
Unable to find image '192.168.1.100:5000/myos:latest' locally
latest: Pulling from myos
7dc0dca2b151: Pull complete 
95c297b4d705: Pull complete 
Digest: sha256:d61ffc053895e2dc16f63b8a2988dfe5f34207b48b1e74d397bb3267650ba4ce
Status: Downloaded newer image for 192.168.1.100:5000/myos:latest
[root@674ebe359e44 /]# 
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嘀趟,一起剝皮案震驚了整個(gè)濱河市脐区,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌她按,老刑警劉巖牛隅,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異酌泰,居然都是意外死亡媒佣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門陵刹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)默伍,“玉大人,你說(shuō)我怎么就攤上這事⊙惭椋” “怎么了际插?”我有些...
    開封第一講書人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)显设。 經(jīng)常有香客問(wèn)我框弛,道長(zhǎng),這世上最難降的妖魔是什么捕捂? 我笑而不...
    開封第一講書人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任瑟枫,我火速辦了婚禮,結(jié)果婚禮上指攒,老公的妹妹穿的比我還像新娘慷妙。我一直安慰自己,他們只是感情好允悦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開白布膝擂。 她就那樣靜靜地躺著,像睡著了一般隙弛。 火紅的嫁衣襯著肌膚如雪架馋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評(píng)論 1 297
  • 那天全闷,我揣著相機(jī)與錄音叉寂,去河邊找鬼。 笑死总珠,一個(gè)胖子當(dāng)著我的面吹牛屏鳍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播局服,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼钓瞭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腌逢?” 一聲冷哼從身側(cè)響起降淮,我...
    開封第一講書人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎搏讶,沒(méi)想到半個(gè)月后佳鳖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡媒惕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年系吩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妒蔚。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡穿挨,死狀恐怖月弛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情科盛,我是刑警寧澤帽衙,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站贞绵,受9級(jí)特大地震影響厉萝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榨崩,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一谴垫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧母蛛,春花似錦翩剪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至焦辅,卻和暖如春博杖,著一層夾襖步出監(jiān)牢的瞬間椿胯,已是汗流浹背筷登。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留哩盲,地道東北人前方。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像廉油,于是被迫代替她去往敵國(guó)和親惠险。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

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