Docker容器(二)——鏡像制作


  制作Docker鏡像有兩種方式:第一種、docker commit,保存容器(Container)的當前狀態到鏡像后,然后生成對應的image;第二種、docker build,使用Dockerfile文件自動化制作鏡像。

(1).docker commit

  啟動一個實例,安裝apache

[root@youxi1 ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
centos                         latest              67fa590cfc1c        3 weeks ago         202MB
hub.c.163.com/library/tomcat   latest              72d2be374029        2 years ago         292MB
[root@youxi1 ~]# docker run -it centos:latest /bin/bash
[root@985ef7e0c4ca /]# yum -y install httpd
[root@985ef7e0c4ca /]# exit
exit

  根據容器當前狀態制作一個鏡像,語法docker commit <容器ID> [倉庫]:[標簽]

[root@youxi1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
985ef7e0c4ca        centos:latest       "/bin/bash"         4 minutes ago       Exited (0) 2 minutes ago                       sharp_kare
9a81af9b4134        centos:latest       "/bin/bash"         2 days ago          Exited (0) 2 days ago                          pensive_dijkstra
3ecc9bafd429        centos:latest       "/bin/bash"         2 days ago          Exited (0) 2 days ago                          sleepy_wilbur
[root@youxi1 ~]# docker commit 985ef7e0c4ca centos:httpd
sha256:bdd371e6f1cf035bd501c09b28a2b2827900973a0defa9e35eadcd2f2f55e5e4
[root@youxi1 ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
centos                         httpd               bdd371e6f1cf        14 seconds ago      346MB
centos                         latest              67fa590cfc1c        3 weeks ago         202MB
hub.c.163.com/library/tomcat   latest              72d2be374029        2 years ago         292MB

  啟動新創建的鏡像,查看是否存在httpd服務

[root@youxi1 ~]# docker run -it centos:httpd /bin/bash
[root@34ac01c03fe3 /]# rpm -qa httpd  //可以看到是存在的
httpd-2.4.6-89.el7.centos.1.x86_64

(2).docker build

  使用docker build創建鏡像時,需要使用Dockerfile文件自動化制作鏡像。Dockerfile類似源碼編譯./configure后產生的Makefile。

  創建工作目錄,制作Dockerfile

[root@youxi1 ~]# mkdir /docker-build
[root@youxi1 ~]# vim /docker-build/Dockerfile  
FROM centos:latest  #以哪個鏡像為基礎
MAINTAINER <youxi@163.com>  #鏡像創建者
RUN yum -y install httpd  #運行安裝httpd命令
ADD start.sh /usr/local/bin/start.sh  #將本地文件拷貝到鏡像中,權限為0755(?),uid和gid為0
ADD index.html /var/www/html/index.html
CMD /usr/local/bin/start.sh  #實例啟動后執行的命令,一般跟需要開機啟動的服務或腳本

  創建start.sh和index.html

[root@youxi1 ~]# echo "/usr/sbin/httpd -DFOREGROUND" > /docker-build/start.sh
[root@youxi1 ~]# chmod +x /docker-build/start.sh
[root@youxi1 ~]# echo "docker image build test" > /docker-build/index.html

  刪除已有的centos:httpd

[root@youxi1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
34ac01c03fe3        centos:httpd        "/bin/bash"         About an hour ago   Exited (0) 43 minutes ago                          gifted_cerf
985ef7e0c4ca        centos:latest       "/bin/bash"         About an hour ago   Exited (0) About an hour ago                       sharp_kare
9a81af9b4134        centos:latest       "/bin/bash"         2 days ago          Exited (0) 2 days ago                              pensive_dijkstra
3ecc9bafd429        centos:latest       "/bin/bash"         2 days ago          Exited (0) 2 days ago                              sleepy_wilbur
[root@youxi1 ~]# docker stop 34ac01c03fe3
34ac01c03fe3
[root@youxi1 ~]# docker rm 34ac01c03fe3
34ac01c03fe3
[root@youxi1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
985ef7e0c4ca        centos:latest       "/bin/bash"         About an hour ago   Exited (0) About an hour ago                       sharp_kare
9a81af9b4134        centos:latest       "/bin/bash"         2 days ago          Exited (0) 2 days ago                              pensive_dijkstra
3ecc9bafd429        centos:latest       "/bin/bash"         2 days ago          Exited (0) 2 days ago    
[root@youxi1 ~]# docker rmi centos:httpd
Untagged: centos:httpd
Deleted: sha256:bdd371e6f1cf035bd501c09b28a2b2827900973a0defa9e35eadcd2f2f55e5e4
Deleted: sha256:e5f250b390d99269c53a6150c776f5af4e74b965f4c86977fea7582b9e624870
[root@youxi1 ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
centos                         latest              67fa590cfc1c        3 weeks ago         202MB
hub.c.163.com/library/tomcat   latest              72d2be374029        2 years ago         292MB

  使用build創建新的鏡像,語法docker build -t [倉庫名]:[標簽] [Dockerfile文件路徑]

[root@youxi1 ~]# docker build -t centos:httpd /docker-build/ 
[root@youxi1 ~]# docker images
REPOSITORY                     TAG                 IMAGE ID            CREATED              SIZE
centos                         httpd               565f0e4e1ef3        About a minute ago   346MB
centos                         latest              67fa590cfc1c        3 weeks ago          202MB
hub.c.163.com/library/tomcat   latest              72d2be374029        2 years ago          292MB

(3).Docker鏡像發布

 1)發布到本地

  語法:docker save  -o [tar包名] [倉庫名]:[標簽]

[root@youxi1 ~]# docker save -o docker.id-centos-httpd-image.tar centos:httpd
[root@youxi1 ~]# ll -h
總用量 346M
-rw-------. 1 root root 1.6K 5月  14 09:20 anaconda-ks.cfg
-rw-------  1 root root 339M 9月  14 15:26 docker.id-centos-httpd-image.tar

 2)發布到網上

  一般先到https://hub.docker.com/(DockerHub)上注冊一個賬號,並創建一個存儲庫

  使用命令登錄

[root@youxi1 ~]# docker login -u [用戶名] -p [密碼]
WARNING! Using --password via the CLI is insecure. Use --password-stdin.

WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

  上傳鏡像。注意:上傳前需要修改倉庫名,否則上傳有問題。

[root@youxi1 ~]# docker tag centos:httpd ghhh4512/centos:httpd  //這里的ghhh4512是我的Docker用戶名,centos是建立的存儲庫
[root@youxi1 ~]# docker push ghhh4512/centos:httpd
The push refers to repository [docker.io/ghhh4512/centos]
7873e44b6044: Pushed 
0e86f20c1056: Pushed 
b3e0fc83922e: Pushed 
877b494a9f30: Pushed 
httpd: digest: sha256:464ffb58cbc2334a936bea7081db41b257afb5b21dfcce6dd27863dc9b777855 size: 1155

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM