基本概念
Docker鏡像(image)
Docker 鏡像就是一個隻讀的模闆。鏡像可以用來建立 Docker 容器。Docker 提供了一個很簡單的機制來建立鏡像或者更新現有的鏡像,使用者甚至可以直接從其他人那裡下載下傳一個已經做好的鏡像來直接使用
Docker容器(container)
Docker 利用容器來運作應用。容器是從鏡像建立的運作執行個體。它可以被啟動、開始、停止、删除。每個容器都是互相隔離的,保證安全的平台。
Docker倉庫(repository)
倉庫是集中存放鏡像檔案的場所。有時候把倉庫和倉庫注冊伺服器( Registry )混為一談,并不嚴格區分。實際上,倉庫注冊伺服器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的标簽 (tag) 。倉庫分為公開倉庫 (Public) 和私有倉庫 (Private) 兩種形式。最大的公開倉庫是 Docker Hub ,存放了數量龐大的鏡像供使用者下載下傳。國内的公開倉庫包括 Docker Pool 等,可以提供大陸使用者更穩定快讀的通路。當使用者建立了自己的鏡像之後就可以使用 push 指令将它上傳到公有或者私有倉庫,這樣下載下傳在另外一台機器上使用這個鏡像時候,隻需需要從倉庫上 pull 下來就可以了。
額概念。
基本的Docker指令
- Docker的安裝
sudo apt install docker.io
- Docker啟動及狀态查詢
sudo service docker start
sudo service docker status
- 檢視Docker的版本
sudo docker version
- 檢視本地鏡像
sudo docker images
- 下載下傳鏡像檔案
sudo docker pull ubuntu
- 運作Ubuntu鏡像
docker run -i -t ubuntu /bin/bash
- 删除鏡像檔案
sudo docker rmi -f hello-world
- 檢視已經啟動的Docker服務(容器)
sudo docker ps –a
- 停止docker服務
sudo docker stop image-name
- 登陸Docker
sudo docker login https://hub.docker.com/
- 儲存修改後的Docker容器
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS說明:
-a :送出的鏡像作者;
-c :使用Dockerfile指令來建立鏡像;
-m :送出時的說明文字;
-p :在commit時,将容器暫停
- docker可以支援把一個主控端上的目錄挂載到鏡像裡
docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
- Docker容器的删除
docker rm CONTAINER ID
- Docker鏡像的删除
docker rmi
- Docker容器啟動start/stop/restart
docker start/stop/restart
docker start指令使用-i選項來開啟互動模式
- 查詢鏡像和容器的詳細資訊
docker inspect
docker info
- 連接配接正在運作的容器
docker attach CONTAINER ID/name
- 退出容器不關閉
ctrl + d 退出關閉容器, ctrl + p + q 退出容器不關閉
- Docker的Ubuntu鏡像安裝的容器無ifconfig指令和ping指令
解決:
apt-get update
apt install net-tools # ifconfig
apt install iputils-ping # ping
- docker Ubuntu安裝mysql
apt-get update
apt-get install -y mysql-server mysql-client
- Docker容器和主機檔案拷貝
1)從容器内拷貝檔案到主機上
docker cp <containerId>:/file/path/within/container /host/path/target
2)從主機内拷貝檔案到容器上
sudo docker cp host_path containerID:container_path
3)問題 FATA[0000] Error: Path not specified
Version 1.6.2 doesn't allow copying from host to container, you need to upgrade to at least 1.8 for that support
- docker版本更新
1)、Docker源安裝指定版本:
sudo apt-get install apt-transport-https
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 36A1D7869245C8950F966E92D8576A8BA88D21E9
sudo bash -c "echo deb https://get.docker.io/ubuntu docker main >/etc/apt/sources.list.d/docker.list"
sudo apt-get update --更新軟體源
sudo apt-cache search docker --查找需要更新的docker版本
sudo apt-get install lxc-docker-1.9.1
2)錯誤的解決
docker安裝完成後執行sudo service docker start,提示錯誤:Failed to start docker.service: Unit docker.service is masked.
解決方案:
systemctl unmask docker.service
systemctl unmask docker.socket
systemctl start docker.service
- docker 容器備份
1)生成docker鏡像
docker commit -p 30b8f18f20b4 container-backup
2)我們想要在Docker注冊中心上傳或備份鏡像,我們隻需要運作 docker login 指令來登入進Docker注冊中心,然後推送所需的鏡像即可
(1)docker login
(2)docker tag a25ddfec4d2a arunpyasi/container-backup:test
(3)docker push arunpyasi/container-backup
3)如果我們不想備份到docker注冊中心,而是想要将此鏡像儲存在本地機器中,以供日後使用,那麼我們可以将其作為tar包備份。要完成該操作,我們需要運作以下 docker save 指令。
docker save -o ~/container-backup.tar container-backup
tar -zcvf ubuntu2-backup.tar.gz container-backup.ta
- docker 恢複容器
1)在我們成功備份了我們的Docker容器後,我們現在來恢複這些制作了Docker鏡像快照的容器。如果我們已經在注冊中心推送了這些Docker鏡像,那麼我們僅僅需要把那個Docker鏡像拖回并直接運作即可。
docker pull arunpyasi/container-backup:test
2)如果我們将這些Docker鏡像作為tar封包件備份到了本地,那麼我們隻要使用 docker load 指令,後面加上tar包的備份路徑,就可以加載該Docker鏡像了。
tar -zxvf ubuntu2-backup.tar.gz
docker load -i ~/container-backup.tar
3)使用docker image檢視
extc 指令
使用attach指令經常會卡段,可以使用exec指令替代
docker exec -it ubuntu /bin/bash
上面用attach進入的用exit會退出容器必須用ctrl P Q退出才能繼續背景運作,exec的 用exit也不會真正退出容器繼續背景運作 用name或id都可以
- 常用指令
docker run --name ubuntu -it ubuntu:16.04 /bin/bash
docker exec -it 96740370a5da /bin/bash