100.用模板建立鏡像 容器、倉庫、數據管理

25.5 經過模板建立鏡像mysql

25.6 容器管理linux

25.7 倉庫管理nginx

25.8 數據管理git

 

 

 

25.5 經過模板建立鏡像web

 

 

 

1.首先去下載一個模板redis

http://openvz.org/Download/templates/precreated //下載速度不快,阿銘下載了一個centos6的模板centos-6-x86-minimal.tar.gzsql

#模板去openvz官方下載mongodb

2.導入該鏡像的命令爲:docker

cat centos-6-x86-minimal.tar.gz|docker import - centos6 #後面爲鏡像的名字json

3.docker images查看導入的鏡像

4.把現有鏡像,導出爲一個文件:

docker save -o aming-centos.tar aming #(要導出的文件名:鏡像名)

咱們還能夠用該文件恢復本地鏡像:

docker load --input aming-centos.tar 或者

docker load < aming-centos.tar

docker push image_name //能夠把本身的鏡像傳到dockerhub官方網站上去,但前提是須要先註冊一個用戶,後續若是有需求再研究吧

導出用的是docker import #(import/export爲一對)

導入用的是save/load(一對)

 

 

實例:

[root@axinlinux-01 ~]# wget http://download.openvz.org/template/precreated/centos-6-x86-minimal.tar.gz

#也能夠右鍵 複製連接地址,在linux下wget下載。可是比較慢,仍是在網頁下載的

[root@axinlinux-01 ~]# rm -f centos-6-x86-minimal.tar.gz #刪掉便可,咱們在網頁下載

[root@axinlinux-01 ~]# rz #用rz將包傳到linux上

[root@axinlinux-01 ~]# du -sh centos-6-x86-minimal.tar.gz

201M centos-6-x86-minimal.tar.gz

[root@axinlinux-01 ~]# cat centos-6-x86-minimal.tar.gz|docker import - centos6

sha256:f55de466c591f88f7bb0f56072649e7fef9637be205ea9d92cec33a7d7c885c1

