Docker容器及镜像:

一、容器基本使用:

1、容器状态:

running(运行)、stopped(停止)、paused(暂停)、created(刚创建还未启动)

2、查看容器状态 

# docker container ps = docker  ps

[root@bogon ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
c12cba9df0dc        redis:4-alpine      "docker-entrypoint.s…"   58 seconds ago      Up 57 seconds       6379/tcp             redis
75665fe0aa94        nginx               "/docker-entrypoint.…"   2 weeks ago         Up 2 weeks          0.0.0.0:80->80/tcp   ningx-1

CONTAINER ID:指容器ID

IMAGE:容器镜像

COMMAND:这个容器内部运行得程序是什么

CREATED:创建时间

STATUS:状态

PORTS:监听端口

NAMES:名称

3、创建容器 

# docker  create

#docker   run

        选项:-t   //表示给启动的容器附加一个伪终端

                   -i   //进入交互式接口模式

                  注意:-i与-t在create时无法使用,原因在于-i-t是为了启动时交互式连入,其它选项create与run的区别不大

                  --name   //指名容器名称

                  --network    //指定网络接口(不指定的话默认是bridge,docker0桥)

                  --rm  //如果这个容器停止了则立即将其删除

                  -d   //运行至后台

                  注意:-d和--rm选项是不能同时存在的,因为送到后台去它不占用你前台,rm无法判断你什么时候终止

[root@bogon ~]# docker run --name redis -d redis:4-alpine   //在后台运行redis容器
c12cba9df0dc52d2404f126229721764ad9451ba34aed31b2ac14b6b9c043ebf

root@bogon ~]# docker run --name web -it --rm nginx:1.15-alpine /bin/sh   //运行容器,在容器停止时将其删除
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:7 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:586 (586.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          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)

注意:我们自己在做容器时一定要记住一个基本法则,你的镜像内唯一要运行的程序一定必须要运行在前台。我们此前在启动服务时比如httpd它默认一回车会到后台,这在容器内是不被允许的,原因在于如果容器内运行一个httpd启动跑后台后,你的容器自己会认为无支撑者,哪怕PID为1都不行

4、docker0

    当我们启动一个容器时我们不指定的情况下容器默认会放置在了一个docker桥上,它默认使用的网络地址是172.17.0.0/16网段,而docker0自己的地址则是172.17.0.1

5、显示当前系统支持的网络接口

#docker  network ls

[root@bogon ~]# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
756201332f10        bridge              bridge              local
cd91840ca853        host                host                local
d31eeeae3853        none                null                local

 

6、进入docker容器运行命令

 #docker container exec = docker exec

[root@bogon ~]# docker container exec -it redis /bin/sh  //连入redis容器内部的shell接口
/data # ps aux
PID   USER     TIME  COMMAND
    1 redis     0:01 redis-server
   12 root      0:00 /bin/sh
   17 root      0:00 ps aux

/data # netstat -tnl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      
tcp        0      0 :::6379                 :::*                    LISTEN      
/data # exit  

  注意:退出容器此时容器不会终止,因为容器还有redis-server,exit终止的只是/bin/sh,只有终止pid为1的进程容器才会停止

7、不进入容器交互式接口,在宿主机上查看该容器监听的端口

#docker container exec 容器名 netstat -tnl

[root@bogon ~]# docker container exec redis netstat -tul
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       
tcp        0      0 0.0.0.0:6379            0.0.0.0:*               LISTEN      
tcp        0      0 :::6379                 :::*                    LISTEN      

8、在容器外部停止容器

#docker stop

[root@bogon ~]# docker stop redis
redis

9、删除容器

#docker  rm

[root@bogon ~]# docker rm redis
redis

注意:我们此刻删除容器内部的数据也将不存在,正常情况下容器数据都保存在容器自己的名称空间中,删除容器时务必要小心

10、获取docker日志

docker容器中一个容器只运行一个进程,它可以让容器把进程发给控制台,只要连入控制台就能查看日志,查看容器内部日志直接使用docker container logs连入控制台直接访问,注意docker日志是直接发往终端的没有记录在文件当中,主要便于集中统一日志收集平台来收集日志

#docker container logs 容器名称

[root@bogon ~]# docker container logs web
172.17.0.1 - - [04/Aug/2020:09:39:55 +0000] "GET / HTTP/1.1" 200 612 "-" "curl/7.29.0" "-"

11、显示容器运行时资源占用情况(消耗的cpu,内存)

# docker stats

