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

docker镜像的分层

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

docker镜像

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

docker镜像的创建方法

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

基于已有镜像创建

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

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

基于本地模板创建

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

基于 Dockerfile 创建

Dockerfile 是由一组指令组成的文件

Dockerfile 结构的四部分:

基础镜像信息;
维护者信息;
镜像操作指令;
容器启动时执行指令;

使用 Dockerfile 创建镜像并在容器中运行

dockerfile操作指令

1,基于已有镜像创建

[[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

2,基于本地模板创建

[[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

3,基于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
##利用浏览器进行访问

公有仓库与私有仓库

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

1,公有仓库

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

2,私有仓库

[[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 提供端口映射机制来将容器内的服务提供给外部网络访问,实质上就是将宿主机的端口映射到容器中,使得外部网络访问宿主机的端口便可访问容器内的服务。

1,端口映射

[[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端口

[[email protected] ~]# docker run -d -p 32000:80 nginx  ##指定端口
##利用浏览器访问32000端口

2,容器互联(使用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/14080162/2463945

时间: 2024-10-06 04:21:47

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

docker的网络、端口映射和容器间通信

docker作为服务器内部的一个容器单位,对外的通信也就有了困难.这里提供了一些几个解决方案. 1.Docker独立IP 简单说就是配置独立的网桥,分配给docker IP cd /etc/sysconfig/network-scripts/ vi ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none ONBOOT=yes TYPE=Ethernet BRIDGE="br0" BOOTPROTO=static vi ifcfg-br0 DEVICE="b

docker之镜像管理——仓库使用

仓库使用 docker官方仓库 注册 https://hub.docker.com 自由注册,邮件激活即可使用 命令使用 Docker  pull/search/login/push/tag tag [镜像名:版本]  [仓库]/[镜像名:版本]:标记本地镜像,将其归入某一仓库 Push [仓库]/[镜像名:版本]: 推送镜像到仓库  --需要登陆 Search [镜像名]:在仓库中查询镜像 – 无法查询到tag版本 Pull [镜像名:版本]: 下载镜像到本地 Login:登陆仓库 1.命令登

CentOS7 虚拟机docker安装宝塔及端口映射

启动docker服务 systemctl start docker 列出所有的容器 ID docker ps -aq [[email protected] ~]# docker pull centos [[email protected] ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/nginx latest 5a9061639d0a 5 days ago 126 MB docker.io/centos late

Docker之镜像管理常用命令

1.列出当前本地镜像:docker image ls2.查看镜像历史分层:docker history 镜像名:tag3.查看镜像具体详情:docker image inspect 镜像名:tag 可以看到容器配置主机名,工作目录,数据卷,标签等信息.4.docker image pull nginx:1.11 从docker仓库下载nginx:1.11版本镜像5.docker image rm busybox:latest 删除镜像6.docker image tag nginx:latest

使用iptables为docker容器动态添加端口映射

1.将当前iptables的配置写入保存到/etc/sysconfig/iptables 2.保存 /etc/init.d/iptables sava 3.修改iptables配置(vi /etc/sysconfig/iptables): 在适当位置增加下面红色的三行,然后重启iptables即可.(30612 是容器对外提供服务的端口) -A FORWARD -i docker0 -o docker0 -j ACCEPT -A DOCKER -d 172.17.0.10/32 ! -i doc

Docker(十二)-Docker Registry镜像管理

Registry删除镜像.垃圾回收 Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据.在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令,删除未被引用的层数据. 部署镜像仓库 (1)启动仓库容器 $ sudo docker run -d -v /home/config.yml:/etc/docker/registry/config.yml -p 5000:5000 --name test_registry registry:2.4.1

docker入门-镜像管理命令篇

一.下载.上传镜像 1:下载安装centos镜像 语法:docker [参数][镜像名称] [[email protected] ~]# docker pull centos Using default tag: latest latest: Pulling from library/centos a02a4930cb5d: Pull complete Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c734

Docker 之 镜像管理

一.镜像查询 二.镜像拉取 [[email protected] network-scripts]# docker pull alpine Using default tag: latest #默认最新版本,可指定版本如:docker pull alpine:3.10.3 latest: Pulling from library/alpine e6b0cf9c0882: Pull complete Digest: sha256:2171658620155679240babee0a7714f650

修改docker容器的端口映射

大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改已有的这个容器呢?有.在stackoverflow上面找到答案了. 方法一 1.停止容器(docker stop d00254ce3af7) 2.停止docker服务(systemctl stop docker) 3.修改这个容器的hostconfig.json文件中的端口(原帖有人提到,如果con