[root@axinlinux-01 ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

centos6 latest f55de466c591 46 seconds ago 512MB

[root@axinlinux-01 ~]# docker run -itd centos6 bash

da08a3171ff47dcdc1b9e0b33de4100bd2bb5b4bdd604be8aad415f2ada36175

[root@axinlinux-01 ~]# docker exec -it da08a3171ff47dcdc1 bash

[root@da08a3171ff4 /]# cat /etc/issue #看一下版本

CentOS release 6.8 (Final)

Kernel \r on an \m

[root@da08a3171ff4 /]# ifconfig #看一下網卡

[root@da08a3171ff4 /]# uname -a #查看內核

Linux da08a3171ff4 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux #跟宿主機是一個內核。由於是基於linux內核的,緣由就在這。雖然版本是6.8,可是內核也是3.10。也就是不管下載什麼版本,他都是跟宿主機一個內核

[root@axinlinux-01 ~]# docker save -o centos7_with_nettool.tar centos_with_net #將centos_with_net鏡像導出爲centos7_with_nettool.tar

[root@axinlinux-01 ~]# docker rmi 9fe62e7d7355 #刪除這個鏡像,

Error response from daemon: conflict: unable to delete 9fe62e7d7355 (cannot be forced) - image is being used by running container 18389142fbb7

[root@axinlinux-01 ~]# docker load < centos7_with_nettool.tar #刪完以後咱們在導入

[root@axinlinux-01 ~]# docker images #查看一下就又回來了

centos_with_net latest 9fe62e7d7355 24 hours ago 272MB

 

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

25.6 容器管理

 

 

 

1.docker create  -it  centos6  bash //這樣能夠建立一個容器,但該容器並無啓動

2.docker start   container_id   //啓動容器後,可使用 docker ps  查看到,有start 就有stop,和restart

以前咱們使用的docker run 至關於先create再start

3.docker run -it centos bash  

這樣進入了一個虛擬終端裏面,咱們能夠運行一些命令,使用命令exit或者ctrl d 退出該bash,當退出後這個容器也會中止。

docker run -d  可讓容器在後臺運行

好比:docker run -d centos bash -c "while :; do echo "123"; sleep 2; done"

#之後啓動容器就docker run -itd

4.docker run --name web -itd centos bash // --name 給容器自定義名字

5.docker run --rm -it centos bash -c "sleep 30" //--rm 可讓容器退出後直接刪除,在這裏命令執行完容器就會退出

6.docker logs 能夠獲取到容器的運行歷史信息,用法以下

docker logs  container_id  

7.docker attach 能夠進入一個後臺運行的容器,好比

docker attach  container_id    //可是attach命令不算好用,好比咱們想要退出終端,就得exit了,這樣容器也就退出了,還有一種方法

docker exec -it container_id  bash  //能夠臨時打開一個虛擬終端,而且exit後,容器依然運行着 #咱們用docker exec -it就能夠了

8.docker rm  container_id  //container_id是ps的時候查看到的,這樣就能夠把container刪除,若是是運行的容器,能夠加-f #rmi爲刪除一個鏡像

9.docker  export  container_id  > file.tar  // 導出容器,能夠遷移到其餘機器上,須要導入

cat file.tar |docker import - aming_test   //這樣會生成aming_test的鏡像

 

 

 

實例:

1.

[root@axinlinux-01 ~]# docker create -it centos6 bash

fe427a3a44a66485e56cb3732ed7cc906c666bbc61b88d4642607a1302a842e2

[root@axinlinux-01 ~]# docker ps #直接ps是看不到的,由於只能查看開啓的容器

[root@axinlinux-01 ~]# docker ps -a #加上-a才能看到

2.

[root@axinlinux-01 ~]# docker start fe427a3a44a6

fe427a3a44a6

[root@axinlinux-01 ~]# docker ps -a #查看就啓動了

4.

[root@axinlinux-01 ~]# docker run -itd --name centos_111 centos #把要啓動的容器放在後面,--name後面跟的是自定義的名字

5ca226fcd5983793ac0bb67c8a3a8ef31ff9ee07371626b5f2a22c57eb1d999b

[root@axinlinux-01 ~]# docker ps #這樣就能夠看到自定義的名字了

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

5ca226fcd598 centos "/bin/bash" 5 seconds ago Up 4 seconds centos_111

[root@axinlinux-01 ~]# docker exec -it centos_111 bash #而後咱們進的時候就直接加自定義的名字就能夠了

5.

[root@axinlinux-01 ~]# docker run --rm -it centos bash -c "sleep 30" #運行30秒後退出,並刪除這個容器

[root@axinlinux-01 ~]# docker ps -a #查看沒有這個容器

6.

[root@axinlinux-01 ~]# docker run -itd centos bash -c "echo niubi" #在這個容器裏,輸出一些信息

fd7f170bb4d49a5702245f47a0ad62bcfdeb08fae7b4e7759776e28be2502f1c

[root@axinlinux-01 ~]# docker logs fd7f170b #logs後面跟這個id,就會有信息出來

niubi

8.

[root@axinlinux-01 ~]# docker ps -a #查看一下,有不少容器

[root@axinlinux-01 ~]# docker rm fd7f170bb4d4 #咱們刪除一些exit狀態的容器

fd7f170bb4d4

[root@axinlinux-01 ~]# docker rm 5ca226fcd598 #若是咱們刪除一些正在運行的容器,就會報錯

Error response from daemon: You cannot remove a running container 5ca226fcd5983793ac0bb67c8a3a8ef31ff9ee07371626b5f2a22c57eb1d999b. Stop the container before attempting removal or force remove

[root@axinlinux-01 ~]# docker rm -f 5ca226fcd598 #加-f就能夠刪除了

5ca226fcd598

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

25.7 倉庫管理

 

 

 

搞一個私有的docker倉庫

1.docker pull registry   //下載registry 鏡像,registry爲docker官方提供的一個鏡像,咱們能夠用它來建立本地的docker私有倉庫。

2.docker run -d -p 5000:5000 registry   //以registry鏡像啓動容器,-p會把容器的端口映射到宿主機上,:左邊爲宿主機監聽端口,:右邊爲容器監聽端口

3.curl 127.0.0.1:5000/v2/_catalog //能夠訪問它 #目前是空的,須要上傳一個鏡像到這個倉庫

4.下面咱們來把其中一個鏡像上傳到私有倉庫

docker tag aming_test  192.168.208.128:5000/centos //先標記一下tag,必需要帶有私有倉庫的ip:port

docker push 192.168.208.128:5000/centos //把標記的鏡像給推送到私有倉庫

此時並不會成功,Get https://172.7.15.113:5000/v2/: http: server gave HTTP response to HTTPS client(意思就是要使用https的地址)

5.更改配置文件,vi /etc/docker/daemon.json//更改成 (指定私有倉庫的地址)

{ "insecure-registries":["172.7.15.113:5000"] }

6.systemctl restart docker

7.docker ps -a //查看容器已經關閉,還須要啓動

docker start id //這裏的id爲registry容器id

8.再次push

docker push 172.7.15.113:5000/centos

9.curl 127.0.0.1:5001/v2/_catalog //能夠查看到推送上來的鏡像

從私有倉庫裏,把鏡像拉下來:

vi /etc/docker/daemon.json #由於不可能只爲本機作服務,還須要在其餘機器上配置這個文件,指定他的ip(還有啓動docker)

docker pull 192.168.208.128:5000/centos #直接pull就能夠了

 

實例:

[root@axinlinux-01 ~]# docker pull registry #下載registry鏡像

[root@axinlinux-01 ~]# docker run -d -p 5000:5000 registry

0ed5a339318ff8c08261d18c20f786729e01fb7d37652abaaf7b77eb6cee54b8

#-p映射端口,左邊是宿主機的端口,右邊是容器的端口。假如容器裏有個nginx,別人無法直接去訪問這個nginx,須要跟宿主機作一個端口映射。就是說你容器監聽了5000端口,到了外面宿主機也得監聽5000端口,固然也能夠寫成其餘,好比5001

[root@axinlinux-01 ~]# docker ps

[root@axinlinux-01 ~]# telnet 127.0.0.1 5000 #咱們能夠測試一下看5000端口是否是通的

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is '^]'.

^]

