Docker中通過模板創建鏡像,Docker容器、倉庫及數據管理
(1)首先去下載一個模板
http://openvz.org/Download/templates/precreated //下載速度不快,阿銘下載了一個centos6的模板centos-6-x86-minimal.tar.gz
(2)導入該鏡像的命令為:
cat centos-6-x86-minimal.tar.gz|docker import - centos6
(3)查看導入的鏡像
docker images
(4)導出鏡像:
把現有鏡像,導出為一個文件:
docker save -o centos-net.tar centos-net
我們還可以用該文件恢復本地鏡像:
(5)刪除本地鏡像
(6)導入鏡像
docker load --input aming-centos.tar 或者
docker load < aming-centos.tar
docker push image_name //可以把自己的鏡像傳到dockerhub官方網站上去,但前提是需要先註冊一個用戶,後續如果有需求再研究吧
2.容器管理
docker create -it centos6 bash
//這樣可以創建一個容器,但該容器並沒有啟動
docker start a0fa08fb3a76 //啟動容器後,可以使用 docker ps 查看到,有start 就有stop,和restart
之前我們使用的docker run 相當於先create再start
(1)創建容器
docker run -it centos bash
這樣進入了一個虛擬終端裏面,我們可以運行一些命令,使用命令exit或者ctrl d 退出該bash,當退出後這個容器也會停止。
(2)讓容器在後臺運行
docker run -d 可以讓容器在後臺運行
比如:docker run -d centos bash -c "while :; do echo "123"; sleep 2; done"
(3)給容器自定義名字
docker run --name web -itd centos bash
(4)讓容器退出後直接刪除
docker run --rm -it centos bash -c "sleep 30" //--rm 可以讓容器退出後直接刪除,在這裏命令執行完容器就會退出
(5)獲取到容器的運行歷史信息
docker logs 可以獲取到容器的運行歷史信息,用法如下
docker logs a0fa08fb3a76
docker attach 可以進入一個後臺運行的容器,比如
docker attach container_id //但是attach命令不算好用,比如我們想要退出終端,就得exit了,這樣容器也就退出了,還有一種方法
(6)進入容器
docker exec -it a0fa08fb3a76 bash //可以臨時打開一個虛擬終端,並且exit後,容器依然運行著
(7)刪除容器
docker rm a0fa08fb3a76 //container_id是ps的時候查看到的,這樣就可以把container刪除,如果是運行的容器,可以加-f
(8)遷移容器
docker export a0fa08fb3a76 > file.tar // 導出容器,可以遷移到其他機器上,需要導入
(9)導入容器生成鏡像
cat file.tar |docker import - fxq_testos //這樣會生成fxq_tesos的鏡像
3.倉庫管理
(1)下載registry 鏡像
docker pull registry
#下載registry 鏡像,registy為docker官方提供的一個鏡像,我們可以用它來創建本地的docker私有倉庫。
(2)以registry鏡像啟動容器
docker run -d -p 5000:5000 registry
#以registry鏡像啟動容器,-p會把容器的端口映射到宿主機上,:左邊為宿主機監聽端口,:右邊為容器監聽端口
curl 127.0.0.1:5000/v2/_catalog //可以訪問它
下面我們來把其中一個鏡像上傳到私有倉庫
docker tag centos 192.168.1.169:5000/centos
//標記一下tag,必須要帶有私有倉庫的ip:port
(3)標記的鏡像給推送到私有倉庫
docker push 192.168.1.169:5000/centos
//把標記的鏡像給推送到私有倉庫
此時並不會成功,Get https://192.168.1.169:5000/v2/: http: server gave HTTP response to HTTPS client
更改配置文件,vi /etc/docker/daemon.json
//更改為
{ "insecure-registries":["192.168.1.169:5000"] }
(4)重啟服務
systemctl restart docker
(5)查看容器
docker ps -a
//查看容器已經關閉,還需要啟動
docker start e5b31b
//這裏的 e5b31b 為registry容器id
(6)再次push
docker push 192.168.1.169:5000/centos
(7)查看到推送上來的鏡像
curl 127.0.0.1:5000/v2/_catalog
//可以查看到推送上來的鏡像
(8)客戶端下載鏡像:
前提:
安裝好docker-ce ,
更改配置文件,vi /etc/docker/daemon.json
//更改為
{ "insecure-registries":["192.168.1.169:5000"] }
重啟服務
systemctl restart docker
(9)拉取鏡像:
docker pull 192.168.1.169:5000/centos
4.數據管理
(1)掛載本地的目錄到容器裏
docker run -tid -v /data/:/data centos bash
//-v 用來指定掛載目錄,:前面的/data/為宿主機本地目錄,:後面的/data/為容器裏的目錄,會在容器中自動創建
(2)掛載數據卷
其實我們掛載目錄的時候,可以指定容器name,如果不指定就隨機定義了。比如上面我們沒有指定,它就生成了一個名字為angry_shirley,這個名字可以使用命令 docker ps 看最右側一列
docker run -itd --volumes-from angry_shirley centos bash
這樣,我們使用centos鏡像創建了新的容器,並且使用了 angry_shirley 容器的數據卷
(3)定義數據卷容器
有時候,我們需要多個容器之間相互共享數據,類似於linux裏面的NFS,所以就可以搭建一個專門的數據卷容器,然後其他容器直接掛載該數據卷。
首先建立數據卷容器
docker run -itd -v /data/ --name testvol centos bash
//註意這裏的/data/是容器的/data目錄,並非本地的/data/目錄。
然後讓其他容器掛載該數據卷
docker run -itd --volumes-from testvol centos bash
在新容器中新建1.txt
看原有testvol主機上的/data目錄裏就是有1.txt了
Docker中通過模板創建鏡像,Docker容器、倉庫及數據管理