一、遷移與備份
本質就是把安裝好應用的容器打包成鏡像,提供給其他機器使用,別的機器只需要load回來,就能看到image--run起來,直接容器就跑起來了。
1.通過以下命令將容器保存為鏡像:
docker commit mycentos7 centos7my #docker commit 容器名 新的鏡像名
打包之后查看鏡像會發現新的鏡像centos7my
然后我們可以把centos7my鏡像run起來,里面的文件和mycentos7容器的文件一樣
2.鏡像備份
通過以下命令將鏡像保存為tar文件,之后可以通過U盤等形式給別人使用
docker save -o centos7my.tar centos7my
3.鏡像恢復與遷移
首先需要先刪除掉centos7my的之前的鏡像,然后執行此命令進行恢復
docker load -i centos7my.tar #-i 輸入的文件
執行后再次查看鏡像,可以看到鏡像已經恢復
二、導入與導出
1.導出
如果要導出本地某個容器,可以使用docker export命令
2.導入
可以使用docker import從容器快照文件中再導入為鏡像
[root@localhost ~]# cat centos.tar | docker import - test/centos:v1.0 sha256:e1e54eebb51a5ddd8f3d4bc1ed9cb8a4ce2841a7e265bf
三、Dockerfile
1.什么是DockerFile
Dockerfile是由一系列命令和參數構成的腳本,這些命令應用於基礎鏡像並最終創建一個新的鏡像(本質:dockerfile能生成鏡像)
一般的,Dockerfile 分為四部分:基礎鏡像信息、維護者信息、鏡像操作指令和容器啟動時執行指令。
注意:文件名必須是Dockerfile
2.常用命令
FROM image_name:tag 定義了使用哪個基礎鏡像啟動構建流程 MAINTAINER user_name 聲明鏡像的創建者 (可有可無) ENV key value 設置環境變量 (可以寫多條) RUN command 是Dockerfile的核心部分(可以寫多條),linux命令 RUN wget https://www.python.org/ftp/python/3.6.10/Python-3.6.10.tgz (下載) RUN tar -xzf Python-3.6.10.tgz (解壓) ADD source_dir/file dest_dir/file 將宿主機的文件復制到容器內,如果是一個壓縮文件,將會在復制后自動解壓 COPY source_dir/file dest_dir/file 和ADD相似,但是如果有壓縮文件並不能解壓 WORKDIR path_dir 設置工作目錄
案例:在python下安裝django 1.11.9和requests模塊
1.先創建一個Dokcerfile,基於這個Dockerfile來創建鏡像
FROM python:3.6 #基於python3.6來創建這個鏡像 MAINTAINER xxx #作者xxx,可寫可不寫 RUN pip3 install django==1.11.9 #運行的命令下載安裝django模塊 RUN pip3 install requests #運行下載安裝requests模塊 WORKDIR /home #設置工作目錄,這里看需求設置
2.執行命令構建鏡像 (注意:不要忘記后面的 . 表示在當前文件下查找Dockerfile文件,然后執行里面的內容)
docker build -t='django1.11.9' . #-t后面加的是生成鏡像的名字
在安裝django和requests模塊的時候出現連接超時的問題ReadTimeoutError,需要更換一下國內的下載源,參考鏈接:https://www.cnblogs.com/dyd520/p/11867345.html
3.查看鏡像是否建立完成
docker images
查詢到剛剛用Dockerfile生成的django1.11.9的鏡像
把創建好的鏡像run起來,pip list檢查django1.11.9和requests模塊都安裝好了,說明Dockerfile成功
四、Docker私有倉庫 (是公司自己存放docker鏡像image的地方,自己做的鏡像)
(1)私有倉庫搭建與配置
1.拉取私有倉庫鏡像
docker pull registry
2.啟動私有倉庫容器
docker run -id --name=registry -p 5000:5000 registry #端口映射自己設定
3.打開瀏覽器輸入地址101.132.167.242:5000/v2/_catalog看到,表示私有倉庫搭建成功並且內容為空。(ip地址是自己的遠程服務器)
{"repositories":[]}
注意:你設置的端口號需要在遠程服務器中已經開啟,不然訪問不了
4.修改daemon.json
vi /etc/docker/daemon.json
5.添加一下內容,保存退出
{"insecure-registries":["101.132.167.242:5000"]}
6.重啟docker服務
systemctl restart docker
(2)鏡像上傳至私有倉庫
1.先標記鏡像為私有倉庫的鏡像
docker tag django1.11.9 101.132.167.242:5000/django1.11.9 #docker tag 鏡像名 標簽名(一般都加上ip地址)
打完標簽之后會多出一個新的鏡像
2.再次啟動私服容器
docker start registry
3.把鏡像提交到私有倉庫中
docker push 101.132.167.242:5000/django1.11.9 #剛才標記的鏡像名
訪問ip地址 101.132.167.242:5000/v2/_catalog ,看到顯示的是標記的鏡像名
五、私有倉庫鏡像的使用(本地拉取鏡像)
前面已經把鏡像存放在私有倉庫了,先把原先的鏡像刪除,試着從私有倉庫拉出鏡像
先刪除之前的101.132.167.242:5000/django1.11.9鏡像
docker rmi 101.132.167.242:5000/django1.11.9
需要拉取私服的鏡像直接pull,鏡像就拉下來了
docker pull 101.132.167.242:5000/django1.11.9
其他服務器拉取本服務器的鏡像(121服務器向101的服務器拉取鏡像)
1.在121服務器上修改daemon.json(沒有該文件就創建)
vi /etc/docker/daemon.json
添加下面內容,保存退出
{ "insecure-registries":["101.132.167.242:5000"] }
2.重啟121服務器的docker服務
systemctl restart docker
3.121服務器拉取101服務器的鏡像
docker pull 101.132.167.242:5000/redis:v5 #注意:如果你設置鏡像的版本,記得帶上鏡像的標簽(也是版本),這個版本是在101服務器上設置的
六、將鏡像上傳至dockerhub官網
1.首先,去 hub.docker.com 或 cloud.docker.com注冊一個賬戶。然后,用下面的命令登錄。
docker login
2.為本地的image標注用戶和版本
語法
docker tag 鏡像名 用戶名/存儲倉庫:鏡像版本
例如
docker tag nginx wangccdocker/mynginx:first #存儲倉庫可以先去官網建立,如果不建立在上傳鏡像的時候也會自動創建
3.發布鏡像
語法
docker push 用戶名/存儲倉庫:版本
將你的標記鏡像上傳到存儲庫
docker push wangccdocker/mynginx:first
在官網查看上傳的鏡像,如果有人需要使用直接 docker pull wangccdocker/mynginx:first