telnet> quit

Connection closed.

[root@axinlinux-01 ~]# curl 127.0.0.1:5000/v2/_catalog #如今這裏面暫時是空的,咱們須要在這裏面把鏡像傳上去

{"repositories":[]}

[root@axinlinux-01 ~]# docker tag centos 192.168.208.128:5000/centos #打個標籤。寫上宿主機的ip,若是別人也想訪問的時候,只能經過這個ip提供服務。好比,內網環境裏有不少個機器安裝了docker,上面也都有一些鏡像,那想把這些鏡像搞到這個倉庫裏來,就得經過這個ip去訪問

[root@axinlinux-01 ~]# docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

192.168.208.128:5000/centos latest 1e1148e4cc2c 9 days ago 202MB

[root@axinlinux-01 ~]# docker push 192.168.208.128:5000/centos6 #這時候就能夠推上去了,可是會有報錯。由於要使用https 的地址

The push refers to repository [192.168.208.128:5000/centos6]

Get https://192.168.208.128:5000/v2/: http: server gave HTTP response to HTTPS client

[root@axinlinux-01 ~]# vi /etc/docker/daemon.json #修改這個配置文件,把以前的配置刪掉,加入這一行。!!還能夠這樣寫,這樣兩行的配置都有了!!

{

"registry-mirrors": ["https://dhq9bx4f.mirror.aliyuncs.com"],

"insecure-registries":["192.168.208.128:5000"]

}

[root@axinlinux-01 ~]# systemctl restart docker #不要忘記重啓

[root@axinlinux-01 ~]# docker push 192.168.208.128:5000/centos6 #而後再推,又報錯。由於咱們沒有開啓repository的容器

The push refers to repository [192.168.208.128:5000/centos6]

An image does not exist locally with the tag: 192.168.208.128:5000/centos6

[root@axinlinux-01 ~]# docker ps -a #看一下registry的id

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

d1c6af5bd98d registry "/entrypoint.sh /etc…" 3 minutes ago Up 3 minutes 0.0.0.0:5000->5000/tcp modest_pasteur

[root@axinlinux-01 ~]# docker start d1c6af5bd98d #而後開啓這個容器

[root@axinlinux-01 ~]# docker push 192.168.208.128:5000/centos #再推

[root@axinlinux-01 ~]# curl 127.0.0.1:5000/v2/_catalog #查看有無推上去的鏡像

{"repositories":["centos"]}

還能夠再推一個ubuntu

[root@axinlinux-01 ~]# docker tag ubuntu 192.168.208.128:5000/ubuntu #先打標籤

[root@axinlinux-01 ~]# docker ps -a

