Docker安裝及鏡像和容器的使用

Docker

Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。容器是完全使用沙箱機制,相互之間不會有任何接口。

Docker與常見虛擬化方式的區別

傳統方式是在硬件層面實現虛擬化,需要有額外的虛擬機管理應用和虛擬機操作系統層。Docker容器是在操作系統層面上實現虛擬化,直接複用本地主機的操作系統,一次更加輕量級。

核心概念

Docker鏡像(Image)

Docker鏡像是類似於虛擬機鏡像,可以將它理解爲一個只讀的模板。例如一個鏡像可以包含一個基本的操作系統環境,裏面僅安裝了Apache應用程序(或用戶需要的其他軟件)可以把它稱爲一個Apache鏡像。

Docker容器(Container)

Docker容器類似於一個輕量級的沙箱,Docker利用容器來運行和隔離應用。容器是從鏡像創建的應用的運行實例。可以將其啓動、開始、停止、刪除,而這些容器都是彼此相互隔離的,互不可見的。
可以把容器看做是一個簡易版的Linux系統環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)以及運行在其中的應用程序打包而成的盒子。
鏡像和容器的關係:鏡像自身是可讀的。容器從鏡像啓動的時候,會在鏡像的最上層創建一個可寫層。

Docker倉庫(Repository)

Docker倉庫類似於代碼倉庫,他是Docker集中存放鏡像文件的場所。


Docker的安裝配置及使用詳情

1、docker安裝與啓動

yum install -y epel-release
yum install docker-io # 安裝docker# 配置文件 /etc/sysconfig/docker
DOCKER_OPTS=”$DOCKER_OPTS -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock”

chkconfig docker on # 加入開機啓動
service docker start # 啓動docker服務

基本信息查看

docker version # 查看docker的版本號,包括客戶端、服務端、依賴的Go等
docker info # 查看系統(docker)層面信息,包括管理的images, containers數等
docker pull centos 下載
docker images [ centos ] 查看
docker run -i -t centos /bin/bash

2、鏡像的獲取與容器的使用

搜索鏡像

docker search # 在docker index中搜索image# 下載鏡像
docker pull # 從docker registry server 中下拉image# 查看鏡像
docker images: # 列出images
docker images -a # 列出所有的images(包含歷史)
docker rmi : # 刪除一個或多個image

使用tag命令添加鏡像標籤

docker tag sauloal/ubuntu14.04 myubuntu:14.04 #爲本地鏡像文件添加新的標籤

使用inspect命令查看詳細信息

docker inspect auloal/ubuntu14.04 # 獲取該鏡像的詳細信息,包括製作者等
docker inspect -f {{“.Architechture”}} # 獲取鏡像的Architechture,返回一個json格式的消息

創建鏡像

1.基於已有鏡像的容器創建
docker commit -m “Added a new file” -a ”Docker Newbee” a925cb40b3f0 test:0.1
2.基於本地模板導入
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04

存出和載入鏡像

1.存出鏡像
docker save -o ubuntu_14.04.tar ununtu:14.04
2.載入鏡像
docker load –input ubuntu_14.04.tar

docker load < ubuntu_14.04.tar

上傳鏡像

docker tag test:latest /user/test:latest
docker push /user/test:laest

3、容器的獲取與容器的使用

使用鏡像創建容器
docker create -it sauloal/ubuntu14.04
docker start af # 容器啓動
docker ps # 查看運行中的容器

docker run -i -t sauloal/ubuntu14.04
新建並啓動容器
docker run -i -t sauloal/ubuntu14.04 /bin/bash # 創建一個容器,讓其中運行 bash 應用,退出後容器關閉
docker run -itd –name centos_aways –restart=always centos # -d 守護態運行,即後臺運行 創建一個名稱centos_aways的容器,自動重啓# –restart參數:always始終重啓;on-failure退出狀態非0時重啓;默認爲,no不重啓 ;

查看容器

docker ps :列出當前所有正在運行的container
docker ps -l :列出最近一次啓動的container
docker ps -a :列出所有的container(包含歷史,即運行過的container)
docker ps -q :列出最近一次運行的container ID

再次啓動容器

docker start/stop/restart <container> #:開啓/停止/重啓container
docker start [container_id] #:再次運行某個container (包括歷史container)#進入正在運行的docker容器
docker exec -it [container_id] /bin/bash
docker run -i -t -p <host_port:contain_port> #:映射 HOST 端口到容器,方便外部訪問容器內服務,host_port 可以省略,省略表示把 container_port 映射到一個動態端口。

進入容器

docker run -itd ubuntu:14.04

在使用-d參數時,容器啓動後會進入後臺,用戶無法看到容器中的信息,也無法進行操作。
這個時候需要進入容器進行操作。
1、attach命令
運行創建好的容器
docker attach [運行的容器的名稱]
但是使用attach命令有時候不方便,當多個窗口同時用attach命令連到同一個容器的時候,所有窗口都會同步顯示。當某個窗口阻塞是,其他窗口也無法執行操作了。
2、exec命令

docker exec -it 243c325da7 /bin/bash

-i 打開標準輸入接收用戶輸入命令,默認爲false;
–pricileged=true|false 是否給執行命令以高權限,默認爲false;
-t 分配爲終端,默認爲false;
-u 執行命令的用戶名和id。

3、nsenter

PID=$(docker inspect --format "{{ .State.Pid}}" elated_ritchie) # 獲取PID
nsenter --target $PID --mount --uts --ipc --net --pid # 根據PID進入容器

刪除容器

docker ps -a
docker rm <container...> #:刪除一個或多個container

導入和導出容器

導出容器是指導出一個已經創建的容器文件,不管此時這個容器是否處於運行狀態。可以使用docker export命令。

docker export -o test_for_run.tar ce5
docker export e81 >test_for_stop.tar

導入容器

cat test_for_run.tar | sudo docker import - test/ubuntu:v1.0
docker import test_for_run.tar - test/ubuntu:v1.0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章