Docker容器之镜像管理,端口映射,容器互联

docker镜像的分层

  • Dockerfile 中的每个指令都会创建一个新的镜像层;
  • 镜像层将会被缓存和复用;
  • 当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效;
  • 某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效;
  • 镜像层是不变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然包含该文件

docker镜像

  • 是应用发布的标准格式
  • 可支撑一个docker容器的运行

docker镜像的创建方法

  • 基于已有镜像创建
  • 基于本地模板创建
  • 基于dockerfile创建

基于已有镜像创建

将容器里面运行的程序及运行环境打包生成新的镜像

docker commit [选项] 容器ID/名称 仓库名称:[标签]
-m:说明信息
-a:作者信息
-p:生成过程中停止容器的运行

基于本地模板创建

  • 通过导入操作系统模板文件生成新的镜像
  • 使用wget命令导入为本地镜像
  • 导入成功后可查看本地镜像信息

基于 Dockerfile 创建

  • Dockerfile 是由一组指令组成的文件
  • Dockerfile 结构的四部分
    • 基础镜像信息
    • 维护者信息
    • 镜像操作指令
    • 容器启动时执行指令
  • 使用 Dockerfile 创建镜像并在容器中运行

dockerfile操作指令

基于已有镜像创建

[[email protected] ~]# docker pull centos        //下载镜像
[[email protected] ~]# docker create -it centos /bin/bash      //基于centos镜像创建容器
30d395e63fc32b9dcf96029869f40a8002990f689410cca2660af4056ed2614f
[[email protected] ~]# docker ps -a      //查看容器信息
CONTAINER ID    IMAGE   COMMAND     CREATED     STATUS      PORTS               NAMES
30d395e63fc3        centos              "/bin/bash"         7 seconds ago       Created                                 inspiring_germain
[[email protected] ~]# docker commit -m "new" -a "daoke" 30d395e63fc3 daoke:centos    //将容器里面运行的程序及运行环境打包生成新的镜像
sha256:66d76f9225b94ce6156db953bd16c384f74067f981d45bee99340f3a965506d3
[[email protected] ~]# docker images    //查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
daoke               centos              66d76f9225b9        10 seconds ago      220MB
centos              latest              0f3e07c0138f        3 months ago        220MB

基于本地模板创建

[[email protected] ~]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/     //将本地模板挂载到Linux上
Password for [email protected]//192.168.100.3/LNMP-C7:
[[email protected] ~]# cd /mnt          //切换目录到/mnt
[[email protected] docker]# ls
debian-7.0-x86-minimal.tar.gz
[[email protected] mnt]# cat debian-7.0-x86-minimal.tar.gz | docker import - daoke:new            //基于本地模板创建一个镜像
sha256:487145d2411f0440c50fd93d0e8a9e27610d2de745a25d06955f21c80e65753a
[[email protected] mnt]# docker images        //查看镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
daoke               new                 487145d2411f        8 seconds ago       215MB
centos              latest              0f3e07c0138f        3 months ago        220MB

基于dockefile文件创建