CONTAINER ID        NAME                CPU %               MEM USAGE / LIMIT     MEM %               NET I/O             BLOCK I/O           PIDS
8b9898aef4a9        web                 0.00%               1.395MiB / 972.3MiB   0.14%               1.28kB / 1.27kB     0B / 0B             2
75665fe0aa94        ningx-1             0.00%               1.867MiB / 972.3MiB   0.19%               1.44kB / 2.09kB     0B / 0B             3

12、显示指定容器内所有进程的相关信息

#docker container top

[root@bogon ~]# docker container top web
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                4123                4107                0                   17:09               ?                   00:00:00            nginx: master process nginx -g daemon off;
100                 4150                4123                0                   17:09               ?                   00:00:00            nginx: worker process

二、docker image

1、docker image

Docker镜像中含有启动容器所需要的文件系统及其内容,因此,其用于创建并启动docker容器

    采用分层构建机制,最底层为bootfs,其之为rootfs

        a:bootfs 用于系统引导的文件系统,包括bootliader和kernel,容器启动完成后会被卸载以节约内存资源

        b:rootfs 位于bootfs之上,表现为docker容器的根文件系统

            传统模式中,系统启动之时,内核挂载rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为只读模式

           docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个“可写”层

  

2、Docker image layer

    位于下层的镜像称为父镜像(parent image),最底层的称为基础镜像(base image)

    最上层为“可读写”层,其下层的均为“只读”层

   

3、Docker   Registry

    启动容器时,docker  daemon会试图从本地获取相关镜像,本地镜像不存在时,其将从 Registry中下载该镜像并保存到本地

   

    Docker Registry中的镜像通常由研发人员制作,而后推送至“公共”或者“私有”Registry上保存,供其它人员使用,例如部署到生产环境:

   

注意:生产环境中我们不要随意从其它地方下载镜像使用,除非这个镜像特别可靠,不然可能下载下来的镜像里被植入挖矿的代码之类

4、利用已有镜像层如何做镜像

 <1>首先去docker hub上去创建一个镜像仓库

<2>利用已有镜像去做镜像(在容器可写层中做一些修改,而后把修改结果保存成一个单独的层就可以成为镜像)

[root@bogon ~]# docker image pull busybox:latest   //先下载一个busybox镜像

[root@localhost ~]# docker image pull busybox:latest
latest: Pulling from library/busybox
61c5ed1cbdf8: Pull complete
Digest: sha256:4f47c01fa91355af2865ac10fef5bf6ec9c7f42ad2321377c21e844427972977
Status: Downloaded newer image for busybox:latest
docker.io/library/busybox:latest

[root@localhost ~]# docker run --name b1 -it busybox /bin/sh    //运行容器 在容器中做一个简单修改

/ # ls
bin   dev   etc   home  proc  root  sys   tmp   usr   var
/ # mkdir /data     //在容器内创建data目录
/ # mkdir /data/web/html -p     //在容器内创建 /data/web/html目录
/ # vi /data/web/html/index.html    //写一个测试网页

我们把上面修改过的busybox容器保存为镜像

[root@localhost ~]# docker container commit b1 572232220/myimg:v0.1  //基于b1容器去打包镜像并打标签
sha256:6dae971ed21d860aad31129fc3e5e74cc26f1e67f04e4cdc3db08c06ac09a3e3
[root@localhost ~]# docker image ls   //查看打包好的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
572232220/myimg     v0.1                6dae971ed21d        7 seconds ago       1.22MB
busybox             latest              018c9d7b792b        8 days ago          1.22MB


注意我们在打包镜像时有些镜像还在运行中,直接打包会打包不完整,这时我们可以用commit命令的-p选项表示做镜像时先暂停不再让程序往上写数据,这样可以确保我们得到的是一个一致的数据结构

测试:我们现在使用打包好的镜像572232220/myimg去运行容器

[root@localhost ~]# docker run --name mybbox1 -it 572232220/myimg:v0.1
/ # ls
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # ls /data/web/html/
index.html
/ # cat /data/web/html/index.html       
<h1>Test Page @Busybox Web Server</h1>

5、镜像上传到Docker hub

[root@localhost ~]# docker login   //输入用户名和密码登录Docker hub
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
Username: 572232220
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

[root@localhost ~]# docker push 572232220/myimg:v0.1    //推送镜像到docker hub
The push refers to repository [docker.io/572232220/myimg]
5a2f2a526c37: Pushed
514c3a3e64d4: Pushed
v0.1: digest: sha256:43c192e9b32d97112a1362e2690828ba7d43f95c33e4ed76917dd15dd1be7ce5 size: 734

登录docker hub查看镜像

 

 

   

 

 

 

       

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值