1. 程式人生 > >linux 部署docker容器虛擬化平臺(二)--------docker 映象製作方法

linux 部署docker容器虛擬化平臺(二)--------docker 映象製作方法

Docker Image 的製作兩種方法
方法 1:docker commit #儲存 container 的弼前狀態到 image 後,然後生成對應的 image
方法 2:docker build #使用 Dockerfile 檔案自動化製作 image

一、. 語法: docker commit <container 的 ID>或<image_name> 

根據容器弼前狀態做一個 image 映象:建立一個安裝了 apache 工具的 centos 映象

[[email protected] ~]# docker run -it docker.io/centos:latest /bin/bash
[

[email protected] /]# yum -y install httpd #在 container 中安裝 apache 軟體包
[[email protected] /]# exit

[[email protected]~]# docker commit 1d3563200047  docker.io/centos:apache      (:apache 為打包的標籤)

二.通過:docker build 建立一個基於 centos 的 httpd web 伺服器映象。
使用 docker build 建立映象時,需要使用 Dockerfile 檔案自動化製作 image 映象
注:Dockerfile 有點像原始碼編譯時./configure 後產生的 Makefile

 以下操作要在 docker 物理機上操作:
2.1、建立工作目錄
[[email protected] ~]# mkdir /docker-build
[[email protected] ~]# cd /docker-build
[[email protected] docker-build]# touch Dockerfile
注: make 自動化編譯時需要 Makefile 檔案,自動化建立 docker 映象時,需要 Dockerfile 

2.2、編輯 Dockerfile   建立工作目錄
[[email protected]

~]# mkdir /docker-build
[[email protected] ~]# cd /docker-build
[[email protected] docker-build]# touch Dockerfile     注: make 自動化編譯時需要 Makefile 檔案,自動化建立 docker 映象時,需要 Dockerfile     Dockerfile 用來建立一個自定義的 image,包含了使用者指定的軟體依賴等。
[[email protected] docker-build]# vim Dockerfile
    FROM docker.io/centos:latest
    MAINTAINER <[email protected]>
    RUN yum -y install httpd
    ADD start.sh /usr/local/bin/start.sh
    ADD index.html /var/www/html/index.html
    CMD /usr/local/bin/start.sh
 
 註釋:
FROM docker.io/centos:latest # FROM 基於哪個映象
MAINTAINER <[email protected]> # MAINTAINER 映象建立者
RUN yum -y install httpd #RUN 安裝軟體用
ADD start.sh /usr/local/bin/start.sh
ADD index.html /var/www/html/index.html
CMD /usr/local/bin/start.sh
# ADD 將檔案<src>拷貝到新產生的映象的檔案系統對應的路徑<dest>。所有拷貝到新映象中的
檔案和資料夾許可權為 0755,uid 和 gid 為 0
CMD echo hello world #container 啟動時執行的命令或啟動服務,但是一個 Dockerfile 中叧
能有一條 CMD 命令,多條則叧執行最後一條 CMD.
2. 3、建立 start.sh 指令碼啟動 httpd 服務和 apache 預設首頁 index.html 檔案
[[email protected]]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh

[[email protected] docker-build]# chmod a+x start.sh

 建立 index.html
[[email protected] docker-build]# echo "docker image build test" > index.html
 2.4、使用命令 build 來建立新的 image
語法:docker build -t 父映象名:映象的 tag Dockerfile 檔案所在路徑-t :表示 tage,映象名

docker build -t docker.io/centos:httpd ./

2.5 Docker Image 的釋出

方法 1:Save Image To TarBall
方法 2:Push Image To Docker Hub

方法 1:Save Image To TarBall          儲存 Image 到 tar 包
語法:docker save -o 匯出的映象名.tar 本地映象名:映象標籤

docker save -o docker.io-centos-httpd-image.tar odcker.io/centos:httpd


[[email protected] ~]# docker rmi docker.io/centos:httpd         #刪除映象,這裡寫自己映象的 ID或名字
[[email protected] ~]# docker images                                      #發現在映象已經被刪除
[[email protected] docker-build]# docker load -i docker.io-centos-httpd-image.tar     #匯入本地映象

方法 2:Push Image To Docker Hub 釋出到外網
1、Signup on docker hub & create repo 註冊一個帳號 https://hub.docker.com/
2、Login to docker hub
# docker login -u userabc -p abc123 -e [email protected]
3、Push image to docker hub #上傳映象
# docker push centos:httpd
4、Pull image from docker hub #下載映象
# docker pull userabc/centos:httpd # 使用者名稱/映象名

Container 容器埠對映

啟動 container

docker  run  -d  -p  80:80  docker.io/centos:httpd

注: -p 物理機的 80 埠:容器例項的 80 埠 ,把容器中的 80 埠對映到物理機上的 80 埠

在物理機上檢視容易狀態:
[[email protected] ~]# docker ps

訪問正在執行的 container 容器例項
語法: docker exec -it <container id | name> /bin/bash

 

配置容器 root 密碼:
[[email protected] /]# echo 123456 | passwd --stdin root
在容器中安裝 sshd 服務,然後把 22 埠映射出去,就可以遠端登弽容器了。

 

 

  [[email protected] ~]# docker run -it docker.io/centos:latest /bin/bash         #啟動一個例項

[[email protected] ~]# docker logs b93795788ee0#容器的 ID 可以寫全,只要唯一就可以了   #檢視日誌

列出所有執行中容器  docker ps        docker ps -a        #-a 列出所有容器(包含沉睡/退出狀態的容器);

 殺死一個容器。 比如:殺死一個正在後臺執行的容器

docker kill b93795788ee0       #殺死一個容器

docker rm -f  b93795788ee0      # -f 強制刪除