[[email protected] ~]# mkdir apache     //创建一个目录
[[email protected] ~]# cd apache/
[[email protected] apache]# vim Dockerfile     //编写一个dockerfile文件
FROM centos                                   //基于的基础镜像
MAINTAINER The porject <xu>                //维护镜像的用户信息
RUN yum -y update                           //镜像操作指令安装Apache软件
RUN yum -y install httpd                       //安装Apache服务
EXPOSE 80                                 //开启80端口
ADD index.html /var/www/html/index.html     //复制网址首页文件
ADD run.sh /run.sh                       //将执行脚本复制到镜像中
RUN chmod 755 /run.sh
CMD ["/run.sh"]                           //启动容器时执行脚本
[[email protected] apache]# vim run.sh       //编辑run.sh脚本
#!/bin/bash
rm -rf /run/httpd/*              //清除缓存
exec /usr/sbin/apachectl -D FOREGROUND            //执行apache
[[email protected] apache]# echo "this is test web" > index.html     //创建页面信息
[[email protected] apache]# ls
Dockerfile  index.html  run.sh
[[email protected] apache]# docker build -t httpd:centos .            //执行创建镜像
[[email protected] apache]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               centos              b267aaf2c395        22 seconds ago      401MB
[[email protected] apache]# docker ps -a       //此时没有容器生成
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[[email protected] apache]# docker run -d -p 1234:80 httpd:centos        //创建映射,创建容器
34c424efdab9e381116de697c4971200b1564b1e38644407cc58d5ba8923a0ea
[[email protected] apache]# docker ps -a         //容器开启,1234是外部端口,80是内部端口
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
34c424efdab9        httpd:centos        "/run.sh"           9 seconds ago       Up 7 seconds        0.0.0.0:1234->80/tcp   great_williamson

公有仓库与私有仓库

  • 随着创建的镜像日志增多,就需要有一个保存镜像的地方,这就是仓库。目前主要有两种仓库:公共仓库、私有仓库。最方便的就是使用公共仓库上传和下载镜像,下载公共仓库中的镜像不需要注册,但是上传是需要注册的:公共仓库网址

公有仓库

//需要注册docker账号
//将创建好的 httpd:centos 镜像。上传到刚申请的公共仓库中:
docker tag httpd:centos xu/httpd:centos
docker push xu/httpd:centos

私有仓库

[[email protected] ~]# docker pull registry          //下载 registry镜像
[[email protected] ~]# vim /etc/docker/daemon.json
{
    "insecure-registries": ["192.168.13.128:5000"],         //指定仓库地址和端口号
    "registry-mirrors": ["https://3a8s9zx5.mirror.aliyuncs.com"]      //镜像加速
}
[[email protected] ~]# systemctl stop docker        //停止docker,开启docker
[[email protected] ~]# systemctl start docker
[[email protected] ~]# docker create -it registry /bin/bash   //创建registry镜像容器
209dadd90f5c555ba328fae5763a61ae5fe4489acc4bfb945a99bb2307a9f139
[[email protected] ~]# docker ps -a      //查看容器
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS               NAMES
209dadd90f5c        registry            "/entrypoint.sh /bin…"   4 seconds ago       Created                                           admiring_dewdney
34c424efdab9        httpd:centos        "/run.sh"                13 minutes ago      Exited (137) 35 seconds ago                       great_williamson
[[email protected] ~]# docker start 209dadd90f5c          //开启容器
209dadd90f5c
[[email protected] ~]# docker run -d -p 5000:5000 -v /data/registry:/tmp/registry registry          //创建映射端口和数据卷,宿主局的/data自动挂载容器重点的/tmp
fd4185499dfa29f1a1133f59b706a5524572ae3f22140137214ab4c8212ea8a4
[[email protected] ~]# docker images        //查看一下当前的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               centos              b267aaf2c395        17 minutes ago      401MB
centos              latest              0f3e07c0138f        3 months ago        220MB
registry            latest              f32a97de94e1        10 months ago       25.8MB
[[email protected] ~]# docker tag httpd:centos 192.168.13.128:5000/httpd         //修改标签
[[email protected] ~]# docker push 192.168.13.128:5000/httpd  ##上传镜像
[[email protected] ~]# curl -XGET http://192.168.13.128:5000/v2/_catalog        //获取私有仓库列表
{"repositories":["httpd"]}
[[email protected] ~]# docker pull 192.168.13.128:5000/httpd       //通过私有仓库下载

Docker 网络通信

  • docker 提供了映射容器端口到宿主机和容器互联机制来为容器提供网络服务。

端口映射

  • Docker 提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

    [[email protected] ~]# docker run -d -P nginx       //随机指定端口
    [[email protected] ~]# docker ps -a                 //查看容器
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES
    bcd11c99804e        nginx               "nginx -g ‘daemon of…"   13 seconds ago      Up 13 seconds                 0.0.0.0:32768->80/tcp

    利用浏览器访问32768端口

容器互联(使用centos镜像)

[[email protected] ~]# docker run -itd -P --name web1 centos /bin/bash      //创建web1容器
87c58af3100fbc112bf344a421942dd53451c0c663b697a55a8d410868f314bf
[[email protected] ~]# docker run -itd -P --name web2 --link web1:web1 centos /bin/bash          //创建web2连接web1容器
7a84075802b5689912c323196b5af398fb5912316efda014921c0e23d3e9cdd2
[[email protected] ~]# docker ps -a           //查看容器信息
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                    NAMES
7a84075802b5        centos              "/bin/bash"              6 seconds ago       Up 5 seconds                                           web2
87c58af3100f        centos              "/bin/bash"              42 seconds ago      Up 41 seconds                                          web1
[[email protected] ~]# docker exec -it 7a84075802b5 /bin/bash      //进入web2容器
[[email protected] /]# ping web1     //pingweb1看是否互联互通
PING web1 (172.17.0.5) 56(84) bytes of data.
64 bytes from web1 (172.17.0.5): icmp_seq=1 ttl=64 time=0.090 ms
64 bytes from web1 (172.17.0.5): icmp_seq=2 ttl=64 time=0.089 ms

原文地址:https://blog.51cto.com/14473285/2469894

时间: 2024-11-09 22:38:30

Docker容器之镜像管理,端口映射,容器互联的相关文章

Ubuntu下用docker安装redis镜像和使用redis容器分享

Ubuntu下用docker安装redis镜像和使用redis容器分享 1. 安装Ubuntu 2. 用Putty登录Ubuntu Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-40-generic x86_64) * Documentation:  https://help.ubuntu.com/ System information as of Wed Dec 31 06:41:16 UTC 2014 System load:  0.01  

Docker安装与镜像管理(一)

一.安装docker yum install epel-resase yum install docker-io  (RHEL6) yum install docker (RHEL7) 系统: [[email protected] ~]# uname -a Linux kvm.huangming.org 2.6.32-573.el6.x86_64 #1 SMP Thu Jul 23 15:44:03 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux [[email 

如何修改Docker已运行实例的端口映射

如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规划). 2.在docker运行过程中,需要增加端口映射的(往往这个情况比较多,凡事先运行起来,遇到问题再解决,哈哈) 那我们这一篇文章要解决已经创建的容器,如何修改端口 1)确定要修改端口的容器 dockder ps 记下容器id 2)停止运行的容器 docker stop 容器ID 3)找到容器的

Docker容器之镜像管理、端口映射、容器互联

docker镜像的分层 ?Dockerfile 中的每个指令都会创建一个新的镜像层:?镜像层将会被缓存和复用:?当 Dockerfile 的指令修改了,复制的文件变化了,或者构建镜像时指定的变量不同了,对应的镜像层缓存就会失效:?某一层的镜像缓存失效之后,它之后的镜像层缓存都会失效:?镜像层是不变的,如果在某一层中添加一个文件,然后在下一层中删除它,则镜像中依然包含该文件 docker镜像 是应用发布的标准格式可支撑一个docker容器的运行 docker镜像的创建方法 基于已有镜像创建基于本地

Docker安装及镜像管理

1.docker简介 容器虚拟化,比传统虚拟化轻量 2013年出现,发展非常迅猛 Redhat在6.5版本开始支持docker 使用GO语言开发,基于apache2.0协议 开源软件,项目代码在github维护 2.容器虚拟化和传统虚拟化比较 3.Docker的优势 启动非常快,秒级实现 资源利用率很高,一台机器可以跑上千个docker容器 更快的交付和部署,一次创建和配置后,可以在任意 地方运行 内核级别的虚拟化,不需要额外的hypevisor支持,会有更高的性能和效率 易迁移,平台依赖性不强

docker入门之镜像管理基础

docker镜像管理基础 首发:arppinging 一.镜像概述 1.1 联合挂载 在之前的文章我们提到过,容器是基于镜像启动的,镜像的存储驱动是overlay2 overlayFS将单个Linux主机上的两个目录合成一个目录,这些目录称为层,统一过程被称为联合挂载. 下图是一个docker镜像和docke容器的分层图,docker镜像是lowdir,docker容器是upperdir.而统一的视图层是merged层.如果一个镜像有多层的话,那么它的启动过程需要进行联合挂载,如下图,cento

Docker学习04_镜像管理

运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 可以在浏览器中访问 https://hub.docker.com/search?q=&type=image 来搜索和查看官方镜像仓库. 使用 docker images 列出本地镜像: 同一仓库源可以有多个 TAG,代表这个仓库源的不同个版本,如果不指定一个镜像的版本标签,docker 将默认使用 最新版本即”仓库源名称:latest” 镜像. 执行

Docker学习笔记——镜像、容器、仓库

Docker三个基本概念 镜像(image) 容器(container) 仓库(Repository) 镜像(image) 搜索镜像 docker search nginx 获取镜像 docker pull nginx 指定Registry地址和具体的仓库名下载镜像,没有指定Registry地址,默认从Docker Hub上下载 docker pull jwilder/nginx-proxy 查看镜像 docker images  REPOSITORY          TAG         

DOCKER 01:镜像和容器的基础命令使用

本文主要谈谈 docker 命令怎么使用的问题! 关于镜像的操作命令 已经知道,容器是镜像的运行的实例,所以想要运行一个容器,事先得拥有这个容器的镜像. 1. 使用页面搜索镜像: 在默认的注册点 docker hub,不管是官方还是非官方都上传了很多镜像: https://hub.docker.com 可以通过搜索指定的镜像名称找到对象的镜像仓库,如 nginx: 这里只是截图的一部分,可以看到第一个和后面的两个有区别,后面两个名字中间都有斜线. 这个斜线前面的是用户名,比如第二个,前面是 ng