d1c6af5bd98d registry "/entrypoint.sh /etc…" 22 minutes ago Exited (2) 2 minutes ago modest_pasteur

[root@axinlinux-01 ~]# docker start d1c6af5bd98d #檢查registry的容器有沒有開啓

[root@axinlinux-01 ~]# docker push 192.168.208.128:5000/ubuntu #而後直接推就能夠了

[root@axinlinux-01 ~]# curl 127.0.0.1:5000/v2/_catalog

{"repositories":["centos","ubuntu"]}

從私有倉庫裏,把鏡像拉下來:

[root@axinlinux-02 ~]# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo

[root@axinlinux-02 ~]# yum install lszrz #以上安裝docker最新版本

[root@axinlinux-02 ~]# rz #以前下載過docker的依賴,如今直接傳到linux上就能夠了

[root@axinlinux-02 ~]# yum install docker-ce #安裝docker

[root@axinlinux-02 ~]# vim /etc/docker/daemon.json #配置文件,指定ip及加速器

[root@axinlinux-02 ~]# systemctl start docker #開啓docker

[root@axinlinux-02 ~]# docker pull 192.168.208.128:5000/ubuntu #直接拉就能夠了

[root@axinlinux-02 ~]# docker pull ubuntu #不加ip就是直接下載官方的Ubuntu鏡像

 

 

 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

 

 

 

25.8 數據管理

 

 

 

容器是由鏡像啓動的。容器裏面產生的新的數據,存儲到了那裏。咱們再把容器關閉或刪除,那麼更改的一些新的數據就會一併消除。這也就覺得着你的數據有必定的風險。

因此會有一個辦法,就會把宿主機的目錄掛載到容器裏去。好比搞一個data目錄,容器產生的新的數據所有寫到data目錄下(也就是宿主機的磁盤上)。這樣即便你的容器中止或是銷燬,數據仍是都存在的

1. 掛載本地的目錄到容器裏

docker run -tid -v /data/:/data centos bash //-v 用來指定掛載目錄,:前面的/data/爲宿主機本地目錄,:後面的/data/爲容器裏的目錄,會在容器中自動建立

2. 掛載數據卷

其實咱們掛載目錄的時候,能夠指定容器name,若是不指定就隨機定義了。好比上面咱們沒有指定,它就生成了一個名字爲relaxed_franklin,這個名字可使用命令 docker ps  看最右側一列

docker run -itd --volumes-from relaxed_franklin aming123 bash

這樣,咱們使用aming123鏡像建立了新的容器,而且使用了 relaxed_franklin  容器的數據卷

3. 定義數據卷容器

有時候,咱們須要多個容器之間相互共享數據,相似於linux裏面的NFS,因此就能夠搭建一個專門的數據卷容器,而後其餘容器直接掛載該數據卷。

首先創建數據卷容器

docker run -itd -v /data/ --name testvol(容器的名字) centos  bash  //注意這裏的/data/是容器的/data目錄,並不是本地的/data/目錄。 #也就是分享容器這個目錄,讓其餘容器能夠去掛載。和上面的加冒號掛載不太同樣,那個是指定一個容器掛載。

而後讓其餘容器掛載該數據卷。

docker run -itd  --volumes-from testvol aming123 bash

#若是共享的目錄是data,而這邊掛載的確實home,能夠作軟鏈接

 

 

 

實例:

[root@axinlinux-01 docker]# docker run -itd -v /data/:/data centos_with_net bash

9cf09cd1eec89c54868435cb1ab3996462c47c3c212cf2047ae3d9fa8daa0fdf

[root@axinlinux-01 docker]# docker exec -it 9cf09cd1 bash

[root@9cf09cd1eec8 /]# ls -l /data #兩邊數據對比是同樣的

[root@axinlinux-01 docker]# ls -l /data

[root@axinlinux-01 docker]# docker exec -it 9cf09cd1 bash

[root@9cf09cd1eec8 /]# mkdir /data/123 #在容器作一個變動

[root@9cf09cd1eec8 /]# exit

[root@axinlinux-01 docker]# ls /data #退出來,在宿主機上也有一樣的

123 aming_linux ftp gitroot mariadb mongodb mysql redis redis2 redis_data svnroot wwwroot

root@axinlinux-01 docker]# docker run -itd --volumes-from sleepy_engelbart centos bash

相關文章
相關標籤/搜索