docker管理镜像和管理容器以及端口映射

docker使用

  • 管理镜像
  • 管理容器
  • 管理存储
  • 管理网络

管理镜像:

  • build :基于dockerfile制作镜像
  • inspect:显示镜像的详细信息
  • load:从压缩包中导入镜像
  • save:将当前的某个镜像导出制作成压缩包
  • ls:查看当前本地有哪些镜像
  • pull:从镜像仓库拉取镜像到本地
  • push:将一个本地镜像推送到镜像仓库
  • rm:删除镜像
  • tag :给镜像打标签
  • prune:删除所有未使用的镜像

关于镜像仓库

  • 专门用来存储docker镜像的服务器,称之为镜像仓库
  • 网络上有很多镜像仓库

操作1:查看本地有哪些镜像

[root@master ~]# docker image ls
[root@master ~]# docker images

操作2:搜索镜像【比如搜索全部的nginx镜像】

[root@master ~]# docker search nginx

操作3:拉取镜像【拉取nginx:1.17.7-alpine】

[root@master ~]# docker image pull nginx:1.17.7-alpine

操作4:向docker仓库推送镜像

[root@master ~]# docker image push xxxxx

操作5:删除镜像

[root@master ~]# docker image rm -f nginx:2.0
[root@master ~]# docker rmi -f 470

操作6:查看镜像的详细信息

[root@master ~]# docker image inspect 82c

操作7:导出镜像操作【将nginx1.17.7-alpine导出】

[root@master ~]# docker image save 36189e6707f4>ngx.tar.gz

操作8:导入镜像【删除原有镜像,然后导入镜像】

[root@master ~]# docker load -i ngx.tar.gz 

操作9:给镜像打标签【名称设置为nginx,tag设置为1.17.7-alpine】

[root@master ~]# docker image tag 361 nginx:1.17.7-alpine

操作10:将一个正在运行的容器制作成镜像
例子:先安装一个centos容器,在这容器中安装nginx,修改配置文件,然后将这个做了修改的容器制作成镜像

[root@master ~]# docker commit  mycon1 nginx-temp:v0.1

容器的管理

docker container的子命令

  • cp:在宿主机和容器中互相发送
  • run:启动一个容器
  • inspect:显示容器的详细信息
  • pause:挂起容器
  • unpause:将挂起的容器继续运行
  • stop:关闭容器
  • start:将关闭的容器重新运行
  • prune:删除所有已经停止的容器
  • rm:删除指定的容器
  • rename:修改容器的名称
  • stats:动态显示容器的资源使用情况
  • ls:显示容器
  • logs:查看容器中的日志信息
  • exec:登录一个指定的容器

docker的子命令

  • kill:杀死容器
  • ps:查看容器
  • rm:删除容器
  • run:运行容器

操作1:运行一个nginx容器

格式:docker run [选项] 镜像名 [命令]

选项:

  • -d:让容器工作在后台
  • -i:以交互防护启动容器
  • -t:给用户绑定一个终端
  • –name:给容器设置名称
  • –rm:容器停止后自动删除容器

例子:启动一个nginx,让nginx工作在前台

[root@master ~]# docker container run --name my1 nginx:1.17.9

例子:启动一个nginx,让nginx工作在前台,并且给用户绑定一个交互窗口

[root@master ~]# docker run --name my2 -it nginx:1.17.9 /bin/bash

例子:启动一个nginx,让nginx工作在后台

[root@master ~]# docker container run --name my1 -d nginx:1.17.9

操作2:登录已经启动的容器

例子:启动一个nginx容器工作在后台,然后登录这个容器

[root@master ~]# docker run --name mycentos2 --rm -d centos:7 /usr/sbin/init
[root@master ~]# docker exec -it mycentos2 /bin/bash

操作3:查看容器【已经停止的容器/正在运行的容器】

格式:docker ps [选项]

选项:

  • -a:显示全部的容器,包括已经的容器
  • -q:仅仅显示容器的ID

案例1 :显示所有容器的id

[root@master ~]# docker ps -q -a

案例2:仅仅显示正在运行的容器的ID

[root@master ~]# docker ps -q

操作3:杀死容器

案例:杀死myos2这个容器

[root@master ~]# docker kill myos2

案例:杀死全部正在运行的容器

[root@master ~]# docker kill $(docker ps -q)

操作4:删除容器【正在运行的容器/已经停止的容器】
案例:删除已经停止的容器myos2

[root@master ~]# docker rm myos2

案例:删除正在运行的容器myos3

[root@master ~]# docker rm -f myos3

案例:删除全部的容器,包括停止和运行的

[root@master ~]# docker rm -f $(docker ps -a -q)

docker网络

[root@master ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
964b5dd9df18        bridge              bridge              local
2a6ad00f07cc        host                host                local
319913a95126        none                null                local
  • bridge:桥接网络,基于docker0实现
  • none:无网络,外部用户无法访问
  • host:让容器和宿主机使用相同的地址

案例:创建一个无网络模式的容器

[root@master ~]# docker run --name mybx2 -it --rm \
> --network none --hostname mybx2 \
> --dns 8.8.8.8 \
> --dns-search baidu.com \
> --add-host www.qq.com:1.1.1.1 \
> busybox
/ # ifconfig
lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # hostname
mybx2

/ # cat /etc/resolv.conf 
search linux.io
nameserver 8.8.8.8

暴露容器端口到网络

  • 不做作暴露:从docker主机外部无法访问容器,仅仅可以docker主机上访问
  • 暴露到特定端口:将容器的端口映射到docker主机的一个指定端口,可以完成从外部访问容器
  • 暴露到随机端口:将容器的端口映射到docker主机的一个随机端口,可以完成从外部访问容器

不做作暴露

[root@master ~]# docker run --name myngx1 -d --rm nginx——+
[root@master ~]# docker inspect myngx1 | grep IPAddress
            "SecondaryIPAddresses": null,
            "IPAddress": "172.17.0.3",
                    "IPAddress": "172.17.0.3",
[root@master ~]# curl 172.17.0.3

此时,在外部通过浏览器无法访问web

暴露到特定端口

[root@master ~]# docker run --name myngx2 -p 8903:80 -d --rm nginx 

外部用户访问的时候,访问的是宿主机的8903端口

暴露到随机端口

[root@master ~]# docker run --name myngx3 -p 80 -d --rm nginx 
[root@master ~]# docker ps 

通过ps可以看到将docker的端口暴露到那个宿主机端口
此时外部用户通过这个随机端口可以访问容器

联盟式网络

需要 创建两个容器,第二个容器使用第一个容器的地址

[root@master ~]# docker run --name c1 --rm -it --network centos:7 /bin/bash
[root@master ~]# docker run --name c2 --rm -it --network container:c1 centos:7 /bin/bash

修改docke容器的网络

  • 默认情况下,所有容器的ip都是由docker0分配的地址
  • 修改docker0的地址,就可以实现修改创建容器的网段

案例:修改docker配置文件,默认用10.0.0作为容器IP

[root@master ~]# cat /etc/docker/daemon.json 
{
   "registry-mirrors": ["https://mzxx8xy8.mirror.aliyuncs.com"],
   "bip": "10.0.0.1/8",
   "default-gateway": "10.0.0.100",
   "dns": ["8.8.8.8"]
}
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart docker

docker重点知识:

  • 如何做端口映射:-p 宿主机端口:容器端口
  • 如何指定容器的网络类型:–network host|bridge
  • 链模式网络如何使用:–network contariner:容器名
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值