一、名词解释:
Docker:开源的容器虚拟化平台,它使用客户端/服务器(C/S)架构模式,Docker客户端会与Docker守护进程进行通信,守护进程会处理如建立、运行、发布Docker容器。客户端与守护进程可以运行在同一个系统上,当然客户端也可连接远程的Docker守护进程。它们之间是通过Socket或Restful API进行通信。它磁盘占用空间小,因为Docker镜像用了分层技术,构建镜像大小,只有自身大小,不包含镜像的大小,内存消耗少,它共享宿主机的内核,没有操作的进程消耗。
Docker3个重要概念:
•镜像(Image)。镜像是静态的、可以被用户互相分享的文件。我们装系统时,首先你需要一个.iso镜像,才能安装系统。Docker中的镜像是静态的,只能pull别人的镜像或者push自己的镜像。它是Docker容器运行时的只读模板,每一个镜像由一系列的层(layers)组成,Docker使用UnionFS来将这些层联合到单独的镜像中。UnionFS允许独立文件系统中的文件和文件夹(称之为分支)被透明覆盖,形成一个单独连贯的文件系统。
•容器(Container)。容器可以理解为镜像的动态状态.每个Docker容器是从Docker镜像创建的,Docker容器可以运行、开始、停止、移动和删除。容器最符合的描述应该是Linux的iso文件的Live CD模式,不安装系统而直接进入系统。但是Live CD的害处就是你关机后作出的修改安装的软件全部gg,容器也是一样,一旦被直接推出,之前安装的gcc啊vim啊啥的就会全部gg掉。如果要保存修改,就需要将当前容器封装成一个新的镜像,这样下次启动这个新的镜像后之前作出的修改还都在。
•仓库(Repository)。Docker中的仓库很像git的代码仓库,它可以用来保存镜像,你可以pull自己之前push到自己仓库的镜像到本地,也可以pull别人push到公共仓库的镜像到自己本地。仓库有公有和私有之分.公用的Docker仓库名叫Docker Hub。
docker软件的版本历程:
Docker从17.03开始,转向基于时间的YY.MM 形式的版本控制方案。Docker从17.03开始分为企业版与社区版,社区版并非阉割版,而是改了个名称;企业版则提供了一些收费的高级特性。
EE版本维护期1年;CE的stable版本三个月发布一次,维护期四个月;另外CE还有edge版,一个月发布一次。Docker CE是免费的Docker产品的新名称,Docker CE包含了完整的Docker平台,非常适合开发人
员和运维团队构建容器APP。事实上,Docker CE 17.03,可理解为Docker 1.13.1的Bug修复版本
docker原理:
Linux 操作系统由内核空间和用户空间组成。内核空间是 kernelLinux 刚启动时会加载 bootfs 文件系统之后 bootfs 会被卸载掉。用户空间的文件系统是 rootfs包含我们熟悉的 /dev, /proc, /bin 等目录。
对于 base 镜像来说底层直接用 Host 的 kernel自己只需要提供 rootfs 就行了。而对于一个精简的 OSrootfs 可以很小只需要包括最基本的命令、工具和程序库就可以了。相比其他 Linux 发行版CentOS 的
rootfs 已经算臃肿的了alpine 还不到 10MB。我们平时安装的 CentOS 除了 rootfs 还会选装很多软件、服务、图形桌面等需要好几个 GB 就不足为奇了。
docker的安装:
1.1 Docker 要求 CentOS 系统的内核版本高于 3.10
1.2 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
1.3 设置YUM源
cat > /etc/yum.repods.d/docker-ce.repo < [docker-ce-stable] [docker-ce-stable-debuginfo] [docker-ce-stable-source] [docker-ce-edge] [docker-ce-edge-debuginfo] [docker-ce-edge-source] [docker-ce-test] [docker-ce-test-debuginfo] [docker-ce-test-source] [docker-ce-nightly] [docker-ce-nightly-debuginfo] [docker-ce-nightly-source] EOF 1.3.2 可以查看所有仓库中所有docker版本,并选择特定版本安装 # yum list docker-ce --showduplicates|sort –r [root@kubenode2 ~]# yum list docker-ce --showduplicates|sort -r # yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版3:18.09.2-3.el7 1.4 启动docker # systemctl start docker 1.5 查看docker版本 # docker version 1.6 下载镜像 我们从官方注册服务器(https://hub.docker.com)的仓库中pull下CentOS的镜像,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像 1.6.1 以centos为例 # docker search centos # docker pull centos 由于从国外网站下载镜像速度很慢,我们需要配置镜像加速器 打开这个地址: https://cr.console.aliyun.com,注册后,会获得一个阿里云的专属下载地址,然后在docker服务器上配置一些信息,即可: 类似如下: 我的专属下载地址为:https://nd04b1p5.mirror.aliyuncs.com 查看本地镜像: docker images [root@kubenode2 ~]# docker images 启动一个镜像:docker run –it 镜像名称 command [root@kubenode2 ~]# docker run -it busybox /bin/sh -it 表示运行在交互模式,是-i -t的缩写,即-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)一般这个模式就是可以启动bash,运行命令bash shell,然后和容器有命令行的交互 可以看到我们终端的字头变成/ #了,这就意味着我们的镜像已经创建了一个容器实例。现在我们可以对这个“busybox”进行操作了 当利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括: 检查本地是否存在指定的镜像,不存在就从公有仓库下载 利用镜像创建并启动一个容器 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去 从地址池配置一个 ip 地址给容器 执行用户指定的应用程序 执行完毕后容器被终止 1.8.2 # docker run -itd centos -d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看 1.8.3 后台启动一个容器后,如果想进入到这个容器,可以使用exec命令 # docker exec -it 容器ID /bin/bash 这种方式进入到容器,使用exit退出容器的话,docker ps -a 容器还在运行 1.9编辑镜像 比如安装vim: root@aa97ba3292ce:/# apt-get install vim 2.0 退出容器 如果使用exit,命令退出或Ctrl-D,则容器的状态处于Exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl-p + ctrl-q 退出,此时容器的状态为Up。 2.1查看当前正在运行的容器: # docker ps 2.2启动、停止、重启容器aa97ba3292ce的命令: # docker start aa97ba3292ce # docker stop aa97ba3292ce # docker restart aa97ba3292ce1 2.3 进入到后台启动的容器 # docker attach aa97ba3292ce1 2.4镜像保存 2.4.1 将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看 root@aa97ba3292ce:/#exit //先退出容器 ~$ docker commit -m "ubuntu with vim" -a "sgy" aa97ba3292ce sgy/ubuntu:vim ~$ docker images 其中,-m指定说明信息;-a指定用户信息;aa97ba3292ce代表容器的id;sgy/ubuntu:vim指定目标镜像的用户名、仓库名和 tag 信息。我这里都是为了博客瞎编的用户名,我自己的用户名也不是sgy,你运行命令的时候使用自己注册Docker时的用户名。 此时Docker中就有了我们新建的镜像sgy/ubuntu:vim,此镜像和原有的ubuntu镜像区别在于多了个vim工具。此时我们利用新镜像创建的容器,本身就自带vim了。 DockerFile学习: 在工作时一般建议这种方式,更简洁明了,Dockerfile的基本指令有十三个,分别是:FROM、MAINTAINER、RUN、CMD、EXPOSE、ENV、ADD、COPY、ENTRYPOINT、VOLUME、USER、WORKDIR、ONBUILD。 一般Dockerfile分4部分:基础镜像(父镜像)信息,维护者信息,镜像操作命令,容器启动命令。 一般把Dockerfile存放到git仓库中,并为每个项目创建git仓库,以方便通过自动化平台,自动构建docker镜像。 2.4.2.1 FROM 用法:FROM 说明:第一个指令必须是FROM了,其指定一个构建镜像的基础源镜像,如果本地没有就会从公共库中拉取,没有指定镜像的标签会使用默认的latest标签,可以出现多次,如果需要在一个Dockerfile中构建多个镜像。 2.4.2.2 MAINTAINER 用法:MAINTAINER 说明:描述镜像的创建者,名称和邮箱 2.4.2.3 RUN 用法:RUN "command" "param1" "param2" 说明:RUN命令是一个常用的命令,执行完成之后会成为一个新的镜像,这里也是指镜像的分层构建。一句RUN就是一层,也相当于一个版本。这就是之前说的缓存的原理。我们知道docker是镜像层是只读的,所以你如果第一句安装了软件,用完在后面一句删除是不可能的。所以这种情况要在一句RUN命令中完成,可以通过&符号连接多个RUN语句。RUN后面的必须是双引号不能是单引号(没引号貌似也不要紧),command是不会调用shell的,所以也不会继承相应变量,要查看输入RUN "sh" "-c" "echo" "$HOME",而不是RUN "echo" "$HOME"。 2.4.2.4 CMD 用法:CMD command param1 param2 说明:CMD在Dockerfile中只能出现一次,有多个,只有最后一个会有效。其作用是在启动容器的时候提供一个默认的命令项。如果用户执行docker run的时候提供了命令项,就会覆盖掉这个命令。没提供就会使用构建时的命令。 2.4.2.5 EXPOSE 用法:EXPOSE 说明:告诉Docker服务器容器对外映射的容器端口号,在docker run -p的时候生效。 2.4.2.6 ENV 用法:EVN EVN 说明:设置容器的环境变量,可以让其后面的RUN命令使用,容器运行的时候这个变量也会保留。 2.4.2.7 ADD 用法:ADD 说明:复制本机文件或目录或远程文件,添加到指定的容器目录,支持GO的正则模糊匹配。路径是绝对路径,不存在会自动创建。如果源是一个目录,只会复制目录下的内容,目录本身不会复制。ADD命令会将复制的压缩文件夹自动解压,这也是与COPY命令最大的不同。 2.4.2.8 COPY 用法:COPY 说明:COPY除了不能自动解压,也不能复制网络文件。其它功能和ADD相同。 2.4.2.9 ENTRYPOINT 用法:ENTRYPOINT "command" "param1" "param2" 说明:这个命令和CMD命令一样,唯一的区别是不能被docker run命令的执行命令覆盖,如果要覆盖需要带上选项--entrypoint,如果有多个选项,只有最后一个会生效。 2.4.2.10 VOLUME 用法:VOLUME ["path"] 说明:在主机上创建一个挂载,挂载到容器的指定路径。docker run -v命令也能完成这个操作,而且更强大。这个命令不能指定主机的需要挂载到容器的文件夹路径。但docker run -v可以,而且其还可以挂载数据容器。 2.4.2.11 USER 用法:USER daemon 说明:指定运行容器时的用户名或UID,后续的RUN、CMD、ENTRYPOINT也会使用指定的用户运行命令。 2.4.2.12 WORKDIR 用法:WORKDIR path 说明:为RUN、CMD、ENTRYPOINT指令配置工作目录。可以使用多个WORKDIR指令,后续参数如果是相对路径,则会基于之前的命令指定的路径。如:WORKDIR /home WORKDIR test 。最终的路径就是/home/test。path路径也可以是环境变量,比如有环境变量HOME=/home,WORKDIR $HOME/test也就是/home/test。 2.4.2.13 ONBUILD 用法:ONBUILD [INSTRUCTION] 说明:配置当前所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。意思就是,这个镜像创建后,如果其它镜像以这个镜像为基础,会先执行这个镜像的ONBUILD命令。 官方镜像dockfile查看,先到https://hub.docker.com/官网查,centos, 新建立一个空的目录,vim Dockerfile FROM centos 在此目录里面放置tomcat和jdk_1.7.0_79两个目录 [root@kubenode2 test]# ll 然后使用 docker build –t 10.83.32.154/library/tomcat:v1 ./ 构建镜像 [root@kubenode2 test]# docker images|grep tomcat docker run -d -p 8080:8080 --name tomcat 10.83.32.154/library/tomcat:v1 运行镜像,-p 8080:8080 把宿主机的8080端口和容器的8080端口做映射 docker ps|grep tomcat 查看启动的容器tomcat curl http://localhost:8080 查看能否访问tomcat容器 2.6 删除容器或者镜像 注意:删除镜像前必须先删除以此镜像为基础的容器(哪怕是已经停止的容器),否则无法删除该镜像,会报错Failed to remove image (e4415b714b62): Error response from daemon: conflict: unable to delete e4415b714b62 (cannot be forced) - image has dependent child images类似这种。 docker rmi 镜像ID 删除镜像 docker rm –f 容器运行ID 删除容器 先删除容器再删除镜像 2.7 harbor私有仓库的搭建 wget https://github.com/vmware/harbor/releases/download/v1.1.2/harbor-online-installer-v1.1.2.tgz tar xzvf harbor-online-installer-v1.1.2.tgz cd harbor 修改配置文件harbor.cfg 重点是修改登录ip、http还是https访问。登录的密码,数据库密码,用户是db_auth还是ldap_auth认证,邮箱信息等 [root@gydocker1 harbor]# egrep -v "^$|#" harbor.cfg hostname = 192.168.1.200 ui_url_protocol = http db_password = test@1234 max_job_workers = 3 customize_crt = on ssl_cert = /data/cert/server.crt ssl_cert_key = /data/cert/server.key secretkey_path = /data admiral_url = NA email_identity = email_server = smtp.exmail.qq.com email_server_port = 465 email_username [email protected] email_password = 111111 email_from = gaoyang email_ssl = true harbor_admin_password = 111111 auth_mode = db_auth ldap_url = ldaps://ldap.mydomain.com ldap_basedn = ou=people,dc=mydomain,dc=com ldap_uid = uid ldap_scope = 3 ldap_timeout = 5 self_registration = on token_expiration = 30 project_creation_restriction = everyone verify_remote_cert = on [root@gydocker1 harbor]# 安装一下docker,然后再执行./install.sh 执行此./install.sh 是需要安装docker-compose 安装docker-compose /usr/local/python2.7.12/bin/python -m ensurepip /usr/local/python2.7.12/bin/pip install docker-compose vim ~/.bash_profile PATH=$PATH:$HOME/bin:/usr/local/python2.7.12/bin 修改PATH变量的值 退出root用户的登录,然后重新登录 执行完./install.sh 之后就通过docker-compose安装好了harbor仓库,检查的方法是 Docker-compose ps [root@gydocker1 harbor]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------ harbor-adminserver /harbor/harbor_adminserver Up harbor-db docker-entrypoint.sh mysqld Up 3306/tcp harbor-jobservice /harbor/harbor_jobservice Up harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp harbor-ui /harbor/harbor_ui Up nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp registry /entrypoint.sh serve /etc/ ... Up 5000/tcp [root@gydocker1 harbor]# [root@gydocker1 harbor]# docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------------------------------------------ harbor-adminserver /harbor/harbor_adminserver Up harbor-db docker-entrypoint.sh mysqld Up 3306/tcp harbor-jobservice /harbor/harbor_jobservice Up harbor-log /bin/sh -c crond && rm -f ... Up 127.0.0.1:1514->514/tcp harbor-ui /harbor/harbor_ui Up nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp registry /entrypoint.sh serve /etc/ ... Up 5000/tcp [root@gydocker1 harbor]# 如果全部是up状态的话,就说明没有问题了 然后通过网页访问http://192.168.1.200/harbor 使用配置文件里面定义的用户名admin admin@1234 创建用户名 这个是默认的项目,在里面增加用户的权限 要上传一个镜像到harbor仓库的方式: docker image tag bitnami/mariadb 192.168.1.200/library/mariadb-gytest 先把本地的一个mariadb数据库的镜像重新打一个tag,命名为带有服务器ip和项目的名字 [root@gydocker2 ~]# cat /etc/docker/daemon.json { "registry-mirrors": ["https://h57zmjw3.mirror.aliyuncs.com"], "insecure-registries":["192.168.1.200"] } 还需要修改一下/etc/docker/daemon.json 把仓库的地址加进去,主要是insecure-registries就是非Https的仓库地址,允许访问http的仓库。 [root@gydocker2 ~]# docker login 192.168.1.200 输入用户名和密码 登录成功之后,就可以上传了 docker push 192.168.1.200/library/mariadb-gytest 在其他的docker服务器上面下载,也是需要配置/etc/docker/daemon.json 把这个非https的harbor仓库地址填进去。然后再下载docker pull 192.168.1.200/library/mariadb-gytest就可以了 docker单机网络模式: host 模式,使用 --net=host 指定。 container 模式,使用 --net=container:NAMEorID 指定。 none 模式,使用 --net=none 指定。 bridge 模式,使用 --net=bridge 指定,默认设置。 host 模式 如果启动容器的时候使用 host 模式,那么这个容器将不会获得一个独立的 Network Namespace,而是和宿主机共用一个 Network Namespace。容器将不会虚拟出自己的网卡,配置自己的 IP 等,而是使用宿主机的 IP 和端口。 例如,我们在 10.10.101.105/24 的机器上用 host 模式启动一个含有 web 应用的 Docker 容器,监听 tcp 80 端口。当我们在容器中执行任何类似 ifconfig 命令查看网络环境时,看到的都是宿主机上的信息。而外界访问容器中的应用,则直接使用 10.10.101.105:80 即可,不用任何 NAT 转换,就如直接跑在宿主机中一样。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。 container 模式 这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。 none模式 这个模式和前两个不同。在这种模式下,Docker 容器拥有自己的 Network Namespace,但是,并不为 Docker容器进行任何网络配置。也就是说,这个 Docker 容器没有网卡、IP、路由等信息。需要我们自己为 Docker 容器添加网卡、配置 IP 等。 bridge模式、 bridge 模式是 Docker 默认的网络设置,此模式会为每一个容器分配 Network Namespace、设置 IP 等,并将一个主机上的 Docker 容器连接到一个虚拟网桥上。当 Docker server 启动时,会在主机上创建一个名为 docker0 的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。接下来就要为容器分配 IP 了,Docker 会从 RFC1918 所定义的私有 IP 网段中,选择一个和宿主机不同的IP地址和子网分配给 docker0,连接到 docker0 的容器就从这个子网中选择一个未占用的 IP 使用。如一般 Docker 会使用 172.17.0.0/16 这个网段,并将 172.17.42.1/16 分配给 docker0 网桥(在主机上使用 ifconfig 命令是可以看到 docker0 的,可以认为它是网桥的管理接口,在宿主机上作为一块虚拟网卡使用) 列出当前主机网桥 brctl show # brctl 工具依赖 bridge-utils 软件包 使用特定范围的 IP Docker 会尝试寻找没有被主机使用的 ip 段,尽管它适用于大多数情况下,但是它不是万能的,有时候我们还是需要对 ip 进一步规划。Docker 允许你管理 docker0 桥接或者通过-b选项自定义桥接网卡,需要安装bridge-utils软件包。 基本步骤如下: ensure Docker is stopped # 确保 docker 的进程是停止的 create your own bridge (bridge0 for example) # 创建自定义网桥 assign a specific IP to this bridge # 给网桥分配特定的 ip start Docker with the -b=bridge0 parameter # 以 -b 的方式指定网桥 # Stopping Docker and removing docker0 $ sudo service docker stop $ sudo ip link set dev docker0 down $ sudo brctl delbr docker0 # Create our own bridge $ sudo brctl addbr bridge0 $ sudo ip addr add 192.168.5.1/24 dev bridge0 $ sudo ip link set dev bridge0 up # Confirming that our bridge is up and running $ ip addr show bridge0
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Edge - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Edge - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Edge - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/edge
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/7/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
* updates: mirror.jdcloud.com
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror
Installed Packages
* extras: mirrors.aliyun.com
docker-ce.x86_64 3:18.09.2-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.2-3.el7 @docker-ce-stable
docker-ce.x86_64 3:18.09.1-3.el7 docker-ce-stable
docker-ce.x86_64 3:18.09.0-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.3.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.2.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.1.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.06.0.ce-3.el7 docker-ce-stable
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 18.03.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.12.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.09.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.06.0.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.3.ce-1.el7 docker-ce-stable
docker-ce.x86_64 17.03.2.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.1.ce-1.el7.centos docker-ce-stable
docker-ce.x86_64 17.03.0.ce-1.el7.centos docker-ce-stable sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://nd04b1p5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
REPOSITORY TAG IMAGE ID CREATED SIZE
360cloud/wayne latest d7fd2b9a9084 11 days ago 277MB
mirrorgooglecontainers/kube-controller-manager-amd64 v1.13.3 0482f6400933 4 weeks ago 146MB
k8s.gcr.io/kube-controller-manager v1.13.3 0482f6400933 4 weeks ago 146MB
mirrorgooglecontainers/kube-apiserver-amd64 v1.13.3 fe242e556a99 4 weeks ago 181MB
k8s.gcr.io/kube-apiserver v1.13.3 fe242e556a99 4 weeks ago 181MB
mirrorgooglecontainers/kube-proxy-amd64 v1.13.3 98db19758ad4 4 weeks ago 80.3MB
k8s.gcr.io/kube-proxy v1.13.3 98db19758ad4 4 weeks ago 80.3MB
mirrorgooglecontainers/kube-scheduler-amd64 v1.13.3 3a6f709e97a0 4 weeks ago 79.6MB
k8s.gcr.io/kube-scheduler v1.13.3 3a6f709e97a0 4 weeks ago 79.6MB
nginx 1.14-alpine 66952fd0a8ef 4 weeks ago 16MB
quay.io/coreos/flannel v0.11.0-amd64 ff281650a721 4 weeks ago 52.5MB
carlziess/coredns-1.2.6 latest f59dcacceff4 3 months ago 40MB
k8s.gcr.io/coredns 1.2.6 f59dcacceff4 3 months ago 40MB
k8s.gcr.io/etcd 3.2.24 3cab8e1b9802 5 months ago 220MB
mirrorgooglecontainers/etcd-amd64 3.2.24 3cab8e1b9802 5 months ago 220MB
registry.cn-hangzhou.aliyuncs.com/google_containers/tiller v2.8.2 1c5314e713c2 11 months ago 71.6MB
ikubernetes/myapp v1 d4a5e0eaa84f 12 months ago 15.5MB
ikubernetes/myapp v2 54202d3f0f35 12 months ago 15.5MB
registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller 0.10.2 1471cd9abc3b 13 months ago 203MB
mirrorgooglecontainers/pause-amd64 3.1 da86e6ba6ca1 14 months ago 742kB
k8s.gcr.io/pause 3.1 da86e6ba6ca1 14 months ago 742kB
registry.cn-hangzhou.aliyuncs.com/google_containers/defaultbackend 1.3 a70ad572a50f 2 years ago 3.62MB
mysql 5.7.14 4b3b6b994512 2 years ago 385MB
[root@kubenode2 ~]#
/ #
MAINTAINER gaoyang "[email protected]"
RUN mkdir -p /opt/jdk && mkdir -p /opt/tomcat
ADD jdk1.7.0_79 /opt/jdk
ADD tomcat /opt/tomcat
ENV CATALINA_HOME /opt/tomcat
ENV JAVA_HOME /opt/jdk
EXPOSE 8080
ENV PATH $PATH:$JAVA_HOME/bin
CMD ["/opt/tomcat/bin/catalina.sh","run"]
total 8
-rw-r--r-- 1 root root 282 Mar 4 19:50 Dockerfile
drwxr-xr-x 8 10 143 4096 Apr 11 2015 jdk1.7.0_79
drwxr-xr-x 9 root root 149 Mar 4 19:51 tomcat
10.83.32.154/library/tomcat v1 cc6369835c01 3 minutes ago 522MB
[root@kubenode2 test]#
推荐关注我的个人微信公众号 “云时代IT运维”,周期性更新最新的应用运维类技术文档。关注虚拟化和容器技术、CI/CD、自动化运维等最新前沿运维技术和趋势;