知乎專欄 | 多維度架構 | 微信號 netkiller-ebook | QQ群:128659835 請註明“讀者” |
Docker 鏡像地址 https://registry.hub.docker.com/
$ sudo docker search centos |more NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS. 542 [OK] tianon/centos CentOS 5 and 6, created using rinse instea... 28 ansible/centos7-ansible Ansible on Centos7 13 [OK] saltstack/centos-6-minimal 7 [OK] blalor/centos Bare-bones base CentOS 6.5 image 7 [OK] steeef/graphite-centos CentOS 6.x with Graphite and Carbon via ng... 6 [OK] ariya/centos6-teamcity-server TeamCity Server 8.1 on CentOS 6 6 [OK] tutum/centos Centos image with SSH access. For the root... 5 [OK] tutum/centos-6.4 DEPRECATED. Use tutum/centos:6.4 instead. ... 5 [OK]
可以使用 docker pull 命令來從官網倉庫獲取所需要的鏡像。
$ sudo docker pull ubuntu:14.04
等同於
$ sudo docker pull registry.hub.docker.com/ubuntu:14.04
獲得所有版本鏡像
$ sudo docker pull ubuntu $ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu utopic 277eb4304907 3 days ago 215.6 MB ubuntu 14.10 277eb4304907 3 days ago 215.6 MB ubuntu 14.04 5506de2b643b 3 days ago 197.8 MB ubuntu trusty 5506de2b643b 3 days ago 197.8 MB ubuntu latest 5506de2b643b 3 days ago 197.8 MB ubuntu 14.04.1 5506de2b643b 3 days ago 197.8 MB ubuntu precise 0b310e6bf058 3 days ago 116.1 MB ubuntu 12.04.5 0b310e6bf058 3 days ago 116.1 MB ubuntu 12.04 0b310e6bf058 3 days ago 116.1 MB ubuntu 12.10 c5881f11ded9 4 months ago 172.1 MB ubuntu quantal c5881f11ded9 4 months ago 172.1 MB ubuntu 13.04 463ff6be4238 4 months ago 169.4 MB ubuntu raring 463ff6be4238 4 months ago 169.4 MB ubuntu 13.10 195eb90b5349 4 months ago 184.6 MB ubuntu saucy 195eb90b5349 4 months ago 184.6 MB ubuntu 10.04 3db9c44f4520 6 months ago 183 MB ubuntu lucid 3db9c44f4520 6 months ago 183 MB
從其他伺服器獲得鏡像
$ sudo docker pull dl.dockerpool.com:5000/ubuntu:12.04
完成後,即可隨時使用該鏡像了,例如創建一個容器,讓其中運行 bash 應用。
$ sudo docker run -t -i ubuntu:14.10 /bin/bash
$ sudo docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE ubuntu 14.10 277eb4304907 3 days ago 215.6 MB ubuntu latest 5506de2b643b 3 days ago 197.8 MB
docker tag ubuntu:15.10 runoob/ubuntu:v3 iMac:registry neo$ docker tag 127.0.0.1:5000/netkiller/config:latest 192.168.64.2:30050/netkiller/config:latest
保存鏡像
$sudo docker save -o ubuntu_14.10.tar ubuntu:14.10
載入鏡像
$ sudo docker load --input ubuntu_14.10.tar 或 $ sudo docker load < ubuntu_14.10.tar
$ sudo docker rmi ubuntu:12.04 Untagged: ubuntu:12.04
強制刪除所有鏡像
docker rmi -f $(docker images -q)
鏡像歷史紀錄
# docker history centos:tomcat IMAGE CREATED CREATED BY SIZE COMMENT 2faf9a2d2bdc 22 hours ago /bin/sh -c #(nop) CMD ["catalina.sh" "run"] 0 B 8e12c1e8fd89 22 hours ago /bin/sh -c #(nop) EXPOSE 8080/tcp 0 B 35158d8231c5 22 hours ago /bin/sh -c #(nop) VOLUME [/srv/tomcat/temp] 0 B 4302c5c13241 22 hours ago /bin/sh -c #(nop) VOLUME [/srv/tomcat/work] 0 B 53537696aa19 22 hours ago /bin/sh -c #(nop) ADD file:ac42f23f37092b9... 298 B be04ba27a9ae 23 hours ago /bin/sh -c set -x && wget -O tomcat.tar.... 8.75 MB 847be662a35f 5 days ago /bin/sh -c #(nop) ENV TOMCAT_ASC_URL=http... 0 B ac6550346558 5 days ago /bin/sh -c #(nop) ENV TOMCAT_TGZ_URL=http... 0 B 50c12be7ca48 5 days ago /bin/sh -c #(nop) ENV TOMCAT_VERSION=8.5.15 0 B 89c44758e4ae 5 days ago /bin/sh -c #(nop) ENV TOMCAT_MAJOR=8 0 B 560ad98c1b23 5 days ago /bin/sh -c yum install -y java-1.8.0-openj... 236 MB befeedbb7dc7 5 days ago /bin/sh -c #(nop) WORKDIR /srv/tomcat 0 B c85cf394faf8 5 days ago /bin/sh -c mkdir -p "$CATALINA_HOME" 0 B debf78012b2c 5 days ago /bin/sh -c #(nop) ENV PATH=/srv/tomcat/bi... 0 B ccc27f4f3bcf 5 days ago /bin/sh -c #(nop) ENV CATALINA_HOME=/srv/... 0 B 8f351964d568 6 days ago /bin/sh -c #(nop) MAINTAINER Netkiller <n... 0 B 3bee3060bfc8 9 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B <missing> 9 days ago /bin/sh -c #(nop) LABEL name=CentOS Base ... 0 B <missing> 9 days ago /bin/sh -c #(nop) ADD file:d22a9c627d1d1f3... 193 MB
docker history docker.io/mysql:5.7 docker history --no-trunc docker.io/mysql:5.7
neo@MacBook-Pro-Neo ~ % docker history docker.elastic.co/kibana/kibana:7.9.2 IMAGE CREATED CREATED BY SIZE COMMENT ba296c26886a 4 weeks ago /bin/sh -c #(nop) CMD ["/usr/local/bin/kiba… 0B <missing> 4 weeks ago /bin/sh -c #(nop) ENTRYPOINT ["/usr/local/b… 0B <missing> 4 weeks ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 4 weeks ago /bin/sh -c #(nop) USER kibana 0B <missing> 4 weeks ago /bin/sh -c groupadd --gid 1000 kibana && use… 360kB <missing> 4 weeks ago /bin/sh -c find / -xdev -perm -4000 -exec ch… 484kB <missing> 4 weeks ago /bin/sh -c chmod g+ws /usr/share/kibana && f… 0B <missing> 4 weeks ago /bin/sh -c #(nop) COPY --chown=1000:0file:49… 9.69kB <missing> 4 weeks ago /bin/sh -c #(nop) COPY --chown=1000:0file:ea… 234B <missing> 4 weeks ago /bin/sh -c #(nop) ENV PATH=/usr/share/kiban… 0B <missing> 4 weeks ago /bin/sh -c #(nop) ENV ELASTIC_CONTAINER=true 0B <missing> 4 weeks ago /bin/sh -c ln -s /usr/share/kibana /opt/kiba… 17B <missing> 4 weeks ago /bin/sh -c #(nop) WORKDIR /usr/share/kibana 0B <missing> 4 weeks ago /bin/sh -c #(nop) COPY --chown=1000:0dir:e8c… 941MB <missing> 4 weeks ago /bin/sh -c chmod +x /usr/local/bin/dumb-init 54.7kB <missing> 4 weeks ago /bin/sh -c echo "37f2c1f0372a45554f1b89924fb… 0B <missing> 4 weeks ago /bin/sh -c curl -L -o /usr/local/bin/dumb-in… 75.2kB <missing> 4 weeks ago /bin/sh -c yum update -y && yum install -y f… 31.1MB <missing> 4 weeks ago /bin/sh -c #(nop) EXPOSE 5601 0B <missing> 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 2 months ago /bin/sh -c #(nop) ADD file:61908381d3142ffba… 203MB
為什麼要自己創建鏡像呢? 因為官方提供的鏡像無法滿足我們的需求,例如 nginx 鏡像你會發現 ps, top 等等很多命令缺失。
需求基于centos7鏡像創建nginx stable最新版本鏡像
############################################################ # Dockerfile to build Nginx container # Based on centos7 ############################################################ FROM centos:latest MAINTAINER Netkiller <netkiller@msn.com> # Install EPEL RUN yum install -y epel-release && yum clean all # Update RPM Packages RUN yum -y update # Install Nginx RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm RUN yum install -y nginx RUN yum clean all # forward request and error logs to docker log collector RUN ln -sf /dev/stdout /var/log/nginx/access.log RUN ln -sf /dev/stderr /var/log/nginx/error.log # be backwards compatible with pre-official images #RUN ln -sf ../share/nginx /usr/local/nginx # prepare container # add startup script #ADD startup.sh /startup.sh #RUN chmod 755 /startup.sh VOLUME ["/etc/nginx"] VOLUME ["/usr/share/nginx/html"] VOLUME ["/var/www"] EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"]
# docker build -t "centos:nginx" . Sending build context to Docker daemon 3.072 kB Step 1/14 : FROM centos:latest ---> 3bee3060bfc8 Step 2/14 : MAINTAINER Netkiller <netkiller@msn.com> ---> Using cache ---> 8f351964d568 Step 3/14 : RUN yum install -y epel-release && yum clean all ---> Using cache ---> bf86eff77ff3 Step 4/14 : RUN yum -y update ---> Using cache ---> 4915172ac4f3 Step 5/14 : RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ---> Using cache ---> 4a919bd141c9 Step 6/14 : RUN yum install -y nginx ---> Using cache ---> 2718221eab8c Step 7/14 : RUN yum clean all ---> Using cache ---> 62231a5f1d76 Step 8/14 : RUN ln -sf /dev/stdout /var/log/nginx/access.log ---> Using cache ---> 38be8f0cc782 Step 9/14 : RUN ln -sf /dev/stderr /var/log/nginx/error.log ---> Using cache ---> bbf3a468d24f Step 10/14 : VOLUME /etc/nginx ---> Using cache ---> 919292c7ce04 Step 11/14 : VOLUME /usr/share/nginx/html ---> Using cache ---> c2aeb8ed3c1c Step 12/14 : VOLUME /var/www ---> Using cache ---> 31849cb8a9d0 Step 13/14 : EXPOSE 80 443 ---> Using cache ---> 0e3d3b4a215b Step 14/14 : CMD nginx -g daemon off; ---> Using cache ---> d5f21e409690 Successfully built d5f21e409690
查看鏡像
# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE centos nginx d5f21e409690 4 minutes ago 364 MB centos latest 3bee3060bfc8 2 days ago 193 MB nginx latest 958a7ae9e569 8 days ago 109 MB redis latest a858478874d1 2 weeks ago 184 MB
# docker run --name my-centos-nginx -d centos:nginx ecf342ddd66d1d5f3d28c583ec852c05903ef4813fcb75295c907a6b578dea3d # docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ecf342ddd66d centos:nginx "nginx -g 'daemon ..." 23 seconds ago Up 23 seconds 80/tcp, 443/tcp my-centos-nginx 0df3b275bb03 nginx "nginx -g 'daemon ..." 6 hours ago Up 6 hours 80/tcp my-nginx 1c4540d8617f redis "docker-entrypoint..." 2 days ago Up 2 days 0.0.0.0:6379->6379/tcp my-redis
[root@netkiller]~/docker/nginx# docker exec -it my-centos-nginx /bin/bash [root@netkiller-docker /]# ps ax PID TTY STAT TIME COMMAND 1 ? Ss 0:00 nginx: master process nginx -g daemon off; 7 ? S 0:00 nginx: worker process 8 ? Ss 0:00 /bin/bash 22 ? R+ 0:00 ps ax [root@netkiller-docker /]# curl http://localhost <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
# docker commit my-centos-nginx netkiller/centos:nginx sha256:9ea1851b1c9f04aa3168977f666337223d09e20983f7a2c2328e15132a03d224
# docker push netkiller/centos:nginx The push refers to a repository [docker.io/netkiller/centos] 16916856eaaa: Pushed 6172d61b45f1: Pushed db323af550f0: Pushed 232df2cfd38f: Pushed c247a550215b: Pushed 3b5451d7989c: Pushed e3a6f1af6a7a: Pushed 9e3cea652b37: Pushed dc1e2dcdc7b6: Mounted from library/centos nginx: digest: sha256:ad9bd1ae3a3e17dac70f32afc14baf90932949d3eaa8bebbe907726aca3ea336 size: 2205
跨容器拷貝
FROM demo/test:latest as netkiller MAINTAINER Netkiller <netkiller@msn.com> RUN mkdir /www COPY some/path/to/ /www/ FROM nginx:1.13-alpine RUN rm -rf /usr/share/nginx/html/* COPY --from=netkiller /www/ /usr/share/nginx/html/